{
+ if (store.saving) return
+ patch({ saving: true })
+ try {
+ const next = await bridge().saveAutoCheckin?.({ startupCatchUp: enabled })
+ applySnapshot(next)
+ // 与总开关同一口径:两条分开调(扫描器只认字面量首参)
+ if (enabled) toast(t('启动补签已开启'))
+ else toast(t('启动补签已关闭'))
+ } catch (error) {
+ toast(t('保存失败:{error}', { error: errorMessage(error) }), 'err')
+ } finally {
+ patch({ saving: false })
+ }
+}
+
/**
* 删除一条条目。确认在组件层做(wbConfirm),这里只管删。
* 删除合成的默认条目 = 后端写空数组,「从旧字段合成」不再发生(界面照实变空)。
diff --git a/desktop-tauri/ui-islands/src/islands/checkin-state.ts b/desktop-tauri/ui-islands/src/islands/checkin-state.ts
index 6cb899d6..570c26f0 100644
--- a/desktop-tauri/ui-islands/src/islands/checkin-state.ts
+++ b/desktop-tauri/ui-islands/src/islands/checkin-state.ts
@@ -71,6 +71,8 @@ export type AutoCheckinState = {
lastFiredToday?: boolean
nextRunAt?: number | null
lastResult?: CheckinHistoryEntry | null
+ /** 启动时立即补签(缺省 true;关掉后启动不补,等到窗口起点由调度触发) */
+ startupCatchUp?: boolean
running?: boolean
}
@@ -85,6 +87,8 @@ export type ScheduleEntry = {
displayLabel?: string
enabled?: boolean
time?: string
+ /** 随机前后 N 分钟(0 / 缺省 = 不随机,窗口就是时刻本身) */
+ jitterMinutes?: number
providers?: string[]
lastFiredDate?: string | null
lastFiredToday?: boolean
diff --git a/desktop-tauri/ui/assets/providers/modelscope.png b/desktop-tauri/ui/assets/providers/modelscope.png
new file mode 100644
index 00000000..308b1cf1
Binary files /dev/null and b/desktop-tauri/ui/assets/providers/modelscope.png differ
diff --git a/desktop-tauri/ui/i18n/en/add-account.js b/desktop-tauri/ui/i18n/en/add-account.js
index 248122c3..a5f64f5a 100644
--- a/desktop-tauri/ui/i18n/en/add-account.js
+++ b/desktop-tauri/ui/i18n/en/add-account.js
@@ -1,2 +1,2 @@
/* Agent2API 词典构建产物:en/add-account —— 由 desktop-tauri/i18n/build.mjs 生成,请勿手改;源头是 i18n-src/*.json */
-window.wbI18nDict = window.wbI18nDict || {}; Object.assign(window.wbI18nDict, { " · 模型 {head}{rest}": " · Models: {head}{rest}", " 等 {n} 个": " ({n} total)", "1// 开头的 Google refresh token(也可直接粘贴 refresh_token=… 整行)": "Google refresh token starting with 1// (you can also paste the whole refresh_token=… line)", "11 位大陆手机号": "11-digit mainland China mobile number", "1~64 个字符,账号列表里按它分组显示": "1-64 characters; accounts are grouped by it in the account list", "6 位数字": "6 digits", "没有可自动领的活动": "No campaigns can be claimed automatically", "领到的是套餐赠送积分,不会增加福利模型的 token 池;": "
What you receive is plan gift points, which do not add to the welfare model token pool; ", "Anthropic 兼容端点在 https://api.deepseek.com/anthropic(协议换 anthropic 时填它)": "The Anthropic-compatible endpoint is https://api.deepseek.com/anthropic (fill it in when you switch the protocol to anthropic)", "Anthropic 协议填根地址,不要带 /v1": "For the Anthropic protocol, use the root URL without /v1", "Antigravity": "Antigravity", "AutoClaw 国内版": "AutoClaw China edition", "AutoClaw 国际版": "AutoClaw International edition", "BDUSS 必填;请粘贴**完整 Cookie**(Cookie 编辑器一键导出即可)—— 其中 **PTOKEN 必须保留**,网关要用它向百度换发 KukuAI 业务会话令牌,缺了它模型刷新会报「未登录」。支持整段 Cookie 头、Cookie 编辑器导出的 JSON 数组,或 {BDUSS, STOKEN} 对象。KukuAI 没有刷新机制,登录态过期后重新粘贴即可。": "BDUSS is required; paste the **full Cookie** (a Cookie editor can export it in one click) — the **PTOKEN must be kept**, as the gateway uses it to exchange for a KukuAI business session token from Baidu; without it, model refresh reports \"Not signed in\". A full Cookie header, a JSON array exported by a Cookie editor, or a {BDUSS, STOKEN} object are all supported. KukuAI has no refresh mechanism, so once the login state expires, just paste it again.", "BDUSS=…; STOKEN=…(或 Cookie 编辑器导出的 JSON)": "BDUSS=…; STOKEN=… (or the JSON exported by a Cookie editor)", "CatPaw 的 X-Passport-Token(登录态 Cookie)": "CatPaw's X-Passport-Token (login-state Cookie)", "Cline Pass 的 API Key 在 app.cline.bot 获取(订阅制);端点为 OpenAI 兼容,模型清单以 Cline 控制台为准,模型名在模型管理里按裸名添加(如 glm-5.2 / kimi-k2.7-code / deepseek-v4-pro);上游按客户端形态校验,所需的客户端请求头已随卡预置": "Get the Cline Pass API Key at app.cline.bot (subscription-based); the endpoint is OpenAI-compatible, the model catalog follows the Cline console, and model names are added under Model management with the plain name (e.g. glm-5.2 / kimi-k2.7-code / deepseek-v4-pro); the upstream validates the client shape, so the required client request headers are preset on this card", "Cloud-IDE-JWT(三段点分)": "Cloud-IDE-JWT (three dot-separated segments)", "Command Code": "Command Code", "JWT(三段点分;也可直接粘贴 Bearer 整行或 data.bin 内容)": "JWT (three dot-separated parts; you can also paste a whole Bearer line or the data.bin content)", "JWT(三段点分;也可直接粘贴 chatglm_token=… 整行)": "JWT (three dot-separated parts; a whole chatglm_token=… line works too)", "MonkeyCode": "MonkeyCode", "MonkeyCode 国际版": "MonkeyCode International edition", "NVIDIA NIM 托管端点,Key 在 integrate.api.nvidia.com 申请": "NVIDIA NIM managed endpoint; apply for the Key at integrate.api.nvidia.com", "OfficeAce 果办": "OfficeAce", "accessToken 是 Accio 的登录凭证(一长串不透明 token,不是 JWT);refreshToken 可选,填了之后到期能自动续期。请填写 {label}账号的凭证 —— {siteNote}(最容易拿到的办法:直接用上方的「网页登录」,不需要手工找 token。)": "accessToken is Accio's login credential (a long opaque token, not a JWT); refreshToken is optional and enables automatic renewal on expiry. Enter the credential of the {label} account — {siteNote} (the easiest way to get it: just use \"Web login\" above; no need to hunt for the token manually.)", "accessToken 是 Trae 的 Cloud-IDE-JWT(三段点分),refreshToken 用于到期自动续期(本家 refreshToken 一次一换:换发一次旧的即作废,所以两份程序别同时刷同一个账号)。
手工粘贴时请连 machineId / deviceId 一起填:上游把它们与登录时上传的设备公钥绑在一起判设备,凭空换一对会撞 2xxxx 那族设备绑定拒绝。
没有这三样时的正路是用上方的「网页登录」;容器 / 远程部署形态按提示粘贴地址栏回调地址即可。": "accessToken is Trae's Cloud-IDE-JWT (three dot-separated segments), and refreshToken enables automatic renewal on expiry (this provider rotates refreshToken on every use: once exchanged, the old one is void, so do not refresh the same account from two programs at once).
When pasting manually, fill in machineId / deviceId as well: upstream ties them to the device public key uploaded at sign-in to identify the device, and swapping in a new pair from nowhere triggers the 2xxxx family of device-binding rejections.
Without these three, the proper route is \"Web login\" above; for container / remote deployments, paste the callback URL from the address bar as prompted.", "monkeycode_ai_session 的值(也可直接粘贴整段 Cookie)": "The value of monkeycode_ai_session (you can also paste the whole Cookie)", "refreshToken 可选,填了到期可自动续期;两者都能从小浣熊客户端登录态文件里取到。": "refreshToken is optional and enables automatic renewal on expiry; both can be obtained from the Raccoon client login-state file.", "refreshToken 可选,填了可自动续期;两者都能从客户端登录态文件取到。同一个 Cline 账号两个池都能用,这里归入 {label}。": "refreshToken is optional and enables automatic renewal; both can be obtained from the client login-state file. The same Cline account works in both pools; here it is grouped under {label}.", "token 支持 enc: 前缀(Windows 上自动解密)。未填 refreshToken 无法自动续期。": "token supports the enc: prefix (decrypted automatically on Windows). Without a refreshToken, automatic renewal is not possible.", "token 是登录态 Cookie;CatPaw 没有刷新机制,过期后需在客户端重新登录。": "token is the login-state Cookie; CatPaw has no refresh mechanism, so sign in again in the client after it expires.", "user_ 开头的 API Key(也可直接粘贴 Authorization: Bearer … 整行)": "API Key starting with user_ (you can also paste the whole Authorization: Bearer … line)", "{label} 网页登录的打开方式": "How to open {label} web login", "{label} 账号地区": "{label} account region", "{label} 账号的添加方式": "How to add a {label} account", "{name} 不是合法 JSON:{reason}": "{name} is not valid JSON: {reason}", "{name}要粘一个 JSON 对象(形如 {sample})": "{name} requires a JSON object (like {sample})", "{n} 个账号": "{n} accounts", "{n} 个账号,点击添加": "{n} accounts, click to add", "{seconds}s 后重发": "Resend in {seconds}s", "✅ {label}账号已添加": "✅ {label} account added", "✅ {label}账号已添加{name}": "✅ {label} account added{name}", "✅ 已从 cc-switch 导入 {n} 个供应商": "✅ Imported {n} providers from cc-switch", "✅ 已创建自定义提供商「{name}」并添加账号": "✅ Created custom provider \"{name}\" and added an account", "✅ 已删除自定义提供商「{name}」{accounts}{keys}": "✅ Deleted custom provider \"{name}\"{accounts}{keys}", "✅ 已更新已有账号{name}(同一把 API Key 只保留一条,重复添加会合并)": "✅ Updated the existing account{name} (one account per API key; re-adding merges into it)", "✅ 登录成功,{edition}账号已加入列表": "✅ Signed in; {edition} account added to the list", "✅ 领取成功:{planId}{period}": "✅ Claim successful: {planId}{period}", " 同一家可以放多把 key,按优先级轮换。": " One provider can hold multiple keys, rotated by priority.", "「{name}」的账号添加功能还在开发中,敬请期待。": "Adding accounts for \"{name}\" is still in development — stay tuned.", "一个 Key 用遍多家模型,模型名用「厂商/模型」全称(如 deepseek/deepseek-chat)": "One Key works across many vendors; use the full \"vendor/model\" name (e.g. deepseek/deepseek-chat)", "上游不要鉴权时留空,并勾选下面一项(留空又不勾会被当成未配置凭证)": "Leave blank when the upstream needs no authentication, and check the option below (blank without the checkbox counts as no credential configured)", "上游信息": "Upstream info", "不可领({status})": "Not claimable ({status})", "不支持导入": "Import not supported", "不是有效的凭证文件:内容要是一个 JSON 对象": "Not a valid credential file: the content must be a JSON object", "不是有效的凭证文件:需要包含 accessToken 与 uid": "Not a valid credential file: accessToken and uid are required", "不是自定义提供商": "Not a custom provider", "不需要 Key:转发与拉取模型都不发送鉴权头": "No Key needed: neither forwarding nor model fetching sends auth headers", "不需要登录:点下面的按钮,网关会直接在智谱清言换发一份访客凭证并加入账号列表(也可以先填个备注名)。访客凭证可以直接用来对话,免费额度由上游按设备发放。
注意:访客账号没有积分体系 —— 它与「会员积分」「每日登录积分」「活动领取」相关的接口一律需要登录,因此那些能力对访客会如实跳过(账号页的积分、签到中心都不显示读数)。想要积分就用「填写凭证」粘一个已登录账号的令牌,或「导入桌面端登录态」。": "No sign-in needed: click the button below and the gateway will obtain a guest credential from Zhipu Qingyan directly and add it to the account list (you can fill in a note name first). The guest credential can be used for chat right away; the free quota is issued by the upstream per device.
Note: a guest account has no points system — its member points, daily sign-in points and activity claim endpoints all require sign-in, so those capabilities are skipped for guests (no readings are shown on the accounts page or in the check-in center). To get points, use \"Fill in credentials\" to paste a signed-in account token, or \"Import desktop sign-in state\".", "两版账号可同时保存,各自一份模型清单(国内版与国际版是两家提供商,可分别启用与映射)。": "Both editions' accounts can be saved at once, each with its own model catalog (the China and International editions are two providers that can be enabled and mapped separately).", "中国版": "China edition", "今天没有需要领的活动(都已到账)": "No campaigns to claim today (all already credited)", "今天(北京时间 {day})已试 {attempts} 次,还能试 {left} 次{next}
": "Tried {attempts} times today (Beijing time {day}); {left} attempts left{next}
", "从别的机器(或 OfficeAce 桌面端 models.json)取三项贴进来:模型网关基址(baseUrl,形如 https://modelgw-…/v2)与 modelAppKey / modelAppSecret。这三项就能转发(网关凭据不过期);控制面临时凭据(accessKeyId 等)可选,留空则额度/自动续期不可用,但不影响转发。": "Grab three items from another machine (or from the OfficeAce desktop app's models.json) and paste them here: the model gateway base URL (baseUrl, shaped like https://modelgw-…/v2) plus modelAppKey / modelAppSecret. These three are enough to forward requests (the gateway credential never expires); the control-plane temporary credentials (accessKeyId and so on) are optional — leaving them blank disables balance queries and auto-renewal but does not affect forwarding.", "从本机导入桌面端登录态": "Import desktop login state from this machine", "任务镜像 id": "Task image id", "余额查询": "Balance query", "使用 Google 账号登录": "Sign in with Google", "使用 Zai 账号登录": "Sign in with Zai", "使用个人访问令牌(PAT)": "Use a personal access token (PAT)", "免费模型不用填 Key(默认勾上「该上游无需鉴权」,网关自动用匿名凭证);付费模型则填 Zen 的 API Key。免费档上游只认官方客户端形态,已默认开启「伪装 OpenCode 官方客户端」": "Free models need no Key (\"This upstream needs no authentication\" is checked by default, and the gateway uses anonymous credentials automatically); for paid models, enter your Zen API Key. The free tier only accepts the official client form, so \"Emulate the official OpenCode client\" is on by default", "内嵌窗口": "Embedded window", "内嵌窗口打开;关窗即取消等待(Google 账号被拒时改用系统浏览器)": "Opens in the embedded window; closing it cancels the wait (if a Google account is rejected, switch to the system browser)", "内嵌窗口打开;完成后自动加入列表,关窗即取消等待": "Opens in the embedded window; added to the list when done; closing it cancels the wait", "内嵌窗口打开;扫码完成后自动加入列表,关窗即取消等待": "Opens in an embedded window; the account is added automatically once you have scanned — closing the window cancels the wait", "内嵌窗口用全新环境,多账号互不影响;关窗即取消等待": "The embedded window uses a fresh environment, so multiple accounts do not affect each other; closing it cancels the wait", "内嵌窗口(推荐)": "Embedded window (recommended)", "准备验证…": "Preparing verification…", "凭据 JSON": "Credential JSON", "凭证文件在哪?": "Where is the credential file?", "创建并添加账号": "Create and add account", "创建这个提供商,并同时建立它的第一个账号。": "Create this provider and its first account in one step.", "删除功能不可用(脚本未就绪)": "Delete is unavailable (script not ready)", "删除失败:{reason}": "Delete failed: {reason}", "删除此提供商": "Delete this provider", "及 {n} 个账号": " and {n} accounts", "发送中…": "Sending…", "发送失败:{message}": "Send failed: {message}", "发送未确认:登录窗口已弹出,请在弹出的窗口中手动完成登录": "Send unconfirmed: the sign-in window has opened; complete the sign-in manually in that window", "取消失败:{message}": "Cancel failed: {message}", "取消等待": "Cancel sign-in", "只有「内嵌窗口」能恢复第三方入口:系统浏览器里我们无法改动登录页": "Only the Embedded window can restore third-party options: we cannot modify the sign-in page in the system browser", "可选": "Optional", "可选(cloudaicompanionProject):留空由网关自动发现": "Optional (cloudaicompanionProject); if blank, the gateway discovers it automatically", "可选,展示用": "Optional; for display", "可选,没有则无法自动续期": "Optional; without it, automatic renewal is not possible", "可选,留空使用凭据里的 user_name": "Optional; defaults to the user_name in the credential", "可选,留空使用账号姓名、邮箱或令牌指纹": "Optional; defaults to the account name, email, or token fingerprint", "可选,留空使用账号昵称或邮箱": "Optional; defaults to the account nickname or email", "可选,留空则用 key 尾号": "Optional; defaults to the key suffix", "可选,留空则用 userId": "Optional; defaults to userId", "可选,留空则用上游返回的账号名或账号 id": "Optional; defaults to the account name or account id returned by upstream", "可选,留空则用凭证里的账号名": "Optional; defaults to the account name in the credential", "可选,留空则用文件里的昵称": "Optional; leave empty to use the nickname from the file", "可选,留空则用登录名或 uid": "Optional; defaults to the login name or uid", "可选,留空则用脱敏手机号": "Optional; defaults to the masked phone number", "可选,留空则用脱敏手机号或 userId": "Optional; defaults to the masked phone number or userId", "可选,留空则用账号 uk": "Optional; defaults to the account uk", "可选,留空则用账号昵称": "Optional; defaults to the account nickname", "可选,留空则用账号昵称或 userId": "Optional; leave blank to use the account nickname or userId", "可选,留空则用邮箱或令牌尾号": "Optional; defaults to the email or token suffix", "可选,留空用「OfficeAce 果办」": "Optional; defaults to “OfficeAce”", "可选,留空自动生成": "Optional; generated automatically if blank", "可选,留空自动用昵称": "Optional; defaults to the nickname", "可选,给这个访客账号起个备注名": "Optional; a note name for this guest account", "可选,续期时带上": "Optional; sent when renewing", "可选,讯飞侧 userid": "Optional; the userid on the iFlytek side", "可选:发起对话必需,留空则由网关从该账号已有任务里自动发现,发现不到时之后手动补": "Optional; required to start a conversation. If blank, the gateway discovers it automatically from this account's existing tasks; if it cannot find one, fill it in manually later.", "可选:账号邮箱,用于展示与身份识别(换新令牌也能认回同一账号)": "Optional; the account email, used for display and to recognize the identity (the same account is recognized even after switching to a new token)", "可选;UUID 形态,与凭据同生共死": "Optional; UUID form, lives and dies with the credential", "可选;填了才能到期自动续期": "Optional; required for automatic renewal on expiry", "可选;用于去重与展示名(留空时网关会问一次上游)": "Optional; used for deduplication and the display name (when blank, the gateway asks upstream once)", "可选;用于生成账号 id 与展示名": "Optional; used to generate the account id and display name", "可选;纯数字串(上游只收 8–24 位数字)": "Optional; digits only (upstream accepts only 8–24 digits)", "可领取": "Claimable", "同一家可以混着放:有 Key 的账号与无鉴权账号各按各的规则走;无需鉴权的账号也能并存多条(各自可配不同的出网代理)": "Keyed and no-auth accounts can coexist in one provider, each routed by its own rules; multiple no-auth accounts are allowed too (each with its own egress proxy)", "同地址换 anthropic 协议即走它的 Claude 兼容端点。转发必须填 OpenCode Go 的 API Key(订阅制;获取模型清单不需要 Key,但发请求上游会回 401「Missing API key」)": "Switch the protocol to anthropic on the same address to use its Claude-compatible endpoint. Forwarding requires an OpenCode Go API Key (subscription-based; fetching the model catalog needs no Key, but requests get a 401 \"Missing API key\" from upstream)", "响应为空": "Empty response", "商汤日日新的 OpenAI 兼容端点;余额查询走控制台账号密码(见下方「余额查询」一段)": "SenseNova's OpenAI-compatible endpoint; balance query uses the console account and password (see \"Balance query\" below)", "国内版": "China edition", "国内版与**国际版是两套独立的账号与套餐**,凭证与领取的套餐都不通用。": "The China edition and **the International edition are two separate sets of accounts and plans**; credentials and claimed plans do not carry over between them.", "国内版登录页没有 Google / GitHub 入口(它用微信 / 手机号 / 邮箱登录)": "The China edition's sign-in page has no Google / GitHub options (it uses WeChat / phone / email sign-in)", "国内版的登录站点是 www.accio-ai.com,与国际版不是同一站。": "The China edition's sign-in site is www.accio-ai.com, a different site from the International edition's.", "国内版(WorkBuddy)": "China edition (WorkBuddy)", "国内站为 https://api.siliconflow.cn/v1": "China site: https://api.siliconflow.cn/v1", "国内站(minimaxi.com);OpenAI 兼容地址为 https://api.minimaxi.com/v1": "China site (minimaxi.com); the OpenAI-compatible address is https://api.minimaxi.com/v1", "国际版": "International edition", "国际版 z.ai 的 Coding 套餐;OpenAI 兼容地址为 https://api.z.ai/api/coding/paas/v4": "The International edition z.ai Coding plan; the OpenAI-compatible address is https://api.z.ai/api/coding/paas/v4", "国际版与国内版是**两套独立的账号**(同一账号体系的两个站点),凭证不通用。": "The International and China editions are **two separate sets of accounts** (two sites of the same account system); credentials do not carry over.", "国际版与国内版账号体系独立,请填国际版的凭证。未填 refreshToken 无法自动续期。": "The International and China editions have separate account systems; enter the International edition's credentials. Without a refreshToken, automatic renewal is not possible.", "国际版登录页默认只显示邮箱登录,勾选后恢复 Google / GitHub / X 入口": "The International edition's sign-in page shows only email sign-in by default; checking this restores the Google / GitHub / X options", "国际版的推理站点是 api.z.ai,与国内版不是同一站;套餐也各自独立。": "The International edition's inference site is api.z.ai, a different site from the China edition's; plans are separate as well.", "国际版(WorkBuddy AI)": "International edition (WorkBuddy AI)", "国际站 Coding 套餐;OpenAI 兼容地址为 https://api.minimax.io/v1": "International site Coding plan; the OpenAI-compatible address is https://api.minimax.io/v1", "在 cc-switch 里找到": "Found", "在内嵌窗口里完成官方登录,成功后自动加入账号列表。": "Complete the official sign-in in the embedded window; the account is added to the list automatically on success.", "在{label}的 Qoder 账号设置 → Integrations 生成 PAT(别填 Google / GitHub 的令牌)。两个地区的账号与凭证不通用。": "Generate a PAT in the Qoder account settings → Integrations for {label} (do not use a Google / GitHub token). Accounts and credentials do not carry over between the two regions.", "在打开的官方授权页里用微信扫码登录(页面会直接显示二维码)。扫码成功后自动加入账号列表。": "Scan the WeChat QR code on the official authorization page that opens (the QR code appears right away). The account is added to the list automatically after a successful scan.", "在打开的窗口里用百度账号登录 KukuAI 主站(手机验证码 / 扫码均可),登录成功后自动加入账号列表。网关会向百度换发 KukuAI 业务会话令牌(依赖本机已安装库库AI 客户端)。": "In the window that opens, sign in to the KukuAI main site with your Baidu account (SMS code or QR scan both work); the account is added to the list automatically on success. The gateway exchanges it with Baidu for a KukuAI business session token (requires the KukuAI client installed on this machine).", "在打开的窗口里登录 Google 账号(Antigravity 的授权页),授权完成后自动加入账号列表。": "Sign in with your Google account in the window that opens (Antigravity's authorization page); the account is added to the list automatically once authorization completes.", "在浏览器中打开登录页": "Open the sign-in page in your browser", "地区": "Region", "填写凭证": "Enter credentials", "填写凭证添加": "Enter credentials to add", "备注名": "Label", "套餐": "Plan", "如:智谱 GLM": "e.g. Zhipu GLM", "完成登录后自动加入账号列表,昵称取自上游。": "Added to the account list automatically after sign-in; the nickname comes from upstream.", "官方客户端凭证目录:Windows 是 C:\\Users\\<你的用户名>\\AppData\\Local\\CodeBuddyExtension\\Data\\Public\\auth,macOS 是 ~/Library/Application Support/CodeBuddyExtension/Data/Public/auth": "Official client credential directory: Windows — C:\\Users\\\\AppData\\Local\\CodeBuddyExtension\\Data\\Public\\auth; macOS — ~/Library/Application Support/CodeBuddyExtension/Data/Public/auth", "官方已确认到账": "Officially confirmed as credited", "导入": "Import", "导入中…": "Importing…", "导入凭证文件": "Import credential file", "导入失败": "Import failed", "导入失败:{reason}": "Import failed: {reason}", "导入所选": "Import selected", "导入所选({n})": "Import selected ({n})", "导入桌面端登录态": "Import desktop login state", "将打开内嵌窗口;授权完成后自动加入账号列表。关掉窗口即取消等待。授权页最后可能提示无法打开 zcode:// 链接,这是正常的 —— 结果已由服务端记下": "The embedded window will open; the account is added to the list automatically once authorization completes. Closing the window cancels the wait. The authorization page may end with a message that it cannot open the zcode:// link — that is normal; the result has already been recorded server-side", "将打开内嵌窗口;授权完成后自动加入账号列表。远程面板可粘贴回调地址。关掉窗口即取消等待。链接 5 分钟内有效,超时或未点就会作废(可重新发起)": "The embedded window will open; the account is added to the list automatically once authorization completes. On a remote panel you can paste the callback URL. Closing the window cancels the wait. The link is valid for 5 minutes; if it times out or is not clicked, it is voided (you can start again)", "将打开内嵌窗口;登录完成后自动加入账号列表。关掉窗口即取消等待": "The embedded window will open; the account is added to the list automatically after sign-in. Closing the window cancels the wait", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的 Trae 账号);同机完成后自动加入,Docker / 远程面板按提示粘贴地址栏回调地址。": "The authorization page will open in your system default browser (reusing the Trae account already signed in there); on the same machine the account is added automatically when done. For Docker / remote panels, paste the callback URL from the address bar as prompted.", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的 ZCode 账号);授权完成后自动加入账号列表。页面最后可能提示无法打开 zcode:// 链接,属正常现象": "The authorization page will open in your system default browser (reusing the ZCode account already signed in there); the account is added to the list automatically once authorization completes. A final message that the zcode:// link cannot be opened is normal", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的华为云账号);授权码由网关轮询云端取回,与浏览器跑在哪台机器无关,完成后自动加入账号列表": "The authorization page will open in your system default browser (reusing the Huawei Cloud account already signed in there); the gateway polls the cloud for the authorization code, so it does not matter which machine the browser runs on. The account is added to the list automatically once done", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的华为云账号);浏览器与网关不在同一台机器时,按上方说明把最终回调地址粘贴回面板": "The authorization page will open in your system default browser (reusing the Huawei Cloud account already signed in there); when the browser and the gateway are not on the same machine, paste the final callback URL back into the panel as described above", "将用系统默认浏览器打开登录页(会复用浏览器里已登录的 Accio 账号);完成登录后自动加入账号列表,关掉弹窗即取消等待": "The sign-in page will open in your system default browser (reusing the Accio account already signed in there); the account is added to the list automatically after sign-in, and closing the popup cancels the wait", "小米 MiMo Token Plan 套餐(新加坡站)": "Xiaomi MiMo Token Plan (Singapore site)", "已到账": "Credited", "已取消登录等待": "Pending sign-in canceled", "已取消领取": "Claim canceled", "已取消验证码": "Verification canceled", "已填写手机号,正在发送验证码…": "Phone number entered; sending the code…", "已声明无需鉴权:账号会被正常选路,出网时不带任何鉴权头": "Marked as needing no authentication: the account is routed normally, and no auth headers are sent outbound", "已导入 {ok} 个,失败 {fail} 个(失败项已标注在列表里)": "Imported {ok}, failed {fail} (failed items are marked in the list)", "已建过 · {n} 个账号,点击继续添加": "Already created · {n} accounts, click to add more", "已建过,点击继续添加账号": "Already created, click to add another account", "已打开官方登录页,请在窗口中完成登录…": "Official sign-in page opened; complete sign-in in the window…", "已点发送,等待短信…": "Sent; waiting for the SMS…", "已用系统默认浏览器打开登录页,请在浏览器中完成登录…": "Sign-in page opened in your system default browser; complete sign-in in the browser…", "已领取,等官方确认": "Claimed, awaiting official confirmation", "当前壳版本不支持 AutoClaw 网页登录,请更新应用": "This app version does not support AutoClaw web login; update the app", "当前没有可领取的套餐(活动尚未开始)": "No plans are available to claim right now (the event has not started yet)", "当前环境不支持领取(桥接方法缺失)": "Claiming is not supported in this environment (bridge method missing)", "必填,CatPaw 账号标识": "Required; CatPaw account identifier", "恢复 Google / GitHub 入口": "Restore Google / GitHub options", "手机号": "Phone number", "手机验证码登录": "SMS code login", "打开 Trae SOLO 的官方授权页(trae.cn)并用你的 Trae 账号登录:授权完成后官方页面会跳回本机的一个临时端口;同机部署自动接收,Docker / 远程面板请按提示复制地址栏回调地址。": "Open the official authorization page for Trae SOLO (trae.cn) and sign in with your Trae account: once authorized, the official page redirects back to a temporary port on this machine; a same-machine deployment receives it automatically, while Docker / remote panels should copy the callback URL from the address bar as prompted.", "打开 Accio {label}的官方登录页({site})并用你的 Accio 账号登录:登录成功后官方页面会跳回本机;同机自动完成,Docker / 远程面板按提示粘贴回调地址即可(授权码只在本机传给网关,界面不显示明文 token)。": "Open the official sign-in page for Accio {label} ({site}) and sign in with your Accio account: on success the official page redirects back to this machine; a same-machine setup completes automatically, while Docker / remote panels just paste the callback URL as prompted (the authorization code is passed to the gateway only on this machine, and no plaintext token is shown in the UI).", "打开 Accio {label}登录页": "Open the Accio {label} sign-in page", "打开 Antigravity 网页登录": "Open Antigravity web login", "打开 CatPaw 网页登录": "Open CatPaw web login", "打开 Cline 授权页": "Open Cline authorization page", "打开 CodeArts 授权页": "Open CodeArts authorization page", "打开 Qoder 网页登录": "Open Qoder web login", "打开 Trae 授权页": "Open Trae authorization page", "打开 ZCode {label}的官方授权页并用你的账号登录。授权结果由 ZCode 服务端记录,网关在后台自动取回凭证并加入账号列表。": "Open the official authorization page for ZCode {label} and sign in with your account. The authorization result is recorded by the ZCode server; the gateway fetches the credential in the background and adds the account to the list.", "打开 ZCode {label}授权页": "Open the ZCode {label} authorization page", "打开华为云 CodeArts 的官方授权页登录:登录完成后官方页面会把浏览器带回网关自己的 /oauth/callback,网关用一次性授权码换取临时凭据并加入账号列表。
网关跑在另一台机器上时,网页端会提示把地址栏中的最终回调地址直接粘贴回面板。": "Open the official Huawei Cloud CodeArts authorization page to sign in: once done, the official page brings the browser back to the gateway's own /oauth/callback, and the gateway exchanges the one-time authorization code for temporary credentials and adds the account to the list.
When the gateway runs on another machine, the web UI prompts you to paste the final callback URL from the address bar back into the panel.", "打开华为云授权页登录:登录完成后网关会自动轮询云端取回授权码并加入账号列表(不需要装 OfficeAce 桌面端,也无需手工回填回调地址)。": "Open the Huawei Cloud authorization page and sign in: once finished, the gateway automatically polls the cloud for the authorization code and adds the account to the list (no OfficeAce desktop app required, and no need to paste a callback URL back manually).", "打开官方授权页完成设备码授权,登录的是{label}({site})的账号。": "Open the official authorization page and complete the device-code authorization; you will be signing in to a {label} ({site}) account.", "打开授权页": "Open the authorization page", "打开授权页完成确认,账号自动加入 {label}{note}": "Open the authorization page and confirm; the account is added to {label} automatically{note}", "打开方式": "Open with", "打开网页登录": "Open web login", "探测失败:{message}": "Probe failed: {message}", "接入一个兼容上游": "Connect a compatible upstream", "提交中…": "Submitting…", "搜索提供商": "Search providers", "搜索提供商…": "Search providers…", "整份粘贴官方插件 / CLIProxyAPI 落盘的凭据 JSON(形如 {\"codearts_provider_credential\":{…}},铺平的也行)。
必填:access_key_id、secret_access_key、security_token。要能自动续期,必须连 refresh_token 与 oauth_context 一起粘 —— 临时凭据约一小时到期,缺这半块就续不回来,只能重新登录。": "Paste the whole credential JSON written to disk by the official plugin / CLIProxyAPI (like {\"codearts_provider_credential\":{…}}; a flattened form also works).
Required: access_key_id, secret_access_key, security_token.For automatic renewal you must paste refresh_token and oauth_context as well — temporary credentials expire in about an hour, and without that half they cannot be renewed; you would have to sign in again.", "文件是{edition}凭证,已按该版本导入": "The file contains {edition} credentials and has been imported as that edition", "新建自定义提供商": "New custom provider", "方案:{label}": "Scheme: {label}", "明文 JWT 或 auth.json 里的 enc: 加密值(自动解密)": "Plaintext JWT, or the enc: encrypted value in auth.json (decrypted automatically)", "明文 JWT(国际版账号的 access token)": "Plaintext JWT (the access token of an International edition account)", "智谱 bigmodel.cn 的 Coding 套餐,Key 在 open.bigmodel.cn/usercenter/apikeys": "Zhipu's bigmodel.cn Coding plan; get the Key at open.bigmodel.cn/usercenter/apikeys", "未知错误": "Unknown error", "未能获取授权地址,请重试": "Could not get the authorization URL; try again", "未能读取 cc-switch 数据": "Could not read cc-switch data", "未领取成功": "Claim unsuccessful", "本地 Ollama、OpenCode Zen 免费档这类上游要勾上,否则账号不可用": "Check this for upstreams like local Ollama or the OpenCode Zen free tier; otherwise the account cannot be used", "本家有两个**互不替代**的凭证,按你要用的功能填,至少填一个:编码套餐 API Key 用于转发推理(打 {site})与查询窗口限额(每 N 小时 / 每周的剩余比例);jwt 用于领取套餐与查询余额(打 zcode.z.ai 的 billing 网关,官方叫 Coding Plan JWT,是一串三段点分的字符串)。余额两把都能查、但读到的东西不同:jwt 读到余额桶与套餐到期,API Key 读到窗口限额;而领取只认 jwt、转发只认 API Key。请填写 {label}账号的凭证 —— {plan}(最容易拿到的办法:直接用上方的「网页登录」—— 它会替你把这个 API Key 换好,两个凭证一起拿到。)": "This provider has two credentials that **do not replace each other**; fill in the one(s) for the features you need, at least one: the Coding Plan API Key is used for forwarding inference (hits {site}) and for querying the window limits (the remaining percentage of each N-hour / weekly window); the jwt is used for claiming plans and querying balance (hits the billing gateway at zcode.z.ai; officially called a Coding Plan JWT, a three-segment dot-separated string). Either one can query balance, but they read different things: the jwt reads the balance buckets and the plan expiry, while the API Key reads the window limits; and claiming only accepts the jwt, forwarding only accepts the API Key. Please enter the credentials for the {label} account — {plan} (the easiest way: just use \"Web login\" above — it exchanges this API Key for you and gets both credentials at once.)", "本机 Ollama 的 OpenAI 兼容端点,无需 API Key(默认已勾上「该上游无需鉴权」,鉴权头一个都不发)": "The local Ollama OpenAI-compatible endpoint; no API Key needed (\"This upstream needs no authentication\" is checked by default, and no auth headers are sent at all)", "本次未确认到账": "Not confirmed as credited this time", "条可导入": "are importable", "条配置,其中": "configs in cc-switch, of which", "桌面运行时不可用(Tauri 未初始化)": "Desktop runtime unavailable (Tauri not initialized)", "模型网关基址": "Model gateway base URL", "正在打开百度登录页…": "Opening the Baidu sign-in page…", "正在扫描本机 cc-switch…": "Scanning cc-switch on this machine…", "正在换发访客凭证…": "Requesting a guest credential…", "正在添加…": "Adding…", "正在等待{name}登录完成;完成或取消后才能发起新的登录": "Waiting for {name} sign-in to finish; you can start a new sign-in only after it completes or is canceled", "每周": "Weekly", "每日": "Daily", "每月": "Monthly", "没有则无法自动续期": "Without it, automatic renewal is not possible", "没有匹配「{keyword}」的提供商": "No providers match \"{keyword}\"", "添加 {name} 账号": "Add {name} account", "添加中…": "Adding…", "添加到 ": "Add to ", "添加失败:{reason}": "Add failed: {reason}", "添加小浣熊账号": "Add Raccoon account", "添加方式": "Add method", "添加访客账号": "Add a guest account", "添加账号": "Add account", "火山引擎 Coding 套餐;通用推理接入点为 https://ark.cn-beijing.volces.com/api/v3": "Volcano Engine Coding plan; the general inference endpoint is https://ark.cn-beijing.volces.com/api/v3", "点击添加账号": "Click to add an account", "点开即预填,填 Key 接入": "Opens prefilled; enter your Key to connect", "点按钮后先过一次滑块验证(官方风控),随后打开登录页,登录完成即自动添加账号。
这是国际版官方唯一的登录方式;已在客户端登录过的,用「导入桌面端登录态」更快。": "After clicking the button, first pass a slider verification (the vendor's risk control), then the sign-in page opens and the account is added automatically once you sign in.
This is the only official sign-in method for the International edition; if you are already signed in to the client, \"Import desktop login state\" is faster.", "用 AutoClaw 账号绑定的手机号登录:点击「获取验证码」,收到短信后填入下方并登录。验证码由本机直接提交给官方接口,界面不显示 token。": "Sign in with the phone number bound to your AutoClaw account: click \"Get code\", then enter the SMS code below and sign in. The code is submitted from this machine directly to the official API; no token is shown in the UI.", "用 CatPaw 账号完成登录(美团 passport),成功后自动加入账号列表。": "Sign in with your CatPaw account (Meituan Passport); the account is added to the list automatically on success.", "用 Loomy 账号绑定的手机号登录:点「获取验证码」后填入即可。这是本家最省事的入口。": "Sign in with the phone number bound to your Loomy account: click \"Get code\" and enter it. This is the easiest way in for this provider.", "用于转发;形如 apiKey.secret 两段点分(不填则这个账号不能转发)": "Used for forwarding; two dot-separated segments like apiKey.secret (if left blank, this account cannot forward)", "用于领取套餐与查询余额;不填则这个账号不能领取与查余额": "Used for claiming plans and querying balance; if left blank, this account cannot claim or check balance", "用户 ID": "User ID", "用绑定的手机号登录:点「获取验证码」后填入即可。这是国内版官方唯一的登录方式。": "Sign in with your bound phone number: click \"Get code\" and enter it. This is the only official sign-in method for the China edition.", "留空则用提供商名称": "Leave blank to use the provider name", "登录 / 添加 {name} 账号": "Sign in / add {name} account", "登录 session(一长串)": "Login session (a long string)", "登录中…": "Signing in…", "登录失败:{message}": "Sign-in failed: {message}", "登录已结束": "Sign-in has ended", "登录并添加": "Sign in and add", "登录态文件路径:~/.box-agent/config/auth.json(Windows:C:\\Users\\<你的用户名>\\.box-agent\\config\\auth.json)": "Login-state file path: ~/.box-agent/config/auth.json (Windows: C:\\Users\\\\.box-agent\\config\\auth.json)", "确定删除自定义提供商「{name}」?将同时删除该提供商下 {count} 个账号,删除后无法恢复。": "Delete custom provider \"{name}\"? This will also delete {count} accounts under it; deletion cannot be undone.", "等待 Accio {label}登录完成…": "Waiting for Accio {label} sign-in…", "等待 CatPaw 登录完成…": "Waiting for CatPaw sign-in…", "等待 Cline 授权确认…": "Waiting for Cline authorization confirmation…", "等待 CodeArts 登录完成…": "Waiting for CodeArts sign-in…", "等待 Google 授权完成…": "Waiting for Google authorization…", "等待 KukuAI 登录完成…": "Waiting for KukuAI sign-in…", "等待 OfficeAce 登录完成…": "Waiting for OfficeAce sign-in…", "等待 OrcaTerm 登录完成…": "Waiting for OrcaTerm sign-in…", "等待 Qoder 授权完成…": "Waiting for Qoder authorization…", "等待 Trae 授权完成…": "Waiting for Trae authorization…", "等待 ZCode {label}授权完成…": "Waiting for ZCode {label} authorization…", "等待小浣熊登录完成…": "Waiting for Raccoon sign-in…", "等待登录完成…": "Waiting for sign-in…", "等待网页登录…": "Waiting for web login…", "粘贴 API Key": "Paste API Key", "粘贴 Accio 的 accessToken": "Paste the Accio accessToken", "粘贴 Antigravity 的 Google refresh token(以 1// 开头;直接粘贴含 refresh_token= 的整行也行)。
这是网页登录之外的手工入口(例如从已登录的官方 IDE 里导出)。refresh token 不会过期,access token 到期由网关自动续期;令牌丢了只能重新走 Google 授权,请妥善保存。": "Paste Antigravity's Google refresh token (starts with 1//; pasting the whole line containing refresh_token= also works).
This is a manual entry besides web login (for example, exported from the official IDE you are already signed in to). The refresh token does not expire, and the gateway renews the access token automatically when it expires; if the token is lost, you can only go through Google authorization again, so keep it safe.", "粘贴 Command Code 的 API Key(user_ 开头;从官方 CLI 的 ~/.commandcode/auth.json 或网页 studio 获取)。整行 / 带引号 / 带 Bearer 前缀地粘都行,网关会自己剥成裸 key。key 不过期、也没有续期接口,失效后重新获取即可;添加时网关会做一次轻量探活,失败不影响添加。": "Paste the Command Code API Key (starts with user_; get it from the official CLI's ~/.commandcode/auth.json or the web studio). Pasting the whole line / with quotes / with the Bearer prefix all work; the gateway strips it down to the bare key itself. The key does not expire and there is no renewal API, so if it stops working just get a new one. When adding, the gateway runs a lightweight liveness check; a failure does not affect adding.", "粘贴 Cookie": "Paste Cookie", "粘贴 Google refresh token": "Paste Google refresh token", "粘贴 OrcaTerm 的 OAuth accessToken(JWT,三段点分;从桌面客户端 data.bin 或 Web 版 Cookie ot_session 获取)。直接粘贴含 Bearer / ot_session= 的整行也行,网关会自己剥成裸 token。添加后由网关自动续期(上游有续期接口),无需跟随 2 小时时效手动更换。": "Paste OrcaTerm's OAuth accessToken (a JWT with three dot-separated parts; available from the desktop client's data.bin or the web version's ot_session cookie). Pasting a whole line containing Bearer / ot_session= is fine too — the gateway strips it down to the bare token. After adding, the gateway renews it automatically (the upstream has a renewal API), so you do not need to follow the 2-hour expiry by hand.", "粘贴 Qoder 个人访问令牌(pt-…)": "Paste the Qoder personal access token (pt-…)", "粘贴 accessToken": "Paste accessToken", "粘贴 access_token(一长串 JWT)": "Paste access_token (a long JWT)", "粘贴 session cookie": "Paste session cookie", "粘贴 token / refreshToken": "Paste token / refreshToken", "粘贴 workos:… 开头的令牌(不带前缀也会自动补上)": "Paste a token starting with workos:… (the prefix is added automatically if missing)", "粘贴智谱清言的访问令牌(JWT,三段点分)。获取方式:浏览器打开 chatglm.cn 并登录后,在开发者工具的 Application → Cookies 里复制 chatglm_token 的值(也可以直接粘 chatglm_token=…; 整行)。粘贴后会先向上游校验一次,校验通过才落账号;登录账号的积分、签到能力都能用,之后由网关自动续期(上游有续期接口)。": "Paste a Zhipu Qingyan access token (a JWT with three dot-separated parts). How to get it: open chatglm.cn in a browser, sign in, then copy the value of the chatglm_token cookie from Application → Cookies in the developer tools (pasting the whole chatglm_token=…; line works too). It is verified against the upstream once after pasting, and the account is only saved if that passes; signed-in accounts get points and sign-in capability, and the gateway renews it automatically afterwards (the upstream has a renewal API).", "粘贴登录凭据": "Paste login credentials", "粘贴的是登录 session(同时是模型网关的 token)。Loomy 没有续期接口,session 有效期约 14 天,过期后重新登录即可。": "What you paste is the login session (which is also the model gateway token). Loomy has no renewal API; the session is valid for about 14 days, so just sign in again after it expires.", "粘贴网关凭据": "Paste gateway credentials", "粘贴网页登录态 cookie monkeycode_ai_session 的值(在浏览器里复制整段 Cookie 直接粘贴也行,网关会自己剥出值)。
{siteNote}
MonkeyCode 没有续期接口:session 有效期约 30 天(硬限制),过期后重新登录网页、再粘贴一次即可。": "Paste the value of the web session cookie monkeycode_ai_session (copying the whole Cookie in the browser and pasting it directly also works; the gateway extracts the value itself).
{siteNote}
MonkeyCode has no renewal API: the session is valid for about 30 days (a hard limit); once it expires, sign in to the web page again and paste it one more time.", "粘贴访问令牌": "Paste an access token", "系统浏览器": "System browser", "系统浏览器可复用已有登录态(国际版推荐);内嵌窗口更干净。": "The system browser can reuse an existing login state (recommended for the International edition); the embedded window is cleaner.", "系统浏览器打开(复用已登录的 Cline 账号);完成后自动加入列表": "Opens in the system browser (reuses the signed-in Cline account); added to the list when done", "系统浏览器打开(复用已登录的 Google 账号);完成后自动加入列表": "Opens in the system browser (reuses the Google account already signed in); added to the list when done", "系统浏览器打开(复用已登录的 Zai / Google 账号);完成后自动加入列表": "Opens in the system browser (reuses the signed-in Zai / Google account); added to the list when done", "系统浏览器打开(复用已登录的美团账号);完成后自动加入列表": "Opens in the system browser (reuses the signed-in Meituan account); added to the list when done", "系统浏览器打开(复用已登录账号);完成后自动加入列表": "Opens in the system browser (reuses a signed-in account); added to the list when done", "系统默认浏览器": "System default browser", "编码套餐 API Key": "Coding Plan API Key", "网关 Secret": "Gateway secret", "网页登录": "Web login", "网页登录的打开方式": "How to open web login", "网页登录(Zai / Google)": "Web login (Zai / Google)", "自定义": "Custom", "自建聚合面板:填你自己的站点地址。余额查询用该账号的 API Key 打 {base}/v1/usage,不需要额外配置": "Self-hosted aggregation panel: fill in your own site address. Balance query calls {base}/v1/usage with this account's API key; no extra setup", "自建聚合面板:填你自己的站点地址;余额查询要另填 NewAPI 的个人访问令牌(见下方「余额查询」一段)": "Self-hosted aggregation panel: fill in your own site address; balance query additionally needs a NewAPI personal access token (see \"Balance query\" below)", "获取风控配置失败,将直接尝试领取:{message}": "Failed to get the risk-control config; trying to claim directly: {message}", "获取验证码": "Get code", "访客模式": "Guest mode", "访客模式(免登录)": "Guest mode (no sign-in)", "该上游无需鉴权(不发送鉴权头)": "This upstream needs no authentication (no auth headers are sent)", "该提供商": "This provider", "该提供商账号添加功能即将上线": "Account adding for this provider is coming soon", "该自定义提供商已不存在(可能已被删除),请刷新后重试": "This custom provider no longer exists (it may have been deleted); refresh and try again", "请先选择一个自定义提供商": "Select a custom provider first", "请在弹出的滑块中完成验证(官方要求的风控步骤)": "Complete the verification in the slider popup (a risk-control step required by the vendor)", "请填写 11 位大陆手机号": "Enter an 11-digit mainland China phone number", "请填写 6 位数字验证码": "Enter the 6-digit code", "请填写 Base URL": "Enter the Base URL", "请填写 {label}": "Enter {label}", "请填写名称": "Enter a name", "请完成验证…": "Complete the verification…", "读取 %APPDATA%/AutoClaw/auth.json 并解密,仅 Windows": "Reads and decrypts %APPDATA%/AutoClaw/auth.json; Windows only", "读取 ~/.cline/data/settings/providers.json,需已在 Cline 客户端登录": "Reads ~/.cline/data/settings/providers.json; requires being signed in to the Cline client", "读取 ~/.meituan-catpaw/auth.json,需已在 CatPaw 客户端登录": "Reads ~/.meituan-catpaw/auth.json; requires being signed in to the CatPaw client", "读取本机 KukuAI 客户端登录态(%APPDATA%\\baidugenflowpro\\Network\\Cookies),需已在 KukuAI 客户端登录": "Reads the local KukuAI client login state (%APPDATA%\\baidugenflowpro\\Network\\Cookies); requires being signed in to the KukuAI client", "读取本机 OrcaTerm 客户端登录态(%APPDATA%\\com.orcaterm-desktop.app\\data.bin),需已在 OrcaTerm 客户端登录": "Read the local OrcaTerm client sign-in state (%APPDATA%\\com.orcaterm-desktop.app\\data.bin); the OrcaTerm client must be signed in", "读取本机智谱清言客户端登录态(%APPDATA%\\chatglm\\Network\\Cookies),需已在客户端登录": "Read the local Zhipu Qingyan client sign-in state (%APPDATA%\\chatglm\\Network\\Cookies); the client must be signed in", "读本机官方客户端(Tencent WorkBuddy / WorkBuddy AI)当前登录的账号:自动定位其凭证目录里最新的登录态文件(需已在本机官方客户端登录)。导入后由网关自动续期,无需跟随 2 小时时效手动换令牌。": "Reads the account currently logged in to the official client (Tencent WorkBuddy / WorkBuddy AI) on this machine: the newest session file in its credential directory is located automatically (the official client must be logged in on this machine). The gateway renews the token after import — no need to swap tokens manually with the 2-hour expiry.", "读本机客户端当前登录态(明文 Cookie,无需解密)。客户端运行时 Cookies 文件被独占占用,导入前请先关闭 KukuAI 客户端。": "Reads the local client's current login state (plaintext Cookie, no decryption needed). The Cookies file is exclusively locked while the client runs, so close the KukuAI client before importing.", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。": "Reads the local client's current login state live each time (deleting this record does not affect the client's login state).", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。客户端重新登录后点「刷新 Token」同步。": "Reads the local client's current login state live each time (deleting this record does not affect the client's login state). After signing in again in the client, click \"Refresh token\" to sync.", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。客户端重新登录后重新导入即可。": "Reads the local client's current login state live each time (deleting this record does not affect the client's login state). After signing in again in the client, just re-import.", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。用 Zai / Google 登录客户端的用户走这一条。": "Reads the local client's current login state live each time (deleting this record does not affect the client's login state). Users who sign in to the client with Zai / Google should use this one.", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。这一条归入 {label}。": "Reads the local client's current login state live each time (deleting this record does not affect the client's login state). This one is grouped under {label}.", "读本机客户端当前登录的 OAuth 令牌(明文 JSON,无需解密)。导入后由网关自动续期,无需跟随客户端的 2 小时时效手动换令牌。": "Reads the OAuth token the local client is currently signed in with (plain-text JSON, no decryption needed). After importing, the gateway renews it automatically — no need to follow the client's 2-hour expiry by hand.", "读本机客户端当前的登录态。客户端的 Cookies 是 DPAPI 加密的(Chromium os_crypt),因此仅 Windows 可用;客户端正在运行时可能读不到该文件,先退出客户端再试即可(也可改用「填写凭证」粘贴令牌)。": "Read the current sign-in state of the local client. The client's cookies are DPAPI-encrypted (Chromium os_crypt), so this is Windows-only; the file may be unreadable while the client is running — quit the client and retry (or use \"Fill in credentials\" to paste a token instead).", "账号信息": "Account info", "账号信息不完整,请刷新后重试": "Account info is incomplete; refresh and try again", "账号已添加,但请留意:{warning}": "Account added, but note: {warning}", "账号版本": "Account edition", "账号类型": "Account type", "账号:{name}
": "Account: {name}
", "走 Inference Providers 路由,Key 在 hf.co/settings/tokens 创建": "Routes through Inference Providers; create the Key at hf.co/settings/tokens", "还没有账号": "No accounts yet", "这一家当前不支持网页登录,请改用填写凭证": "This provider does not support web login right now; use Enter credentials instead", "这个账号当前没有可自动领的活动(只自动领每日登录赠送积分)": "This account has no campaigns that can be claimed automatically right now (only the daily login gift points are claimed automatically)", "这份额度走「活动套餐」通道:若转发时提示编码套餐已到期,": "This quota goes through the Start Plan channel: if forwarding reports that the Coding Plan has expired, ", "这里填国内站(monkeycode-ai.com)的账号:请粘贴国内站的 session。国际站(monkeycode-ai.net)是另一家 provider、另一套账号,两边的凭证不通用。": "This is for the China site (monkeycode-ai.com) account: paste the China site's session. The international site (monkeycode-ai.net) is another provider with its own account; credentials are not interchangeable between the two.", "这里填国际站(monkeycode-ai.net)的账号:请粘贴国际站的 session。国内站(monkeycode-ai.com)是另一家 provider、另一套账号,两边的凭证不通用。": "This is for the international site (monkeycode-ai.net) account: paste the international site's session. The China site (monkeycode-ai.com) is another provider with its own account; credentials are not interchangeable between the two.", "选择 CatPaw 客户端的登录态文件 auth.json(Windows:C:\\Users\\<你的用户名>\\.meituan-catpaw\\auth.json;macOS / Linux:~/.meituan-catpaw/auth.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端。": "Select the CatPaw client's login-state file auth.json (Windows: C:\\Users\\\\.meituan-catpaw\\auth.json; macOS / Linux: ~/.meituan-catpaw/auth.json). After import the credentials live on the gateway and can be forwarded independently — no longer dependent on this machine's client.", "选择 Cline 客户端的登录态文件 providers.json(Windows:C:\\Users\\<你的用户名>\\.cline\\data\\settings\\providers.json;macOS / Linux:~/.cline/data/settings/providers.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端;这一条归入 {label}。": "Select the Cline client's login-state file providers.json (Windows: C:\\Users\\\\.cline\\data\\settings\\providers.json; macOS / Linux: ~/.cline/data/settings/providers.json). After import the credentials live on the gateway and can be forwarded independently — no longer dependent on this machine's client; this record goes into {label}.", "选择 KukuAI 客户端的 Cookies 文件(%APPDATA%\\baidugenflowpro\\Network\\Cookies):它是**二进制** SQLite 数据库(无扩展名,不是 JSON)。导入时读的是你选中文件的副本、不和运行中的客户端抢占用,因此**无需先关闭客户端**。导入后凭证直接落在网关、可独立转发。": "Select the KukuAI client's Cookies file (%APPDATA%\\baidugenflowpro\\Network\\Cookies): it is a **binary** SQLite database (no extension, not JSON). The import reads a copy of the file you selected and does not compete with the running client for the lock, so **you do not need to close the client first**. After import the credentials live on the gateway and can be forwarded independently.", "选择凭证文件导入": "Import from credential file", "选择官方客户端的登录态凭证文件(workbuddy-desktop.info / workbuddy-desktop-ai.info)或 wb2api 导出的账号 JSON(嵌套 / 扁平形均可)。": "Select the official client's session credential file (workbuddy-desktop.info / workbuddy-desktop-ai.info) or an account JSON exported by wb2api (nested or flat).", "选择小浣熊客户端的登录态文件 auth.json(Windows:C:\\Users\\<你的用户名>\\.box-agent\\config\\auth.json;macOS / Linux:~/.box-agent/config/auth.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端。": "Select the Raccoon client's login-state file auth.json (Windows: C:\\Users\\\\.box-agent\\config\\auth.json; macOS / Linux: ~/.box-agent/config/auth.json). After import the credentials live on the gateway and can be forwarded independently — no longer dependent on this machine's client.", "选择提供商": "Select provider", "选择的文件不是合法 JSON": "The selected file is not valid JSON", "选择要添加账号的提供商": "Select the provider to add an account for", "重新扫描": "Rescan", "鉴权": "Authentication", "阿里云 Token Plan 套餐(国际站)": "Alibaba Cloud Token Plan (International site)", "阿里云百炼 Coding 套餐(国内站)": "Alibaba Cloud Model Studio Coding plan (China site)", "阿里云百炼 Coding 套餐(国际站)": "Alibaba Cloud Model Studio Coding plan (International site)", "阿里云百炼模型服务(国际站,OpenAI 兼容模式)": "Alibaba Cloud Model Studio model service (International site, OpenAI-compatible mode)", "需要图形验证码:登录窗口已弹出,请填写后继续": "Captcha required: the sign-in window has opened; fill it in to continue", "预置 API": "Preset API", "领取 CodeArts 每日福利": "Claim CodeArts daily welfare", "领取失败:{message}": "Claim failed: {message}", "领取并让官方确认": "Claim and await confirmation", "风控验证配置不完整,请稍后重试": "Risk-control verification config is incomplete; try again later", "验证码": "Verification code", "验证码已发送。收到后填入下方并点「登录并添加」": "Code sent. Enter it below and click \"Sign in and add\"", "验证码已发送,请查看手机短信": "Code sent; check your SMS", "验证码已发送,请查看手机短信。填入下方并点「登录并添加」即完成登录": "Code sent; check your SMS. Enter it below and click \"Sign in and add\" to finish signing in", "验证码已发送,请查看短信": "Code sent; check your messages", "验证码校验失败,请重试": "Code verification failed; try again", "验证码校验超时,请重试": "Code verification timed out; try again", "验证码组件不可用,请重试": "Verification component unavailable; try again", "验证码组件初始化超时,请重试": "Verification component initialization timed out; try again", "验证码组件加载失败,请检查网络后重试": "Verification component failed to load; check your network and try again", "验证码组件加载异常,请重试": "Verification component encountered a loading error; try again", "验证码组件加载超时,请检查网络后重试": "Verification component timed out while loading; check your network and try again", "验证码组件未加载,请重启应用后重试": "Verification component not loaded; restart the app and try again", "(免费额度池,模型名带 cline-free/ 前缀)。": " (free quota pool; model names carry the cline-free/ prefix).", "(其中 {n} 把恢复为不限制)": " ({n} of which are now unrestricted)", "(必填)": " (Required)", "(有效期 {window})": "(valid {window})", "(订阅池,模型名带 cline-pass/ 前缀,需要账号有对应订阅)。": " (subscription pool; model names carry the cline-pass/ prefix and the account needs the matching subscription).", ",下一次最快 {minutes} 分钟后": ", earliest next attempt in {minutes} min", ",并从 {n} 把 Key 的可用提供商里移除": ", and removed it from the allowed providers of {n} keys" });
+window.wbI18nDict = window.wbI18nDict || {}; Object.assign(window.wbI18nDict, { " · 模型 {head}{rest}": " · Models: {head}{rest}", " 等 {n} 个": " ({n} total)", "1// 开头的 Google refresh token(也可直接粘贴 refresh_token=… 整行)": "Google refresh token starting with 1// (you can also paste the whole refresh_token=… line)", "11 位大陆手机号": "11-digit mainland China mobile number", "1~64 个字符,账号列表里按它分组显示": "1-64 characters; accounts are grouped by it in the account list", "6 位数字": "6 digits", "没有可自动领的活动": "No campaigns can be claimed automatically", "领到的是套餐赠送积分,不会增加福利模型的 token 池;": "
What you receive is plan gift points, which do not add to the welfare model token pool; ", "Anthropic 兼容端点在 https://api.deepseek.com/anthropic(协议换 anthropic 时填它)": "The Anthropic-compatible endpoint is https://api.deepseek.com/anthropic (fill it in when you switch the protocol to anthropic)", "Anthropic 协议填根地址,不要带 /v1": "For the Anthropic protocol, use the root URL without /v1", "Antigravity": "Antigravity", "AutoClaw 国内版": "AutoClaw China edition", "AutoClaw 国际版": "AutoClaw International edition", "BDUSS 必填;请粘贴**完整 Cookie**(Cookie 编辑器一键导出即可)—— 其中 **PTOKEN 必须保留**,网关要用它向百度换发 KukuAI 业务会话令牌,缺了它模型刷新会报「未登录」。支持整段 Cookie 头、Cookie 编辑器导出的 JSON 数组,或 {BDUSS, STOKEN} 对象。KukuAI 没有刷新机制,登录态过期后重新粘贴即可。": "BDUSS is required; paste the **full Cookie** (a Cookie editor can export it in one click) — the **PTOKEN must be kept**, as the gateway uses it to exchange for a KukuAI business session token from Baidu; without it, model refresh reports \"Not signed in\". A full Cookie header, a JSON array exported by a Cookie editor, or a {BDUSS, STOKEN} object are all supported. KukuAI has no refresh mechanism, so once the login state expires, just paste it again.", "BDUSS=…; STOKEN=…(或 Cookie 编辑器导出的 JSON)": "BDUSS=…; STOKEN=… (or the JSON exported by a Cookie editor)", "CatPaw 的 X-Passport-Token(登录态 Cookie)": "CatPaw's X-Passport-Token (login-state Cookie)", "Cline Pass 的 API Key 在 app.cline.bot 获取(订阅制);端点为 OpenAI 兼容,模型清单以 Cline 控制台为准,模型名在模型管理里按裸名添加(如 glm-5.2 / kimi-k2.7-code / deepseek-v4-pro);上游按客户端形态校验,所需的客户端请求头已随卡预置": "Get the Cline Pass API Key at app.cline.bot (subscription-based); the endpoint is OpenAI-compatible, the model catalog follows the Cline console, and model names are added under Model management with the plain name (e.g. glm-5.2 / kimi-k2.7-code / deepseek-v4-pro); the upstream validates the client shape, so the required client request headers are preset on this card", "Cloud-IDE-JWT(三段点分)": "Cloud-IDE-JWT (three dot-separated segments)", "Command Code": "Command Code", "JWT(三段点分;也可直接粘贴 Bearer 整行或 data.bin 内容)": "JWT (three dot-separated parts; you can also paste a whole Bearer line or the data.bin content)", "JWT(三段点分;也可直接粘贴 chatglm_token=… 整行)": "JWT (three dot-separated parts; a whole chatglm_token=… line works too)", "MonkeyCode": "MonkeyCode", "MonkeyCode 国际版": "MonkeyCode International edition", "NVIDIA NIM 托管端点,Key 在 integrate.api.nvidia.com 申请": "NVIDIA NIM managed endpoint; apply for the Key at integrate.api.nvidia.com", "OfficeAce 果办": "OfficeAce", "accessToken 是 Accio 的登录凭证(一长串不透明 token,不是 JWT);refreshToken 可选,填了之后到期能自动续期。请填写 {label}账号的凭证 —— {siteNote}(最容易拿到的办法:直接用上方的「网页登录」,不需要手工找 token。)": "accessToken is Accio's login credential (a long opaque token, not a JWT); refreshToken is optional and enables automatic renewal on expiry. Enter the credential of the {label} account — {siteNote} (the easiest way to get it: just use \"Web login\" above; no need to hunt for the token manually.)", "accessToken 是 Trae 的 Cloud-IDE-JWT(三段点分),refreshToken 用于到期自动续期(本家 refreshToken 一次一换:换发一次旧的即作废,所以两份程序别同时刷同一个账号)。
手工粘贴时请连 machineId / deviceId 一起填:上游把它们与登录时上传的设备公钥绑在一起判设备,凭空换一对会撞 2xxxx 那族设备绑定拒绝。
没有这三样时的正路是用上方的「网页登录」;容器 / 远程部署形态按提示粘贴地址栏回调地址即可。": "accessToken is Trae's Cloud-IDE-JWT (three dot-separated segments), and refreshToken enables automatic renewal on expiry (this provider rotates refreshToken on every use: once exchanged, the old one is void, so do not refresh the same account from two programs at once).
When pasting manually, fill in machineId / deviceId as well: upstream ties them to the device public key uploaded at sign-in to identify the device, and swapping in a new pair from nowhere triggers the 2xxxx family of device-binding rejections.
Without these three, the proper route is \"Web login\" above; for container / remote deployments, paste the callback URL from the address bar as prompted.", "monkeycode_ai_session 的值(也可直接粘贴整段 Cookie)": "The value of monkeycode_ai_session (you can also paste the whole Cookie)", "ms- 开头的 API 令牌": "API token starting with ms-", "refreshToken 可选,填了到期可自动续期;两者都能从小浣熊客户端登录态文件里取到。": "refreshToken is optional and enables automatic renewal on expiry; both can be obtained from the Raccoon client login-state file.", "refreshToken 可选,填了可自动续期;两者都能从客户端登录态文件取到。同一个 Cline 账号两个池都能用,这里归入 {label}。": "refreshToken is optional and enables automatic renewal; both can be obtained from the client login-state file. The same Cline account works in both pools; here it is grouped under {label}.", "token 支持 enc: 前缀(Windows 上自动解密)。未填 refreshToken 无法自动续期。": "token supports the enc: prefix (decrypted automatically on Windows). Without a refreshToken, automatic renewal is not possible.", "token 是登录态 Cookie;CatPaw 没有刷新机制,过期后需在客户端重新登录。": "token is the login-state Cookie; CatPaw has no refresh mechanism, so sign in again in the client after it expires.", "user_ 开头的 API Key(也可直接粘贴 Authorization: Bearer … 整行)": "API Key starting with user_ (you can also paste the whole Authorization: Bearer … line)", "{label} 网页登录的打开方式": "How to open {label} web login", "{label} 账号地区": "{label} account region", "{label} 账号的添加方式": "How to add a {label} account", "{name} 不是合法 JSON:{reason}": "{name} is not valid JSON: {reason}", "{name}要粘一个 JSON 对象(形如 {sample})": "{name} requires a JSON object (like {sample})", "{n} 个账号": "{n} accounts", "{n} 个账号,点击添加": "{n} accounts, click to add", "{seconds}s 后重发": "Resend in {seconds}s", "✅ {label}账号已添加": "✅ {label} account added", "✅ {label}账号已添加{name}": "✅ {label} account added{name}", "✅ 已从 cc-switch 导入 {n} 个供应商": "✅ Imported {n} providers from cc-switch", "✅ 已创建自定义提供商「{name}」并添加账号": "✅ Created custom provider \"{name}\" and added an account", "✅ 已删除自定义提供商「{name}」{accounts}{keys}": "✅ Deleted custom provider \"{name}\"{accounts}{keys}", "✅ 已更新已有账号{name}(同一把 API Key 只保留一条,重复添加会合并)": "✅ Updated the existing account{name} (one account per API key; re-adding merges into it)", "✅ 登录成功,{edition}账号已加入列表": "✅ Signed in; {edition} account added to the list", "✅ 领取成功:{planId}{period}": "✅ Claim successful: {planId}{period}", " 同一家可以放多把 key,按优先级轮换。": " One provider can hold multiple keys, rotated by priority.", "「{name}」的账号添加功能还在开发中,敬请期待。": "Adding accounts for \"{name}\" is still in development — stay tuned.", "一个 Key 用遍多家模型,模型名用「厂商/模型」全称(如 deepseek/deepseek-chat)": "One Key works across many vendors; use the full \"vendor/model\" name (e.g. deepseek/deepseek-chat)", "上游不要鉴权时留空,并勾选下面一项(留空又不勾会被当成未配置凭证)": "Leave blank when the upstream needs no authentication, and check the option below (blank without the checkbox counts as no credential configured)", "上游信息": "Upstream info", "不可领({status})": "Not claimable ({status})", "不支持导入": "Import not supported", "不是有效的凭证文件:内容要是一个 JSON 对象": "Not a valid credential file: the content must be a JSON object", "不是有效的凭证文件:需要包含 accessToken 与 uid": "Not a valid credential file: accessToken and uid are required", "不是自定义提供商": "Not a custom provider", "不需要 Key:转发与拉取模型都不发送鉴权头": "No Key needed: neither forwarding nor model fetching sends auth headers", "不需要登录:点下面的按钮,网关会直接在智谱清言换发一份访客凭证并加入账号列表(也可以先填个备注名)。访客凭证可以直接用来对话,免费额度由上游按设备发放。
注意:访客账号没有积分体系 —— 它与「会员积分」「每日登录积分」「活动领取」相关的接口一律需要登录,因此那些能力对访客会如实跳过(账号页的积分、签到中心都不显示读数)。想要积分就用「填写凭证」粘一个已登录账号的令牌,或「导入桌面端登录态」。": "No sign-in needed: click the button below and the gateway will obtain a guest credential from Zhipu Qingyan directly and add it to the account list (you can fill in a note name first). The guest credential can be used for chat right away; the free quota is issued by the upstream per device.
Note: a guest account has no points system — its member points, daily sign-in points and activity claim endpoints all require sign-in, so those capabilities are skipped for guests (no readings are shown on the accounts page or in the check-in center). To get points, use \"Fill in credentials\" to paste a signed-in account token, or \"Import desktop sign-in state\".", "两版账号可同时保存,各自一份模型清单(国内版与国际版是两家提供商,可分别启用与映射)。": "Both editions' accounts can be saved at once, each with its own model catalog (the China and International editions are two providers that can be enabled and mapped separately).", "中国版": "China edition", "今天没有需要领的活动(都已到账)": "No campaigns to claim today (all already credited)", "今天(北京时间 {day})已试 {attempts} 次,还能试 {left} 次{next}
": "Tried {attempts} times today (Beijing time {day}); {left} attempts left{next}
", "从别的机器(或 OfficeAce 桌面端 models.json)取三项贴进来:模型网关基址(baseUrl,形如 https://modelgw-…/v2)与 modelAppKey / modelAppSecret。这三项就能转发(网关凭据不过期);控制面临时凭据(accessKeyId 等)可选,留空则额度/自动续期不可用,但不影响转发。": "Grab three items from another machine (or from the OfficeAce desktop app's models.json) and paste them here: the model gateway base URL (baseUrl, shaped like https://modelgw-…/v2) plus modelAppKey / modelAppSecret. These three are enough to forward requests (the gateway credential never expires); the control-plane temporary credentials (accessKeyId and so on) are optional — leaving them blank disables balance queries and auto-renewal but does not affect forwarding.", "从本机导入桌面端登录态": "Import desktop login state from this machine", "任务镜像 id": "Task image id", "余额查询": "Balance query", "使用 Google 账号登录": "Sign in with Google", "使用 Zai 账号登录": "Sign in with Zai", "使用个人访问令牌(PAT)": "Use a personal access token (PAT)", "免费模型不用填 Key(默认勾上「该上游无需鉴权」,网关自动用匿名凭证);付费模型则填 Zen 的 API Key。免费档上游只认官方客户端形态,已默认开启「伪装 OpenCode 官方客户端」": "Free models need no Key (\"This upstream needs no authentication\" is checked by default, and the gateway uses anonymous credentials automatically); for paid models, enter your Zen API Key. The free tier only accepts the official client form, so \"Emulate the official OpenCode client\" is on by default", "内嵌窗口": "Embedded window", "内嵌窗口打开;关窗即取消等待(Google 账号被拒时改用系统浏览器)": "Opens in the embedded window; closing it cancels the wait (if a Google account is rejected, switch to the system browser)", "内嵌窗口打开;完成后自动加入列表,关窗即取消等待": "Opens in the embedded window; added to the list when done; closing it cancels the wait", "内嵌窗口打开;扫码完成后自动加入列表,关窗即取消等待": "Opens in an embedded window; the account is added automatically once you have scanned — closing the window cancels the wait", "内嵌窗口用全新环境,多账号互不影响;关窗即取消等待": "The embedded window uses a fresh environment, so multiple accounts do not affect each other; closing it cancels the wait", "内嵌窗口(推荐)": "Embedded window (recommended)", "准备验证…": "Preparing verification…", "凭据 JSON": "Credential JSON", "凭证文件在哪?": "Where is the credential file?", "创建并添加账号": "Create and add account", "创建这个提供商,并同时建立它的第一个账号。": "Create this provider and its first account in one step.", "删除功能不可用(脚本未就绪)": "Delete is unavailable (script not ready)", "删除失败:{reason}": "Delete failed: {reason}", "删除此提供商": "Delete this provider", "及 {n} 个账号": " and {n} accounts", "发送中…": "Sending…", "发送失败:{message}": "Send failed: {message}", "发送未确认:登录窗口已弹出,请在弹出的窗口中手动完成登录": "Send unconfirmed: the sign-in window has opened; complete the sign-in manually in that window", "取消失败:{message}": "Cancel failed: {message}", "取消等待": "Cancel sign-in", "只有「内嵌窗口」能恢复第三方入口:系统浏览器里我们无法改动登录页": "Only the Embedded window can restore third-party options: we cannot modify the sign-in page in the system browser", "可选": "Optional", "可选(cloudaicompanionProject):留空由网关自动发现": "Optional (cloudaicompanionProject); if blank, the gateway discovers it automatically", "可选,展示用": "Optional; for display", "可选,没有则无法自动续期": "Optional; without it, automatic renewal is not possible", "可选,留空使用凭据里的 user_name": "Optional; defaults to the user_name in the credential", "可选,留空使用账号姓名、邮箱或令牌指纹": "Optional; defaults to the account name, email, or token fingerprint", "可选,留空使用账号昵称或邮箱": "Optional; defaults to the account nickname or email", "可选,留空则用 key 尾号": "Optional; defaults to the key suffix", "可选,留空则用 userId": "Optional; defaults to userId", "可选,留空则用上游账号昵称": "Optional; if left blank, the upstream account's nickname is used", "可选,留空则用上游返回的账号名或账号 id": "Optional; defaults to the account name or account id returned by upstream", "可选,留空则用凭证里的账号名": "Optional; defaults to the account name in the credential", "可选,留空则用文件里的昵称": "Optional; leave empty to use the nickname from the file", "可选,留空则用登录名或 uid": "Optional; defaults to the login name or uid", "可选,留空则用脱敏手机号": "Optional; defaults to the masked phone number", "可选,留空则用脱敏手机号或 userId": "Optional; defaults to the masked phone number or userId", "可选,留空则用账号 uk": "Optional; defaults to the account uk", "可选,留空则用账号昵称": "Optional; defaults to the account nickname", "可选,留空则用账号昵称或 userId": "Optional; leave blank to use the account nickname or userId", "可选,留空则用邮箱或令牌尾号": "Optional; defaults to the email or token suffix", "可选,留空用「OfficeAce 果办」": "Optional; defaults to “OfficeAce”", "可选,留空自动生成": "Optional; generated automatically if blank", "可选,留空自动用昵称": "Optional; defaults to the nickname", "可选,给这个访客账号起个备注名": "Optional; a note name for this guest account", "可选,续期时带上": "Optional; sent when renewing", "可选,讯飞侧 userid": "Optional; the userid on the iFlytek side", "可选:发起对话必需,留空则由网关从该账号已有任务里自动发现,发现不到时之后手动补": "Optional; required to start a conversation. If blank, the gateway discovers it automatically from this account's existing tasks; if it cannot find one, fill it in manually later.", "可选:账号邮箱,用于展示与身份识别(换新令牌也能认回同一账号)": "Optional; the account email, used for display and to recognize the identity (the same account is recognized even after switching to a new token)", "可选;UUID 形态,与凭据同生共死": "Optional; UUID form, lives and dies with the credential", "可选;填了才能到期自动续期": "Optional; required for automatic renewal on expiry", "可选;用于去重与展示名(留空时网关会问一次上游)": "Optional; used for deduplication and the display name (when blank, the gateway asks upstream once)", "可选;用于生成账号 id 与展示名": "Optional; used to generate the account id and display name", "可选;纯数字串(上游只收 8–24 位数字)": "Optional; digits only (upstream accepts only 8–24 digits)", "可领取": "Claimable", "同一家可以混着放:有 Key 的账号与无鉴权账号各按各的规则走;无需鉴权的账号也能并存多条(各自可配不同的出网代理)": "Keyed and no-auth accounts can coexist in one provider, each routed by its own rules; multiple no-auth accounts are allowed too (each with its own egress proxy)", "同地址换 anthropic 协议即走它的 Claude 兼容端点。转发必须填 OpenCode Go 的 API Key(订阅制;获取模型清单不需要 Key,但发请求上游会回 401「Missing API key」)": "Switch the protocol to anthropic on the same address to use its Claude-compatible endpoint. Forwarding requires an OpenCode Go API Key (subscription-based; fetching the model catalog needs no Key, but requests get a 401 \"Missing API key\" from upstream)", "响应为空": "Empty response", "商汤日日新的 OpenAI 兼容端点;余额查询走控制台账号密码(见下方「余额查询」一段)": "SenseNova's OpenAI-compatible endpoint; balance query uses the console account and password (see \"Balance query\" below)", "国内版": "China edition", "国内版与**国际版是两套独立的账号与套餐**,凭证与领取的套餐都不通用。": "The China edition and **the International edition are two separate sets of accounts and plans**; credentials and claimed plans do not carry over between them.", "国内版登录页没有 Google / GitHub 入口(它用微信 / 手机号 / 邮箱登录)": "The China edition's sign-in page has no Google / GitHub options (it uses WeChat / phone / email sign-in)", "国内版的登录站点是 www.accio-ai.com,与国际版不是同一站。": "The China edition's sign-in site is www.accio-ai.com, a different site from the International edition's.", "国内版(WorkBuddy)": "China edition (WorkBuddy)", "国内站为 https://api.siliconflow.cn/v1": "China site: https://api.siliconflow.cn/v1", "国内站(minimaxi.com);OpenAI 兼容地址为 https://api.minimaxi.com/v1": "China site (minimaxi.com); the OpenAI-compatible address is https://api.minimaxi.com/v1", "国际版": "International edition", "国际版 z.ai 的 Coding 套餐;OpenAI 兼容地址为 https://api.z.ai/api/coding/paas/v4": "The International edition z.ai Coding plan; the OpenAI-compatible address is https://api.z.ai/api/coding/paas/v4", "国际版与国内版是**两套独立的账号**(同一账号体系的两个站点),凭证不通用。": "The International and China editions are **two separate sets of accounts** (two sites of the same account system); credentials do not carry over.", "国际版与国内版账号体系独立,请填国际版的凭证。未填 refreshToken 无法自动续期。": "The International and China editions have separate account systems; enter the International edition's credentials. Without a refreshToken, automatic renewal is not possible.", "国际版登录页默认只显示邮箱登录,勾选后恢复 Google / GitHub / X 入口": "The International edition's sign-in page shows only email sign-in by default; checking this restores the Google / GitHub / X options", "国际版的推理站点是 api.z.ai,与国内版不是同一站;套餐也各自独立。": "The International edition's inference site is api.z.ai, a different site from the China edition's; plans are separate as well.", "国际版(WorkBuddy AI)": "International edition (WorkBuddy AI)", "国际站 Coding 套餐;OpenAI 兼容地址为 https://api.minimax.io/v1": "International site Coding plan; the OpenAI-compatible address is https://api.minimax.io/v1", "在 cc-switch 里找到": "Found", "在内嵌窗口里完成官方登录,成功后自动加入账号列表。": "Complete the official sign-in in the embedded window; the account is added to the list automatically on success.", "在{label}的 Qoder 账号设置 → Integrations 生成 PAT(别填 Google / GitHub 的令牌)。两个地区的账号与凭证不通用。": "Generate a PAT in the Qoder account settings → Integrations for {label} (do not use a Google / GitHub token). Accounts and credentials do not carry over between the two regions.", "在打开的官方授权页里用微信扫码登录(页面会直接显示二维码)。扫码成功后自动加入账号列表。": "Scan the WeChat QR code on the official authorization page that opens (the QR code appears right away). The account is added to the list automatically after a successful scan.", "在打开的窗口里用百度账号登录 KukuAI 主站(手机验证码 / 扫码均可),登录成功后自动加入账号列表。网关会向百度换发 KukuAI 业务会话令牌(依赖本机已安装库库AI 客户端)。": "In the window that opens, sign in to the KukuAI main site with your Baidu account (SMS code or QR scan both work); the account is added to the list automatically on success. The gateway exchanges it with Baidu for a KukuAI business session token (requires the KukuAI client installed on this machine).", "在打开的窗口里登录 Google 账号(Antigravity 的授权页),授权完成后自动加入账号列表。": "Sign in with your Google account in the window that opens (Antigravity's authorization page); the account is added to the list automatically once authorization completes.", "在浏览器中打开登录页": "Open the sign-in page in your browser", "地区": "Region", "填写凭证": "Enter credentials", "填写凭证添加": "Enter credentials to add", "备注名": "Label", "套餐": "Plan", "如:智谱 GLM": "e.g. Zhipu GLM", "完成登录后自动加入账号列表,昵称取自上游。": "Added to the account list automatically after sign-in; the nickname comes from upstream.", "官方客户端凭证目录:Windows 是 C:\\Users\\<你的用户名>\\AppData\\Local\\CodeBuddyExtension\\Data\\Public\\auth,macOS 是 ~/Library/Application Support/CodeBuddyExtension/Data/Public/auth": "Official client credential directory: Windows — C:\\Users\\\\AppData\\Local\\CodeBuddyExtension\\Data\\Public\\auth; macOS — ~/Library/Application Support/CodeBuddyExtension/Data/Public/auth", "官方已确认到账": "Officially confirmed as credited", "导入": "Import", "导入中…": "Importing…", "导入凭证文件": "Import credential file", "导入失败": "Import failed", "导入失败:{reason}": "Import failed: {reason}", "导入所选": "Import selected", "导入所选({n})": "Import selected ({n})", "导入桌面端登录态": "Import desktop login state", "将打开内嵌窗口;授权完成后自动加入账号列表。关掉窗口即取消等待。授权页最后可能提示无法打开 zcode:// 链接,这是正常的 —— 结果已由服务端记下": "The embedded window will open; the account is added to the list automatically once authorization completes. Closing the window cancels the wait. The authorization page may end with a message that it cannot open the zcode:// link — that is normal; the result has already been recorded server-side", "将打开内嵌窗口;授权完成后自动加入账号列表。远程面板可粘贴回调地址。关掉窗口即取消等待。链接 5 分钟内有效,超时或未点就会作废(可重新发起)": "The embedded window will open; the account is added to the list automatically once authorization completes. On a remote panel you can paste the callback URL. Closing the window cancels the wait. The link is valid for 5 minutes; if it times out or is not clicked, it is voided (you can start again)", "将打开内嵌窗口;登录完成后自动加入账号列表。关掉窗口即取消等待": "The embedded window will open; the account is added to the list automatically after sign-in. Closing the window cancels the wait", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的 Trae 账号);同机完成后自动加入,Docker / 远程面板按提示粘贴地址栏回调地址。": "The authorization page will open in your system default browser (reusing the Trae account already signed in there); on the same machine the account is added automatically when done. For Docker / remote panels, paste the callback URL from the address bar as prompted.", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的 ZCode 账号);授权完成后自动加入账号列表。页面最后可能提示无法打开 zcode:// 链接,属正常现象": "The authorization page will open in your system default browser (reusing the ZCode account already signed in there); the account is added to the list automatically once authorization completes. A final message that the zcode:// link cannot be opened is normal", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的华为云账号);授权码由网关轮询云端取回,与浏览器跑在哪台机器无关,完成后自动加入账号列表": "The authorization page will open in your system default browser (reusing the Huawei Cloud account already signed in there); the gateway polls the cloud for the authorization code, so it does not matter which machine the browser runs on. The account is added to the list automatically once done", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的华为云账号);浏览器与网关不在同一台机器时,按上方说明把最终回调地址粘贴回面板": "The authorization page will open in your system default browser (reusing the Huawei Cloud account already signed in there); when the browser and the gateway are not on the same machine, paste the final callback URL back into the panel as described above", "将用系统默认浏览器打开登录页(会复用浏览器里已登录的 Accio 账号);完成登录后自动加入账号列表,关掉弹窗即取消等待": "The sign-in page will open in your system default browser (reusing the Accio account already signed in there); the account is added to the list automatically after sign-in, and closing the popup cancels the wait", "小米 MiMo Token Plan 套餐(新加坡站)": "Xiaomi MiMo Token Plan (Singapore site)", "已到账": "Credited", "已取消登录等待": "Pending sign-in canceled", "已取消领取": "Claim canceled", "已取消验证码": "Verification canceled", "已填写手机号,正在发送验证码…": "Phone number entered; sending the code…", "已声明无需鉴权:账号会被正常选路,出网时不带任何鉴权头": "Marked as needing no authentication: the account is routed normally, and no auth headers are sent outbound", "已导入 {ok} 个,失败 {fail} 个(失败项已标注在列表里)": "Imported {ok}, failed {fail} (failed items are marked in the list)", "已建过 · {n} 个账号,点击继续添加": "Already created · {n} accounts, click to add more", "已建过,点击继续添加账号": "Already created, click to add another account", "已打开官方登录页,请在窗口中完成登录…": "Official sign-in page opened; complete sign-in in the window…", "已点发送,等待短信…": "Sent; waiting for the SMS…", "已用系统默认浏览器打开登录页,请在浏览器中完成登录…": "Sign-in page opened in your system default browser; complete sign-in in the browser…", "已领取,等官方确认": "Claimed, awaiting official confirmation", "当前壳版本不支持 AutoClaw 网页登录,请更新应用": "This app version does not support AutoClaw web login; update the app", "当前没有可领取的套餐(活动尚未开始)": "No plans are available to claim right now (the event has not started yet)", "当前环境不支持领取(桥接方法缺失)": "Claiming is not supported in this environment (bridge method missing)", "必填,CatPaw 账号标识": "Required; CatPaw account identifier", "恢复 Google / GitHub 入口": "Restore Google / GitHub options", "手机号": "Phone number", "手机验证码登录": "SMS code login", "打开 Trae SOLO 的官方授权页(trae.cn)并用你的 Trae 账号登录:授权完成后官方页面会跳回本机的一个临时端口;同机部署自动接收,Docker / 远程面板请按提示复制地址栏回调地址。": "Open the official authorization page for Trae SOLO (trae.cn) and sign in with your Trae account: once authorized, the official page redirects back to a temporary port on this machine; a same-machine deployment receives it automatically, while Docker / remote panels should copy the callback URL from the address bar as prompted.", "打开 Accio {label}的官方登录页({site})并用你的 Accio 账号登录:登录成功后官方页面会跳回本机;同机自动完成,Docker / 远程面板按提示粘贴回调地址即可(授权码只在本机传给网关,界面不显示明文 token)。": "Open the official sign-in page for Accio {label} ({site}) and sign in with your Accio account: on success the official page redirects back to this machine; a same-machine setup completes automatically, while Docker / remote panels just paste the callback URL as prompted (the authorization code is passed to the gateway only on this machine, and no plaintext token is shown in the UI).", "打开 Accio {label}登录页": "Open the Accio {label} sign-in page", "打开 Antigravity 网页登录": "Open Antigravity web login", "打开 CatPaw 网页登录": "Open CatPaw web login", "打开 Cline 授权页": "Open Cline authorization page", "打开 CodeArts 授权页": "Open CodeArts authorization page", "打开 Qoder 网页登录": "Open Qoder web login", "打开 Trae 授权页": "Open Trae authorization page", "打开 ZCode {label}的官方授权页并用你的账号登录。授权结果由 ZCode 服务端记录,网关在后台自动取回凭证并加入账号列表。": "Open the official authorization page for ZCode {label} and sign in with your account. The authorization result is recorded by the ZCode server; the gateway fetches the credential in the background and adds the account to the list.", "打开 ZCode {label}授权页": "Open the ZCode {label} authorization page", "打开华为云 CodeArts 的官方授权页登录:登录完成后官方页面会把浏览器带回网关自己的 /oauth/callback,网关用一次性授权码换取临时凭据并加入账号列表。
网关跑在另一台机器上时,网页端会提示把地址栏中的最终回调地址直接粘贴回面板。": "Open the official Huawei Cloud CodeArts authorization page to sign in: once done, the official page brings the browser back to the gateway's own /oauth/callback, and the gateway exchanges the one-time authorization code for temporary credentials and adds the account to the list.
When the gateway runs on another machine, the web UI prompts you to paste the final callback URL from the address bar back into the panel.", "打开华为云授权页登录:登录完成后网关会自动轮询云端取回授权码并加入账号列表(不需要装 OfficeAce 桌面端,也无需手工回填回调地址)。": "Open the Huawei Cloud authorization page and sign in: once finished, the gateway automatically polls the cloud for the authorization code and adds the account to the list (no OfficeAce desktop app required, and no need to paste a callback URL back manually).", "打开官方授权页完成设备码授权,登录的是{label}({site})的账号。": "Open the official authorization page and complete the device-code authorization; you will be signing in to a {label} ({site}) account.", "打开授权页": "Open the authorization page", "打开授权页完成确认,账号自动加入 {label}{note}": "Open the authorization page and confirm; the account is added to {label} automatically{note}", "打开方式": "Open with", "打开网页登录": "Open web login", "探测失败:{message}": "Probe failed: {message}", "接入一个兼容上游": "Connect a compatible upstream", "提交中…": "Submitting…", "搜索提供商": "Search providers", "搜索提供商…": "Search providers…", "整份粘贴官方插件 / CLIProxyAPI 落盘的凭据 JSON(形如 {\"codearts_provider_credential\":{…}},铺平的也行)。
必填:access_key_id、secret_access_key、security_token。要能自动续期,必须连 refresh_token 与 oauth_context 一起粘 —— 临时凭据约一小时到期,缺这半块就续不回来,只能重新登录。": "Paste the whole credential JSON written to disk by the official plugin / CLIProxyAPI (like {\"codearts_provider_credential\":{…}}; a flattened form also works).
Required: access_key_id, secret_access_key, security_token.For automatic renewal you must paste refresh_token and oauth_context as well — temporary credentials expire in about an hour, and without that half they cannot be renewed; you would have to sign in again.", "文件是{edition}凭证,已按该版本导入": "The file contains {edition} credentials and has been imported as that edition", "新建自定义提供商": "New custom provider", "方案:{label}": "Scheme: {label}", "明文 JWT 或 auth.json 里的 enc: 加密值(自动解密)": "Plaintext JWT, or the enc: encrypted value in auth.json (decrypted automatically)", "明文 JWT(国际版账号的 access token)": "Plaintext JWT (the access token of an International edition account)", "智谱 bigmodel.cn 的 Coding 套餐,Key 在 open.bigmodel.cn/usercenter/apikeys": "Zhipu's bigmodel.cn Coding plan; get the Key at open.bigmodel.cn/usercenter/apikeys", "未知错误": "Unknown error", "未能获取授权地址,请重试": "Could not get the authorization URL; try again", "未能读取 cc-switch 数据": "Could not read cc-switch data", "未领取成功": "Claim unsuccessful", "本地 Ollama、OpenCode Zen 免费档这类上游要勾上,否则账号不可用": "Check this for upstreams like local Ollama or the OpenCode Zen free tier; otherwise the account cannot be used", "本家有两个**互不替代**的凭证,按你要用的功能填,至少填一个:编码套餐 API Key 用于转发推理(打 {site})与查询窗口限额(每 N 小时 / 每周的剩余比例);jwt 用于领取套餐与查询余额(打 zcode.z.ai 的 billing 网关,官方叫 Coding Plan JWT,是一串三段点分的字符串)。余额两把都能查、但读到的东西不同:jwt 读到余额桶与套餐到期,API Key 读到窗口限额;而领取只认 jwt、转发只认 API Key。请填写 {label}账号的凭证 —— {plan}(最容易拿到的办法:直接用上方的「网页登录」—— 它会替你把这个 API Key 换好,两个凭证一起拿到。)": "This provider has two credentials that **do not replace each other**; fill in the one(s) for the features you need, at least one: the Coding Plan API Key is used for forwarding inference (hits {site}) and for querying the window limits (the remaining percentage of each N-hour / weekly window); the jwt is used for claiming plans and querying balance (hits the billing gateway at zcode.z.ai; officially called a Coding Plan JWT, a three-segment dot-separated string). Either one can query balance, but they read different things: the jwt reads the balance buckets and the plan expiry, while the API Key reads the window limits; and claiming only accepts the jwt, forwarding only accepts the API Key. Please enter the credentials for the {label} account — {plan} (the easiest way: just use \"Web login\" above — it exchanges this API Key for you and gets both credentials at once.)", "本机 Ollama 的 OpenAI 兼容端点,无需 API Key(默认已勾上「该上游无需鉴权」,鉴权头一个都不发)": "The local Ollama OpenAI-compatible endpoint; no API Key needed (\"This upstream needs no authentication\" is checked by default, and no auth headers are sent at all)", "本次未确认到账": "Not confirmed as credited this time", "条可导入": "are importable", "条配置,其中": "configs in cc-switch, of which", "桌面运行时不可用(Tauri 未初始化)": "Desktop runtime unavailable (Tauri not initialized)", "模型网关基址": "Model gateway base URL", "正在打开百度登录页…": "Opening the Baidu sign-in page…", "正在扫描本机 cc-switch…": "Scanning cc-switch on this machine…", "正在换发访客凭证…": "Requesting a guest credential…", "正在添加…": "Adding…", "正在等待{name}登录完成;完成或取消后才能发起新的登录": "Waiting for {name} sign-in to finish; you can start a new sign-in only after it completes or is canceled", "每周": "Weekly", "每日": "Daily", "每月": "Monthly", "没有则无法自动续期": "Without it, automatic renewal is not possible", "没有匹配「{keyword}」的提供商": "No providers match \"{keyword}\"", "添加 {name} 账号": "Add {name} account", "添加中…": "Adding…", "添加到 ": "Add to ", "添加失败:{reason}": "Add failed: {reason}", "添加小浣熊账号": "Add Raccoon account", "添加方式": "Add method", "添加访客账号": "Add a guest account", "添加账号": "Add account", "火山引擎 Coding 套餐;通用推理接入点为 https://ark.cn-beijing.volces.com/api/v3": "Volcano Engine Coding plan; the general inference endpoint is https://ark.cn-beijing.volces.com/api/v3", "点击添加账号": "Click to add an account", "点开即预填,填 Key 接入": "Opens prefilled; enter your Key to connect", "点按钮后先过一次滑块验证(官方风控),随后打开登录页,登录完成即自动添加账号。
这是国际版官方唯一的登录方式;已在客户端登录过的,用「导入桌面端登录态」更快。": "After clicking the button, first pass a slider verification (the vendor's risk control), then the sign-in page opens and the account is added automatically once you sign in.
This is the only official sign-in method for the International edition; if you are already signed in to the client, \"Import desktop login state\" is faster.", "用 AutoClaw 账号绑定的手机号登录:点击「获取验证码」,收到短信后填入下方并登录。验证码由本机直接提交给官方接口,界面不显示 token。": "Sign in with the phone number bound to your AutoClaw account: click \"Get code\", then enter the SMS code below and sign in. The code is submitted from this machine directly to the official API; no token is shown in the UI.", "用 CatPaw 账号完成登录(美团 passport),成功后自动加入账号列表。": "Sign in with your CatPaw account (Meituan Passport); the account is added to the list automatically on success.", "用 Loomy 账号绑定的手机号登录:点「获取验证码」后填入即可。这是本家最省事的入口。": "Sign in with the phone number bound to your Loomy account: click \"Get code\" and enter it. This is the easiest way in for this provider.", "用于转发;形如 apiKey.secret 两段点分(不填则这个账号不能转发)": "Used for forwarding; two dot-separated segments like apiKey.secret (if left blank, this account cannot forward)", "用于领取套餐与查询余额;不填则这个账号不能领取与查余额": "Used for claiming plans and querying balance; if left blank, this account cannot claim or check balance", "用户 ID": "User ID", "用绑定的手机号登录:点「获取验证码」后填入即可。这是国内版官方唯一的登录方式。": "Sign in with your bound phone number: click \"Get code\" and enter it. This is the only official sign-in method for the China edition.", "留空则用提供商名称": "Leave blank to use the provider name", "登录 / 添加 {name} 账号": "Sign in / add {name} account", "登录 session(一长串)": "Login session (a long string)", "登录中…": "Signing in…", "登录失败:{message}": "Sign-in failed: {message}", "登录已结束": "Sign-in has ended", "登录并添加": "Sign in and add", "登录态文件路径:~/.box-agent/config/auth.json(Windows:C:\\Users\\<你的用户名>\\.box-agent\\config\\auth.json)": "Login-state file path: ~/.box-agent/config/auth.json (Windows: C:\\Users\\\\.box-agent\\config\\auth.json)", "确定删除自定义提供商「{name}」?将同时删除该提供商下 {count} 个账号,删除后无法恢复。": "Delete custom provider \"{name}\"? This will also delete {count} accounts under it; deletion cannot be undone.", "等待 Accio {label}登录完成…": "Waiting for Accio {label} sign-in…", "等待 CatPaw 登录完成…": "Waiting for CatPaw sign-in…", "等待 Cline 授权确认…": "Waiting for Cline authorization confirmation…", "等待 CodeArts 登录完成…": "Waiting for CodeArts sign-in…", "等待 Google 授权完成…": "Waiting for Google authorization…", "等待 KukuAI 登录完成…": "Waiting for KukuAI sign-in…", "等待 OfficeAce 登录完成…": "Waiting for OfficeAce sign-in…", "等待 OrcaTerm 登录完成…": "Waiting for OrcaTerm sign-in…", "等待 Qoder 授权完成…": "Waiting for Qoder authorization…", "等待 Trae 授权完成…": "Waiting for Trae authorization…", "等待 ZCode {label}授权完成…": "Waiting for ZCode {label} authorization…", "等待小浣熊登录完成…": "Waiting for Raccoon sign-in…", "等待登录完成…": "Waiting for sign-in…", "等待网页登录…": "Waiting for web login…", "粘贴 API Key": "Paste API Key", "粘贴 API 令牌": "Paste API token", "粘贴 Accio 的 accessToken": "Paste the Accio accessToken", "粘贴 Antigravity 的 Google refresh token(以 1// 开头;直接粘贴含 refresh_token= 的整行也行)。
这是网页登录之外的手工入口(例如从已登录的官方 IDE 里导出)。refresh token 不会过期,access token 到期由网关自动续期;令牌丢了只能重新走 Google 授权,请妥善保存。": "Paste Antigravity's Google refresh token (starts with 1//; pasting the whole line containing refresh_token= also works).
This is a manual entry besides web login (for example, exported from the official IDE you are already signed in to). The refresh token does not expire, and the gateway renews the access token automatically when it expires; if the token is lost, you can only go through Google authorization again, so keep it safe.", "粘贴 Command Code 的 API Key(user_ 开头;从官方 CLI 的 ~/.commandcode/auth.json 或网页 studio 获取)。整行 / 带引号 / 带 Bearer 前缀地粘都行,网关会自己剥成裸 key。key 不过期、也没有续期接口,失效后重新获取即可;添加时网关会做一次轻量探活,失败不影响添加。": "Paste the Command Code API Key (starts with user_; get it from the official CLI's ~/.commandcode/auth.json or the web studio). Pasting the whole line / with quotes / with the Bearer prefix all work; the gateway strips it down to the bare key itself. The key does not expire and there is no renewal API, so if it stops working just get a new one. When adding, the gateway runs a lightweight liveness check; a failure does not affect adding.", "粘贴 Cookie": "Paste Cookie", "粘贴 Google refresh token": "Paste Google refresh token", "粘贴 OrcaTerm 的 OAuth accessToken(JWT,三段点分;从桌面客户端 data.bin 或 Web 版 Cookie ot_session 获取)。直接粘贴含 Bearer / ot_session= 的整行也行,网关会自己剥成裸 token。添加后由网关自动续期(上游有续期接口),无需跟随 2 小时时效手动更换。": "Paste OrcaTerm's OAuth accessToken (a JWT with three dot-separated parts; available from the desktop client's data.bin or the web version's ot_session cookie). Pasting a whole line containing Bearer / ot_session= is fine too — the gateway strips it down to the bare token. After adding, the gateway renews it automatically (the upstream has a renewal API), so you do not need to follow the 2-hour expiry by hand.", "粘贴 Qoder 个人访问令牌(pt-…)": "Paste the Qoder personal access token (pt-…)", "粘贴 accessToken": "Paste accessToken", "粘贴 access_token(一长串 JWT)": "Paste access_token (a long JWT)", "粘贴 session cookie": "Paste session cookie", "粘贴 token / refreshToken": "Paste token / refreshToken", "粘贴 workos:… 开头的令牌(不带前缀也会自动补上)": "Paste a token starting with workos:… (the prefix is added automatically if missing)", "粘贴智谱清言的访问令牌(JWT,三段点分)。获取方式:浏览器打开 chatglm.cn 并登录后,在开发者工具的 Application → Cookies 里复制 chatglm_token 的值(也可以直接粘 chatglm_token=…; 整行)。粘贴后会先向上游校验一次,校验通过才落账号;登录账号的积分、签到能力都能用,之后由网关自动续期(上游有续期接口)。": "Paste a Zhipu Qingyan access token (a JWT with three dot-separated parts). How to get it: open chatglm.cn in a browser, sign in, then copy the value of the chatglm_token cookie from Application → Cookies in the developer tools (pasting the whole chatglm_token=…; line works too). It is verified against the upstream once after pasting, and the account is only saved if that passes; signed-in accounts get points and sign-in capability, and the gateway renews it automatically afterwards (the upstream has a renewal API).", "粘贴登录凭据": "Paste login credentials", "粘贴的是登录 session(同时是模型网关的 token)。Loomy 没有续期接口,session 有效期约 14 天,过期后重新登录即可。": "What you paste is the login session (which is also the model gateway token). Loomy has no renewal API; the session is valid for about 14 days, so just sign in again after it expires.", "粘贴网关凭据": "Paste gateway credentials", "粘贴网页登录态 cookie monkeycode_ai_session 的值(在浏览器里复制整段 Cookie 直接粘贴也行,网关会自己剥出值)。
{siteNote}
MonkeyCode 没有续期接口:session 有效期约 30 天(硬限制),过期后重新登录网页、再粘贴一次即可。": "Paste the value of the web session cookie monkeycode_ai_session (copying the whole Cookie in the browser and pasting it directly also works; the gateway extracts the value itself).
{siteNote}
MonkeyCode has no renewal API: the session is valid for about 30 days (a hard limit); once it expires, sign in to the web page again and paste it one more time.", "粘贴访问令牌": "Paste an access token", "系统浏览器": "System browser", "系统浏览器可复用已有登录态(国际版推荐);内嵌窗口更干净。": "The system browser can reuse an existing login state (recommended for the International edition); the embedded window is cleaner.", "系统浏览器打开(复用已登录的 Cline 账号);完成后自动加入列表": "Opens in the system browser (reuses the signed-in Cline account); added to the list when done", "系统浏览器打开(复用已登录的 Google 账号);完成后自动加入列表": "Opens in the system browser (reuses the Google account already signed in); added to the list when done", "系统浏览器打开(复用已登录的 Zai / Google 账号);完成后自动加入列表": "Opens in the system browser (reuses the signed-in Zai / Google account); added to the list when done", "系统浏览器打开(复用已登录的美团账号);完成后自动加入列表": "Opens in the system browser (reuses the signed-in Meituan account); added to the list when done", "系统浏览器打开(复用已登录账号);完成后自动加入列表": "Opens in the system browser (reuses a signed-in account); added to the list when done", "系统默认浏览器": "System default browser", "编码套餐 API Key": "Coding Plan API Key", "网关 Secret": "Gateway secret", "网页登录": "Web login", "网页登录的打开方式": "How to open web login", "网页登录(Zai / Google)": "Web login (Zai / Google)", "自定义": "Custom", "自建聚合面板:填你自己的站点地址。余额查询用该账号的 API Key 打 {base}/v1/usage,不需要额外配置": "Self-hosted aggregation panel: fill in your own site address. Balance query calls {base}/v1/usage with this account's API key; no extra setup", "自建聚合面板:填你自己的站点地址;余额查询要另填 NewAPI 的个人访问令牌(见下方「余额查询」一段)": "Self-hosted aggregation panel: fill in your own site address; balance query additionally needs a NewAPI personal access token (see \"Balance query\" below)", "获取风控配置失败,将直接尝试领取:{message}": "Failed to get the risk-control config; trying to claim directly: {message}", "获取验证码": "Get code", "访客模式": "Guest mode", "访客模式(免登录)": "Guest mode (no sign-in)", "该上游无需鉴权(不发送鉴权头)": "This upstream needs no authentication (no auth headers are sent)", "该提供商": "This provider", "该提供商账号添加功能即将上线": "Account adding for this provider is coming soon", "该自定义提供商已不存在(可能已被删除),请刷新后重试": "This custom provider no longer exists (it may have been deleted); refresh and try again", "请先选择一个自定义提供商": "Select a custom provider first", "请在弹出的滑块中完成验证(官方要求的风控步骤)": "Complete the verification in the slider popup (a risk-control step required by the vendor)", "请填写 11 位大陆手机号": "Enter an 11-digit mainland China phone number", "请填写 6 位数字验证码": "Enter the 6-digit code", "请填写 Base URL": "Enter the Base URL", "请填写 {label}": "Enter {label}", "请填写名称": "Enter a name", "请完成验证…": "Complete the verification…", "读取 %APPDATA%/AutoClaw/auth.json 并解密,仅 Windows": "Reads and decrypts %APPDATA%/AutoClaw/auth.json; Windows only", "读取 ~/.cline/data/settings/providers.json,需已在 Cline 客户端登录": "Reads ~/.cline/data/settings/providers.json; requires being signed in to the Cline client", "读取 ~/.meituan-catpaw/auth.json,需已在 CatPaw 客户端登录": "Reads ~/.meituan-catpaw/auth.json; requires being signed in to the CatPaw client", "读取本机 KukuAI 客户端登录态(%APPDATA%\\baidugenflowpro\\Network\\Cookies),需已在 KukuAI 客户端登录": "Reads the local KukuAI client login state (%APPDATA%\\baidugenflowpro\\Network\\Cookies); requires being signed in to the KukuAI client", "读取本机 OrcaTerm 客户端登录态(%APPDATA%\\com.orcaterm-desktop.app\\data.bin),需已在 OrcaTerm 客户端登录": "Read the local OrcaTerm client sign-in state (%APPDATA%\\com.orcaterm-desktop.app\\data.bin); the OrcaTerm client must be signed in", "读取本机智谱清言客户端登录态(%APPDATA%\\chatglm\\Network\\Cookies),需已在客户端登录": "Read the local Zhipu Qingyan client sign-in state (%APPDATA%\\chatglm\\Network\\Cookies); the client must be signed in", "读本机官方客户端(Tencent WorkBuddy / WorkBuddy AI)当前登录的账号:自动定位其凭证目录里最新的登录态文件(需已在本机官方客户端登录)。导入后由网关自动续期,无需跟随 2 小时时效手动换令牌。": "Reads the account currently logged in to the official client (Tencent WorkBuddy / WorkBuddy AI) on this machine: the newest session file in its credential directory is located automatically (the official client must be logged in on this machine). The gateway renews the token after import — no need to swap tokens manually with the 2-hour expiry.", "读本机客户端当前登录态(明文 Cookie,无需解密)。客户端运行时 Cookies 文件被独占占用,导入前请先关闭 KukuAI 客户端。": "Reads the local client's current login state (plaintext Cookie, no decryption needed). The Cookies file is exclusively locked while the client runs, so close the KukuAI client before importing.", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。": "Reads the local client's current login state live each time (deleting this record does not affect the client's login state).", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。客户端重新登录后点「刷新 Token」同步。": "Reads the local client's current login state live each time (deleting this record does not affect the client's login state). After signing in again in the client, click \"Refresh token\" to sync.", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。客户端重新登录后重新导入即可。": "Reads the local client's current login state live each time (deleting this record does not affect the client's login state). After signing in again in the client, just re-import.", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。用 Zai / Google 登录客户端的用户走这一条。": "Reads the local client's current login state live each time (deleting this record does not affect the client's login state). Users who sign in to the client with Zai / Google should use this one.", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。这一条归入 {label}。": "Reads the local client's current login state live each time (deleting this record does not affect the client's login state). This one is grouped under {label}.", "读本机客户端当前登录的 OAuth 令牌(明文 JSON,无需解密)。导入后由网关自动续期,无需跟随客户端的 2 小时时效手动换令牌。": "Reads the OAuth token the local client is currently signed in with (plain-text JSON, no decryption needed). After importing, the gateway renews it automatically — no need to follow the client's 2-hour expiry by hand.", "读本机客户端当前的登录态。客户端的 Cookies 是 DPAPI 加密的(Chromium os_crypt),因此仅 Windows 可用;客户端正在运行时可能读不到该文件,先退出客户端再试即可(也可改用「填写凭证」粘贴令牌)。": "Read the current sign-in state of the local client. The client's cookies are DPAPI-encrypted (Chromium os_crypt), so this is Windows-only; the file may be unreadable while the client is running — quit the client and retry (or use \"Fill in credentials\" to paste a token instead).", "账号信息": "Account info", "账号信息不完整,请刷新后重试": "Account info is incomplete; refresh and try again", "账号已添加,但请留意:{warning}": "Account added, but note: {warning}", "账号版本": "Account edition", "账号类型": "Account type", "账号:{name}
": "Account: {name}
", "走 Inference Providers 路由,Key 在 hf.co/settings/tokens 创建": "Routes through Inference Providers; create the Key at hf.co/settings/tokens", "还没有账号": "No accounts yet", "这一家当前不支持网页登录,请改用填写凭证": "This provider does not support web login right now; use Enter credentials instead", "这个账号当前没有可自动领的活动(只自动领每日登录赠送积分)": "This account has no campaigns that can be claimed automatically right now (only the daily login gift points are claimed automatically)", "这份额度走「活动套餐」通道:若转发时提示编码套餐已到期,": "This quota goes through the Start Plan channel: if forwarding reports that the Coding Plan has expired, ", "这里填国内站(modelscope.cn)的账号:请粘贴国内站的令牌。国际站(modelscope.ai)是另一家 provider、另一套账号,两边的令牌不通用。": "This is for the China site (modelscope.cn) account: paste the China site's token. The international site (modelscope.ai) is another provider with its own account; tokens are not interchangeable between the two.", "这里填国内站(monkeycode-ai.com)的账号:请粘贴国内站的 session。国际站(monkeycode-ai.net)是另一家 provider、另一套账号,两边的凭证不通用。": "This is for the China site (monkeycode-ai.com) account: paste the China site's session. The international site (monkeycode-ai.net) is another provider with its own account; credentials are not interchangeable between the two.", "这里填国际站(modelscope.ai)的账号:请粘贴国际站的令牌。国内站(modelscope.cn)是另一家 provider、另一套账号,两边的令牌不通用。": "This is for the international site (modelscope.ai) account: paste the international site's token. The China site (modelscope.cn) is another provider with its own account; tokens are not interchangeable between the two.", "这里填国际站(monkeycode-ai.net)的账号:请粘贴国际站的 session。国内站(monkeycode-ai.com)是另一家 provider、另一套账号,两边的凭证不通用。": "This is for the international site (monkeycode-ai.net) account: paste the international site's session. The China site (monkeycode-ai.com) is another provider with its own account; credentials are not interchangeable between the two.", "选择 CatPaw 客户端的登录态文件 auth.json(Windows:C:\\Users\\<你的用户名>\\.meituan-catpaw\\auth.json;macOS / Linux:~/.meituan-catpaw/auth.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端。": "Select the CatPaw client's login-state file auth.json (Windows: C:\\Users\\\\.meituan-catpaw\\auth.json; macOS / Linux: ~/.meituan-catpaw/auth.json). After import the credentials live on the gateway and can be forwarded independently — no longer dependent on this machine's client.", "选择 Cline 客户端的登录态文件 providers.json(Windows:C:\\Users\\<你的用户名>\\.cline\\data\\settings\\providers.json;macOS / Linux:~/.cline/data/settings/providers.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端;这一条归入 {label}。": "Select the Cline client's login-state file providers.json (Windows: C:\\Users\\\\.cline\\data\\settings\\providers.json; macOS / Linux: ~/.cline/data/settings/providers.json). After import the credentials live on the gateway and can be forwarded independently — no longer dependent on this machine's client; this record goes into {label}.", "选择 KukuAI 客户端的 Cookies 文件(%APPDATA%\\baidugenflowpro\\Network\\Cookies):它是**二进制** SQLite 数据库(无扩展名,不是 JSON)。导入时读的是你选中文件的副本、不和运行中的客户端抢占用,因此**无需先关闭客户端**。导入后凭证直接落在网关、可独立转发。": "Select the KukuAI client's Cookies file (%APPDATA%\\baidugenflowpro\\Network\\Cookies): it is a **binary** SQLite database (no extension, not JSON). The import reads a copy of the file you selected and does not compete with the running client for the lock, so **you do not need to close the client first**. After import the credentials live on the gateway and can be forwarded independently.", "选择凭证文件导入": "Import from credential file", "选择官方客户端的登录态凭证文件(workbuddy-desktop.info / workbuddy-desktop-ai.info)或 wb2api 导出的账号 JSON(嵌套 / 扁平形均可)。": "Select the official client's session credential file (workbuddy-desktop.info / workbuddy-desktop-ai.info) or an account JSON exported by wb2api (nested or flat).", "选择小浣熊客户端的登录态文件 auth.json(Windows:C:\\Users\\<你的用户名>\\.box-agent\\config\\auth.json;macOS / Linux:~/.box-agent/config/auth.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端。": "Select the Raccoon client's login-state file auth.json (Windows: C:\\Users\\\\.box-agent\\config\\auth.json; macOS / Linux: ~/.box-agent/config/auth.json). After import the credentials live on the gateway and can be forwarded independently — no longer dependent on this machine's client.", "选择提供商": "Select provider", "选择的文件不是合法 JSON": "The selected file is not valid JSON", "选择要添加账号的提供商": "Select the provider to add an account for", "重新扫描": "Rescan", "鉴权": "Authentication", "阿里云 Token Plan 套餐(国际站)": "Alibaba Cloud Token Plan (International site)", "阿里云百炼 Coding 套餐(国内站)": "Alibaba Cloud Model Studio Coding plan (China site)", "阿里云百炼 Coding 套餐(国际站)": "Alibaba Cloud Model Studio Coding plan (International site)", "阿里云百炼模型服务(国际站,OpenAI 兼容模式)": "Alibaba Cloud Model Studio model service (International site, OpenAI-compatible mode)", "需要图形验证码:登录窗口已弹出,请填写后继续": "Captcha required: the sign-in window has opened; fill it in to continue", "预置 API": "Preset API", "领取 CodeArts 每日福利": "Claim CodeArts daily welfare", "领取失败:{message}": "Claim failed: {message}", "领取并让官方确认": "Claim and await confirmation", "风控验证配置不完整,请稍后重试": "Risk-control verification config is incomplete; try again later", "验证码": "Verification code", "验证码已发送。收到后填入下方并点「登录并添加」": "Code sent. Enter it below and click \"Sign in and add\"", "验证码已发送,请查看手机短信": "Code sent; check your SMS", "验证码已发送,请查看手机短信。填入下方并点「登录并添加」即完成登录": "Code sent; check your SMS. Enter it below and click \"Sign in and add\" to finish signing in", "验证码已发送,请查看短信": "Code sent; check your messages", "验证码校验失败,请重试": "Code verification failed; try again", "验证码校验超时,请重试": "Code verification timed out; try again", "验证码组件不可用,请重试": "Verification component unavailable; try again", "验证码组件初始化超时,请重试": "Verification component initialization timed out; try again", "验证码组件加载失败,请检查网络后重试": "Verification component failed to load; check your network and try again", "验证码组件加载异常,请重试": "Verification component encountered a loading error; try again", "验证码组件加载超时,请检查网络后重试": "Verification component timed out while loading; check your network and try again", "验证码组件未加载,请重启应用后重试": "Verification component not loaded; restart the app and try again", "(免费额度池,模型名带 cline-free/ 前缀)。": " (free quota pool; model names carry the cline-free/ prefix).", "(其中 {n} 把恢复为不限制)": " ({n} of which are now unrestricted)", "(必填)": " (Required)", "(有效期 {window})": "(valid {window})", "(订阅池,模型名带 cline-pass/ 前缀,需要账号有对应订阅)。": " (subscription pool; model names carry the cline-pass/ prefix and the account needs the matching subscription).", ",下一次最快 {minutes} 分钟后": ", earliest next attempt in {minutes} min", ",并从 {n} 把 Key 的可用提供商里移除": ", and removed it from the allowed providers of {n} keys" });
diff --git a/desktop-tauri/ui/i18n/en/checkin.js b/desktop-tauri/ui/i18n/en/checkin.js
index 0584ca2d..ed30a8bd 100644
--- a/desktop-tauri/ui/i18n/en/checkin.js
+++ b/desktop-tauri/ui/i18n/en/checkin.js
@@ -1,2 +1,2 @@
/* Agent2API 词典构建产物:en/checkin —— 由 desktop-tauri/i18n/build.mjs 生成,请勿手改;源头是 i18n-src/*.json */
-window.wbI18nDict = window.wbI18nDict || {}; Object.assign(window.wbI18nDict, { " · ": " · ", "SOLO 的 checkin_credits 领取 · 按自然日 0 点刷新": "SOLO checkin_credits claims · reset at midnight (calendar day)", "UMID 组件安装失败:{error}": "UMID component installation failed: {error}", "WorkBuddy 国内版 · 查询任务树后一键点亮 / 领奖 · 含开学季与猫猫旅行 · 点击行展开明细": "WorkBuddy CN · Query the task tree, then light up / claim in one click · includes the school-season event and cat travel · click a row for details", "WorkBuddy 国际版保活模型,按顺序回退": "WorkBuddy International keep-alive models, tried in order", "WorkBuddy 国际版日活任务的免费模型 · 全局一份,与条目无关": "Free models for WorkBuddy International daily activity · one global setting, unrelated to schedules", "{date}(每天 {time})": "{date} (daily at {time})", "{label} ×{count}({reason})": "{label} ×{count} ({reason})", "{n} 项可完成": "{n} to complete", "{n} 项待领": "{n} to claim", "{total} 账号 · {done} 已签": "{done} of {total} checked in", "{total} 项任务 · {pending} 项可完成": "{total} tasks · {pending} to complete", "✅ UMID 组件已安装,下轮签到即可领取国际版积分": "✅ UMID component installed — the next check-in can claim International points", "✅ {message}": "✅ {message}", "✅ 定时签到已开启": "✅ Scheduled check-in enabled", "✅ 开学季任务执行完成": "✅ School-season tasks completed", "✅ 成长任务执行完成:积分 +{credit} 能量 +{energy}": "✅ Growth tasks completed: credits +{credit}, energy +{energy}", "✅ 新手福利领取完成,累计 {n} 积分": "✅ Starter rewards claimed, {n} points earned in total", "✅ 签到完成:{succeeded}/{total} 个账号成功领取{active}": "✅ Check-in complete: {succeeded}/{total} accounts claimed successfully{active}", "「保活模型链」是 WorkBuddy 国际版领日活时用来保活的免费模型,按顺序逐个尝试、 第一个成功即止;清空提交恢复缺省({defaults})。 当天去重 + 幂等领取:重复执行只会拿到「已领取」,不会重复加分。": "The \"keep-alive model chain\" is the free models used to keep WorkBuddy International accounts active during daily activity runs — tried in order, stops at the first success; submit empty to restore the default ({defaults}). Same-day dedup + idempotent claiming: repeat runs only return \"already claimed\" and never add points twice.", "「保活模型链」是 WorkBuddy 国际版领日活时用来保活的免费模型,按顺序逐个尝试、 第一个成功即止;清空清单并保存 = 恢复缺省链(当前缺省:{defaults})。 当天去重 + 幂等领取:重复执行只会拿到「已领取」,不会重复加分。": "The \"keep-alive model chain\" is the free models used to keep WorkBuddy International accounts active during daily activity runs — tried in order, stops at the first success; clearing the list and saving restores the default chain (current default: {defaults}). Same-day dedup + idempotent claiming: repeat runs only return \"already claimed\" and never add points twice.", "「免费领积分」的每日任务 · 逐个领取": "\"Free points\" daily tasks · claimed one by one", "一次性福利 · 签到后自动查询并领取,领完记在本机不再查上游 · 点击行展开任务清单": "One-time rewards · queried and claimed automatically after check-in; once claimed they are recorded locally and no longer queried upstream · click a row to expand the task list", "一次领当天全部奖励(每日签到 + 新人礼) · 幂等由上游保证": "Claims all of the day’s rewards in one action (daily check-in + newcomer gift) · idempotency guaranteed by the upstream", "一键安装组件": "Install component", "一键完成": "Complete all", "一键领取({n})": "Claim all ({n})", "上次执行:{line}": "Last run: {line}", "上次签到时间": "Last check-in", "上次领取 {time} · 领取需通过滑块验证码": "Last claimed {time} · claim requires passing a slider CAPTCHA", "下次 {date}": "Next {date}", "下次 {date} · 点此管理条目": "Next {date} · click to manage schedules", "不参与每日签到:{list}。CodeArts 的一次性奖励在下方「新手福利」,它与 ZCode 的每日/套餐福利领取见「活动福利」。": "Not in daily check-in: {list}. CodeArts one-time rewards are under \"Starter rewards\" below; its and ZCode's daily/plan benefits are claimed under \"Activity rewards\".", "不参与每日签到:{list}。CodeArts 的一次性奖励在下方「新手福利」,它的每日福利就在上方「每日签到」里;ZCode 的套餐领取见「活动福利」。": "Not in daily check-in: {list}. CodeArts one-time rewards are under \"Starter rewards\" below, and its daily welfare is right above under \"Daily check-in\"; ZCode plan claims are under \"Activity rewards\".", "与国内版同一套任务接口 · 站点不同": "Same task API as the China edition · different site", "今天已领 {n} 份": "Claimed {n} today", "今天未领": "Not claimed today", "今天(北京时间 {day})已领取 · 官方确认到账 {n} 项 · 明天可再领": "Claimed today (Beijing time {day}) · {n} items confirmed received · can claim again tomorrow", "今日已执行": "Ran today", "今日已派出": "Sent out today", "今日已领取": "Claimed today", "今日签到": "Today", "今日签到进度": "Today's check-in progress", "从清单里移除": "Remove from the list", "保活": "Keep-alive", "保活 {n}": "{n} kept alive", "保活+领取": "Keep-alive + claim", "保活中…": "Keeping alive…", "保活模型链": "Keep-alive model chain", "全选": "Select all", "全部 {n} 家": "All {n} providers", "全部完成": "All done", "全部查询": "Query all", "全部结果": "All outcomes", "全部账号均可签到": "All accounts can check in", "全部领取": "All claimed", "关着:所有条目都不执行": "Off: no schedule runs", "删除失败:{error}": "Delete failed: {error}", "删除定时条目": "Delete schedule", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活并在网页通道建会话点亮日活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;CodeArts 领当日的运营福利(领取 → 确认 → 回读核实,自动执行受每天 6 次 / 间隔 10 分钟的写请求限流);OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "At the scheduled time, automatically checks in the enabled accounts of the ticked providers (WorkBuddy CN uses the daily check-in API; the international version uses the daily-activity quest: probe the event, claim the daily-active reward, then keep alive with the free model and open a session over the web channel to light up the daily activity; Raccoon uses the desktop daily-points flow; AutoClaw uses the official client's daily check-in task; Qoder CN claims via the event, and accounts without an assigned event get a neutral notice; Qoder international needs a device risk-control identity (generated by the UMID component of the local Qoder client / qodercli) before the \"Daily 100 Credits\" event is even visible — without the component you get a clear explanation instead of an error; Trae claims SOLO's daily check-in points (reset at midnight), and when the upstream has no event for the account or the credentials lack a device ID you get \"not claimed + reason\" instead of an error; Loomy claims the first-login points once a day per account; KukuAI claims the \"Free points\" daily task; CodeArts claims the day's operational perks (claim → confirm → verify by re-reading; automatic runs are rate-limited to 6 write requests a day, 10 minutes apart); OfficeAce claims all of the day's rewards in one go (daily check-in + newcomer gift)). If the machine was off at the scheduled time, a catch-up check-in runs at boot, so nothing is missed. Every provider's check-in API is idempotent — running it again never claims twice.", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;CodeArts 领当日的运营福利(领取 → 确认 → 回读核实,自动执行受每天 6 次 / 间隔 10 分钟的写请求限流);OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "At the scheduled time, auto check-in runs for the available accounts of the selected providers (WorkBuddy China uses the daily check-in API; International uses daily activity tasks — detect the campaign, claim the daily-activity reward, then keep the account alive with free models; Raccoon uses the desktop daily points flow; AutoClaw uses the official client's daily check-in task; Qoder China uses campaign claims, and accounts with no campaign assigned get a neutral notice; Qoder International needs a device risk-control identity first (generated by the UMID component of the local Qoder client / qodercli) to see the \"Daily 100 Credits\" campaign, and a missing component yields a clear explanation instead of an error; Trae claims SOLO's daily check-in points (reset at midnight by calendar day), and when the upstream has no campaign for the account or the credential has no device ID the result is \"not claimed + the specific reason\" instead of an error; Loomy awards first-login points once a day per account; KukuAI claims the \"Free points\" daily tasks; CodeArts claims that day's campaign welfare (claim → confirm → read back to verify; automatic runs are limited to 6 write attempts per day with a 10-minute gap); OfficeAce claims all of that day's rewards in one action (daily check-in + newcomer gift)). If the machine was off at the scheduled time, the missed run is made up automatically after it starts — nothing is skipped just because the machine was off. Every provider's check-in API is idempotent, so running it again never claims twice.", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "At the scheduled time, auto check-in runs for the available accounts of the selected providers (WorkBuddy China uses the daily check-in API; International uses daily activity tasks — detect the campaign, claim the daily-activity reward, then keep the account alive with free models; Raccoon uses the desktop daily points flow; AutoClaw uses the official client's daily check-in task; Qoder China uses campaign claims, and accounts with no campaign assigned get a neutral notice; Qoder International needs a device risk-control identity first (generated by the UMID component of the local Qoder client / qodercli) to see the \"Daily 100 Credits\" campaign, and a missing component yields a clear explanation instead of an error; Trae claims SOLO's daily check-in points (reset at midnight by calendar day), and when the upstream has no campaign for the account or the credential has no device ID the result is \"not claimed + the specific reason\" instead of an error; Loomy awards first-login points once a day per account; KukuAI claims the \"Free points\" daily tasks; OfficeAce claims all of that day's rewards in one action (daily check-in + newcomer gift)). If the machine was off at the scheduled time, the missed run is made up automatically after it starts — nothing is skipped just because the machine was off. Every provider's check-in API is idempotent, so running it again never claims twice.", "到点时逐个签到,已勾 {n} / {total} 家": "Checked {n} of {total} — each is checked in at the scheduled time", "北京时间 · 错过时点开机后会自动补签": "Beijing time · missed runs are made up automatically after startup", "去领取": "Claim now", "另有 {n} 个账号不参与每日签到": "{n} more accounts are not part of daily check-in", "只领取已完成任务的奖励(幂等,重复点不会重复入账)": "Claim rewards of completed tasks only (idempotent; repeated clicks will not double-credit)", "可完成": "Can complete", "可派出": "Can send out", "可选 · 缺省显示时刻": "Optional · defaults to the time", "可领奖": "Can claim", "后端未返回定时签到数据": "Backend returned no schedule data", "后端未返回签到中心数据": "The backend did not return check-in center data", "国际版签到需要 UMID 组件生成设备风控身份(本机未检测到)。": "International check-in requires the UMID component to generate a device risk-control identity (not detected on this machine).", "在途": "Traveling", "填入缺省链": "Fill in default chain", "填好时刻与签到范围后点「保存」;名称可以留空(界面显示时刻)": "Pick a time and the providers, then click Save; the name is optional (the time is shown when empty)", "失败 {n}": "{n} failed", "套餐明细": "Plan details", "安装 Qoder 客户端或 qodercli 后即可(无需重启网关)。": "Install the Qoder client or qodercli to enable it (no need to restart the gateway).", "安装中…": "Installing…", "官方客户端的每日签到任务": "Official client's daily check-in task", "定时签到": "Scheduled check-in", "定时签到已关闭": "Scheduled check-in disabled", "尚未查询": "Not queried yet", "尚未查询任务状态": "Task status not queried yet", "巡检一次": "Run one round", "已保存:{label}": "Saved: {label}", "已保存:保活模型链": "Saved: Keep-alive model chain", "已保存:定时条目": "Saved: schedule", "已删除定时条目": "Schedule deleted", "已完成活跃上报(连登已点亮),但活动未开启(本次没有可领的奖励)": "Activity reported (streak lit up), but the campaign is not active (nothing to claim this time)", "已抽 {n} 次": "Drew {n} times", "已有结果 {checked} / 共 {total} 个账号": "Results for {checked} / {total} accounts", "已签": "Checked in", "已领 {claimed}/{total} · 累计 {earned} 积分": "Claimed {claimed}/{total} · {earned} points earned", "已领养": "Adopted", "已领取": "Claimed", "带设备风控身份领取「每日 100 Credits」 · 需要 UMID 组件": "Claim \"Daily 100 Credits\" with a device risk-control identity · requires the UMID component", "开学季执行失败:{error}": "School-season run failed: {error}", "开学季执行完成:{message}": "School-season run completed: {message}", "开学季活动": "School-season event", "开着:启用的条目按各自时刻执行": "On: enabled schedules run at their own times", "待签": "Not checked in", "待领新手福利": "Starter rewards to claim", "总开关": "Master switch", "总开关已关闭 · 在「定时签到」页打开": "Master switch is off · enable it on the \"Scheduled check-in\" tab", "成功 {n}": "{n} succeeded", "成长任务": "Growth tasks", "成长任务完成({done} 项成功、{failed} 项失败),积分 +{credit} 能量 +{energy}": "Growth tasks finished ({done} succeeded, {failed} failed): credits +{credit}, energy +{energy}", "成长任务执行失败:{error}": "Growth task run failed: {error}", "执行失败:{error}": "Run failed: {error}", "执行并抽奖": "Run & draw", "执行开学季任务并抽空抽奖机会(分享 / 对话 / 专家事件)": "Run school-season tasks and spend all draw chances (share / chat / expert events)", "把缺省链填进清单,再点「保存」生效": "Puts the default chain into the list; click Save to apply", "抽奖机会 {n} 次": "{n} draw chances", "按住拖动调整顺序": "Press and drag to reorder", "按住拖动,调整这个模型在链里的顺序": "Press and drag to change this model's position in the chain", "按序逐个尝试,共 {n} 个": "{n} models, tried in order", "按结果筛选": "Filter by outcome", "探测 + 领取 + 保活 · 与定时签到同一套组合": "Detect + claim + keep-alive · same combo as scheduled check-in", "探测活动并领取日活奖励 · 不做保活": "Detect the campaign and claim the daily-activity reward · no keep-alive", "接单 + 点亮 + 领奖(只处理已实测沉淀的任务)": "Accept + light up + claim (only tasks with verified recipes)", "搜账号 / 收益 / 错误 / 触发原因": "Search account / gain / error / trigger reason", "收起新建": "Close new entry", "新建定时条目": "New scheduled entry", "新手福利": "Starter rewards", "新手福利有 {n} 项领取失败,可重试": "{n} starter reward(s) failed to claim — you can retry", "无": "None", "无独立签到接口 · 每天替账号打一次首次登录积分": "No dedicated check-in API · awards first-login points once a day per account", "无账号": "No accounts", "暂不可领": "Not claimable yet", "暂不支持": "Not supported yet", "暂无启用的条目 · 点此添加": "No enabled schedules · click to add one", "有未保存的改动": "Unsaved changes", "未勾选提供商": "No provider selected", "未开启": "Off", "未解锁": "Locked", "未领养(领养需先完成当日对话量)": "Not adopted (adoption requires the daily chat quota first)", "未领取": "Not claimed", "本地台账里今天还没领过;活动期内每天发一份新套餐": "No claim recorded locally for today yet; a new plan is issued every day during the event", "本地台账里今天(北京时间)领过的套餐:{plans}": "Plans claimed today (Beijing time) according to the local record: {plans}", "条启用": "enabled", "查询于 {time}": "Queried at {time}", "查询任务": "Query tasks", "查询任务树并一键点亮 / 领奖(含开学季与猫猫旅行)": "Query the task tree, then light up / claim in one click (includes school-season and cat travel)", "查询失败:{error}": "Query failed: {error}", "桌面端每日积分链路": "Desktop daily points flow", "正在读取定时签到数据…": "Loading schedule data…", "正在读取签到数据…": "Loading check-in data…", "每天 {time}": "Daily at {time}", "每天 {time} · {scope}": "Daily {time} · {scope}", "每天时刻": "Daily time", "每执行一次签到 · 每个账号一条明细 · 结果与收益以后端落账为准": "One row per account per check-in run · outcomes and gains as recorded by the backend", "每日活跃任务 · 网页会话保活点亮日活,领取才加积分 · 两者可分开执行": "Daily activity tasks · a web-app conversation lights up the daily activity, only claims add points · the two can run separately", "每日登录积分 · 顺带领取会员活动 · 访客账号无积分体系(跳过)": "Daily sign-in points · claims member activities along the way · guest accounts have no points system (skipped)", "每日福利 · 领取 → 确认 → 回读核实 · 按北京时间自然日重置": "Daily welfare · claim → confirm → read back to verify · resets on the Beijing calendar day", "每日签到": "Daily check-in", "每条条目各有时刻与范围 · 各自当天去重 · 错过时点开机自动补签": "Each schedule has its own time and scope · same-day dedup per entry · missed runs are made up after startup", "每账号一条明细 · 点此查看「签到记录」": "One row per account · open \"Check-in records\"", "没有可领套餐的账号(ZCode 未添加)。": "No accounts with claimable plans (ZCode not added).", "没有可领福利的账号(CodeArts / ZCode 未添加)。": "No accounts with claimable rewards (CodeArts / ZCode not added).", "没有支持成长任务的账号(需要 WorkBuddy 国内版)。": "No accounts support growth tasks (WorkBuddy CN required).", "没有支持新手福利的账号": "No accounts support starter rewards", "没有支持新手福利的账号 —— 目前有 Loomy、小浣熊、CodeArts 三家。": "No accounts support starter rewards — currently Loomy, Raccoon and CodeArts.", "没有符合筛选条件的签到记录": "No check-in records match the current filters", "没有需要执行的任务": "Nothing to run", "活动福利": "Event rewards", "活动(campaign)领取 · 每天 10:00 刷新": "Campaign claims · refreshed daily at 10:00", "活跃上报与保活均未成功,且活动未开启": "Both the activity report and keep-alive failed, and the campaign is not active", "活跃上报完成,但保活未成功且活动未开启": "Activity reported, but keep-alive failed and the campaign is not active", "活跃上报完成,但活动未开启": "Activity reported, but the campaign is not active", "活跃上报成功": "Activity reported", "活跃保活失败": "Keep-alive failed", "活跃保活完成": "Keep-alive complete", "活跃保活完成,但活动未开启": "Keep-alive complete, but the campaign is not active", "活跃保活完成,但活跃上报失败且活动未开启": "Keep-alive complete, but the activity report failed and the campaign is not active", "添加条目": "Add schedule", "添加模型": "Add model", "清单为空 —— 保存后恢复缺省链": "The list is empty — saving restores the default chain", "清单里已经有「{name}」": "The list already contains \"{name}\"", "清空失败:{error}": "Clear failed: {error}", "清空签到记录": "Clear check-in records", "点「套餐明细」看领到了哪几份、什么时候生效;活动期内每天可再领": "Click \"Plan details\" to see which plans you got and when they take effect; you can claim again every day during the event", "点击行展开账号明细 · 单账号签到不受范围限制": "Click a row to expand account details · single-account check-in is not limited by scope", "独立链路 · 只提供手动入口 · 不进自动签到": "Separate flow · manual entry only · not part of auto check-in", "猫猫旅行": "Cat travel", "猫猫旅行失败:{error}": "Cat travel failed: {error}", "猫猫旅行失败:{message}": "Cat travel failed: {message}", "猫猫旅行:{message}": "Cat travel: {message}", "用免费模型与网页会话维持账号活跃 · 不领取奖励": "Keep the account active with free models and a web-app conversation · no rewards claimed", "确定删除「{name}」?删除后到点不再执行。": "Delete \"{name}\"? It will no longer run at its scheduled time.", "确定清空全部签到记录?清空后无法恢复。": "Clear ALL check-in records? This cannot be undone.", "确定清空当前筛选出的签到记录?清空后无法恢复。": "Clear the filtered check-in records? This cannot be undone.", "移除 {name}": "Remove {name}", "立即全部签到": "Check in all now", "签到": "Check in", "签到中…": "Checking in…", "签到中心分区": "Check-in center sections", "签到失败:{error}": "Check-in failed: {error}", "签到完成:{succeeded}/{total} 成功{active},{failed} 个失败": "Check-in complete: {succeeded}/{total} succeeded{active}, {failed} failed", "签到成功": "Check-in succeeded", "签到提供商": "Check-in providers", "签到范围": "Check-in scope", "签到触发时刻": "Check-in trigger time", "签到记录": "Check-in records", "签到记录时间范围": "Check-in records time range", "签到记录表": "Check-in records table", "累计签到记录": "Total check-in records", "结算于 {time}": "Settled at {time}", "能量 {n}": "Energy {n}", "腾讯每日签到接口 · 仅国内版": "Tencent daily check-in API · China edition only", "至少勾一家才能保存(不勾等于这条条目不签到)": "Select at least one provider to save (an empty scope means this entry checks in nothing)", "读取定时签到数据失败:{error}": "Failed to load schedule data: {error}", "读取签到数据失败:{error}": "Failed to load check-in data: {error}", "读取签到记录失败:{error}": "Failed to load check-in records: {error}", "跳过 {n}": "{n} skipped", "运营活动交付(领取 → 确认 → 回读核实)· 领的是套餐赠送积分": "Campaign delivery (claim → confirm → read back to verify) · these are plan bonus points", "还没执行过": "Never run yet", "还没有定时条目 —— 点「添加条目」建一条,或到「签到中心」手动签到。": "No schedules yet — click \"Add schedule\" to create one, or check in manually on the \"Check-in center\" tab.", "还没有签到记录 —— 手动签到或等定时条目执行后,明细会出现在这里。": "No check-in records yet — details appear here after a manual check-in or a scheduled run.", "连登 {n} 天": "{n}-day streak", "部分": "Partial", "重签": "Check in again", "重试": "Retry", "限时体验套餐 · 领取需滑块验证码 · 逐份查看与领取": "Limited-time trial plan · claim requires a slider CAPTCHA · view and claim one by one", "限时体验套餐(start-plan),活动期内每天一份 · 领取需滑块验证码": "Limited-time trial plan (start-plan), one per day during the campaign · claim requires a slider CAPTCHA", "需真实操作": "Requires real action", "非活动期": "Event inactive", "项": "items", "领取": "Claim", "领取中": "Claiming", "领取中…": "Claiming…", "领取失败": "Claim failed", "领取失败:{error}": "Claim failed: {error}", "(共 {n} 个账号)": " ({n} accounts total)", "(能量 / 连登读数本次未取到)": "(Energy / streak readings unavailable this time)", ",日活保活 {n} 个": ", {n} kept alive" });
+window.wbI18nDict = window.wbI18nDict || {}; Object.assign(window.wbI18nDict, { " · ": " · ", "SOLO 的 checkin_credits 领取 · 按自然日 0 点刷新": "SOLO checkin_credits claims · reset at midnight (calendar day)", "UMID 组件安装失败:{error}": "UMID component installation failed: {error}", "WorkBuddy 国内版 · 查询任务树后一键点亮 / 领奖 · 含开学季与猫猫旅行 · 点击行展开明细": "WorkBuddy CN · Query the task tree, then light up / claim in one click · includes the school-season event and cat travel · click a row for details", "WorkBuddy 国际版保活模型,按顺序回退": "WorkBuddy International keep-alive models, tried in order", "WorkBuddy 国际版日活任务的免费模型 · 全局一份,与条目无关": "Free models for WorkBuddy International daily activity · one global setting, unrelated to schedules", "{date}(每天 {time})": "{date} (daily at {time})", "{label} ×{count}({reason})": "{label} ×{count} ({reason})", "{n} 项可完成": "{n} to complete", "{n} 项待领": "{n} to claim", "{total} 账号 · {done} 已签": "{done} of {total} checked in", "{total} 项任务 · {pending} 项可完成": "{total} tasks · {pending} to complete", "✅ UMID 组件已安装,下轮签到即可领取国际版积分": "✅ UMID component installed — the next check-in can claim International points", "✅ {message}": "✅ {message}", "✅ 定时签到已开启": "✅ Scheduled check-in enabled", "✅ 开学季任务执行完成": "✅ School-season tasks completed", "✅ 成长任务执行完成:积分 +{credit} 能量 +{energy}": "✅ Growth tasks completed: credits +{credit}, energy +{energy}", "✅ 新手福利领取完成,累计 {n} 积分": "✅ Starter rewards claimed, {n} points earned in total", "✅ 签到完成:{succeeded}/{total} 个账号成功领取{active}": "✅ Check-in complete: {succeeded}/{total} accounts claimed successfully{active}", "「保活模型链」是 WorkBuddy 国际版领日活时用来保活的免费模型,按顺序逐个尝试、 第一个成功即止;清空提交恢复缺省({defaults})。 当天去重 + 幂等领取:重复执行只会拿到「已领取」,不会重复加分。": "The \"keep-alive model chain\" is the free models used to keep WorkBuddy International accounts active during daily activity runs — tried in order, stops at the first success; submit empty to restore the default ({defaults}). Same-day dedup + idempotent claiming: repeat runs only return \"already claimed\" and never add points twice.", "「保活模型链」是 WorkBuddy 国际版领日活时用来保活的免费模型,按顺序逐个尝试、 第一个成功即止;清空清单并保存 = 恢复缺省链(当前缺省:{defaults})。 当天去重 + 幂等领取:重复执行只会拿到「已领取」,不会重复加分。": "The \"keep-alive model chain\" is the free models used to keep WorkBuddy International accounts active during daily activity runs — tried in order, stops at the first success; clearing the list and saving restores the default chain (current default: {defaults}). Same-day dedup + idempotent claiming: repeat runs only return \"already claimed\" and never add points twice.", "「免费领积分」的每日任务 · 逐个领取": "\"Free points\" daily tasks · claimed one by one", "一次性福利 · 签到后自动查询并领取,领完记在本机不再查上游 · 点击行展开任务清单": "One-time rewards · queried and claimed automatically after check-in; once claimed they are recorded locally and no longer queried upstream · click a row to expand the task list", "一次领当天全部奖励(每日签到 + 新人礼) · 幂等由上游保证": "Claims all of the day’s rewards in one action (daily check-in + newcomer gift) · idempotency guaranteed by the upstream", "一键安装组件": "Install component", "一键完成": "Complete all", "一键领取({n})": "Claim all ({n})", "上次执行:{line}": "Last run: {line}", "上次签到时间": "Last check-in", "上次领取 {time} · 领取需通过滑块验证码": "Last claimed {time} · claim requires passing a slider CAPTCHA", "下次 {date}": "Next {date}", "下次 {date} · 点此管理条目": "Next {date} · click to manage schedules", "不参与每日签到:{list}。CodeArts 的一次性奖励在下方「新手福利」,它与 ZCode 的每日/套餐福利领取见「活动福利」。": "Not in daily check-in: {list}. CodeArts one-time rewards are under \"Starter rewards\" below; its and ZCode's daily/plan benefits are claimed under \"Activity rewards\".", "不参与每日签到:{list}。CodeArts 的一次性奖励在下方「新手福利」,它的每日福利就在上方「每日签到」里;ZCode 的套餐领取见「活动福利」。": "Not in daily check-in: {list}. CodeArts one-time rewards are under \"Starter rewards\" below, and its daily welfare is right above under \"Daily check-in\"; ZCode plan claims are under \"Activity rewards\".", "与国内版同一套任务接口 · 站点不同": "Same task API as the China edition · different site", "与国内版同一套链路 · 站点不同、令牌不通用": "Same flow as the China edition · different site, tokens not interchangeable", "今天已领 {n} 份": "Claimed {n} today", "今天未领": "Not claimed today", "今天(北京时间 {day})已领取 · 官方确认到账 {n} 项 · 明天可再领": "Claimed today (Beijing time {day}) · {n} items confirmed received · can claim again tomorrow", "今日已执行": "Ran today", "今日已派出": "Sent out today", "今日已领取": "Claimed today", "今日签到": "Today", "今日签到进度": "Today's check-in progress", "从清单里移除": "Remove from the list", "保活": "Keep-alive", "保活 {n}": "{n} kept alive", "保活+领取": "Keep-alive + claim", "保活中…": "Keeping alive…", "保活模型链": "Keep-alive model chain", "全选": "Select all", "全部 {n} 家": "All {n} providers", "全部完成": "All done", "全部查询": "Query all", "全部结果": "All outcomes", "全部账号均可签到": "All accounts can check in", "全部领取": "All claimed", "关着:开机后等到窗口起点再签,随机窗口当天生效": "Off: wait for the window start after startup, so the random window applies today", "关着:所有条目都不执行": "Off: no schedule runs", "分钟 · 窗口内逐个账号随机执行,0 = 到点立即执行": "minutes · accounts run at random moments inside the window; 0 = run immediately at the scheduled time", "删除失败:{error}": "Delete failed: {error}", "删除定时条目": "Delete schedule", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活并在网页通道建会话点亮日活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;CodeArts 领当日的运营福利(领取 → 确认 → 回读核实,自动执行受每天 6 次 / 间隔 10 分钟的写请求限流);OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。设了「随机前后 N 分钟」时,本轮账号在各自窗口内分散执行(窗口夹在当天 0 点到 23:59 之间),不再全部挤在同一分钟;窗口已过则立即全部执行。错过时点开机后会自动补签,不会因为当时没开机而漏掉(可在「启动补签」关掉,改为等到窗口起点)。各家签到接口都是幂等的,重复执行不会重复领取。": "Signs in the available accounts of the selected providers when due (WorkBuddy CN uses its daily check-in API; WorkBuddy Intl uses the daily activity task: probe activities, claim the daily reward, then keep a free model warm and open a web session to light up the streak; Raccoon uses its desktop daily points chain; AutoClaw uses the official client's daily sign-in task; Qoder CN claims campaign rewards and shows a neutral notice for accounts without campaigns; Qoder Intl needs a device risk identity (generated by the UMID component of the local Qoder client / qodercli) to see the 'daily 100 Credits' campaign and shows a clear explanation instead of an error when the component is missing; Trae claims the SOLO daily check-in credits (reset at local midnight) and reports 'not claimed + reason' instead of an error when the upstream has no campaign for the account or the credential has no device id; Loomy calls its first-login points endpoint once a day; KukuAI claims the 'free points' daily tasks; CodeArts claims the daily ops welfare (claim → confirm → read back, with automatic runs limited to 6 writes per day and 10 minutes apart); OfficeAce claims all of the day's rewards (daily check-in + newcomer gift) in one call). With 'random offset N minutes', the accounts of a round run spread across their own window (clamped to 0:00-23:59 of the same day) instead of all at the same minute; if the window has already passed they all run immediately. Missed runs are caught up after startup so nothing is lost when the machine was off (turn off 'Startup catch-up' to wait for the window start instead). Every provider's check-in API is idempotent, so repeated runs never double-claim.", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;CodeArts 领当日的运营福利(领取 → 确认 → 回读核实,自动执行受每天 6 次 / 间隔 10 分钟的写请求限流);OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "At the scheduled time, auto check-in runs for the available accounts of the selected providers (WorkBuddy China uses the daily check-in API; International uses daily activity tasks — detect the campaign, claim the daily-activity reward, then keep the account alive with free models; Raccoon uses the desktop daily points flow; AutoClaw uses the official client's daily check-in task; Qoder China uses campaign claims, and accounts with no campaign assigned get a neutral notice; Qoder International needs a device risk-control identity first (generated by the UMID component of the local Qoder client / qodercli) to see the \"Daily 100 Credits\" campaign, and a missing component yields a clear explanation instead of an error; Trae claims SOLO's daily check-in points (reset at midnight by calendar day), and when the upstream has no campaign for the account or the credential has no device ID the result is \"not claimed + the specific reason\" instead of an error; Loomy awards first-login points once a day per account; KukuAI claims the \"Free points\" daily tasks; CodeArts claims that day's campaign welfare (claim → confirm → read back to verify; automatic runs are limited to 6 write attempts per day with a 10-minute gap); OfficeAce claims all of that day's rewards in one action (daily check-in + newcomer gift)). If the machine was off at the scheduled time, the missed run is made up automatically after it starts — nothing is skipped just because the machine was off. Every provider's check-in API is idempotent, so running it again never claims twice.", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "At the scheduled time, auto check-in runs for the available accounts of the selected providers (WorkBuddy China uses the daily check-in API; International uses daily activity tasks — detect the campaign, claim the daily-activity reward, then keep the account alive with free models; Raccoon uses the desktop daily points flow; AutoClaw uses the official client's daily check-in task; Qoder China uses campaign claims, and accounts with no campaign assigned get a neutral notice; Qoder International needs a device risk-control identity first (generated by the UMID component of the local Qoder client / qodercli) to see the \"Daily 100 Credits\" campaign, and a missing component yields a clear explanation instead of an error; Trae claims SOLO's daily check-in points (reset at midnight by calendar day), and when the upstream has no campaign for the account or the credential has no device ID the result is \"not claimed + the specific reason\" instead of an error; Loomy awards first-login points once a day per account; KukuAI claims the \"Free points\" daily tasks; OfficeAce claims all of that day's rewards in one action (daily check-in + newcomer gift)). If the machine was off at the scheduled time, the missed run is made up automatically after it starts — nothing is skipped just because the machine was off. Every provider's check-in API is idempotent, so running it again never claims twice.", "到点时逐个签到,已勾 {n} / {total} 家": "Checked {n} of {total} — each is checked in at the scheduled time", "北京时间 · 错过时点开机后会自动补签": "Beijing time · missed runs are made up automatically after startup", "去领取": "Claim now", "另有 {n} 个账号不参与每日签到": "{n} more accounts are not part of daily check-in", "只领取已完成任务的奖励(幂等,重复点不会重复入账)": "Claim rewards of completed tasks only (idempotent; repeated clicks will not double-credit)", "可完成": "Can complete", "可派出": "Can send out", "可选 · 缺省显示时刻": "Optional · defaults to the time", "可领奖": "Can claim", "后端未返回定时签到数据": "Backend returned no schedule data", "后端未返回签到中心数据": "The backend did not return check-in center data", "启动补签": "Startup catch-up", "启动补签已关闭": "Startup catch-up disabled", "启动补签已开启": "Startup catch-up enabled", "国际版签到需要 UMID 组件生成设备风控身份(本机未检测到)。": "International check-in requires the UMID component to generate a device risk-control identity (not detected on this machine).", "在途": "Traveling", "填入缺省链": "Fill in default chain", "填好时刻与签到范围后点「保存」;名称可以留空(界面显示时刻)": "Pick a time and the providers, then click Save; the name is optional (the time is shown when empty)", "失败 {n}": "{n} failed", "套餐明细": "Plan details", "安装 Qoder 客户端或 qodercli 后即可(无需重启网关)。": "Install the Qoder client or qodercli to enable it (no need to restart the gateway).", "安装中…": "Installing…", "官方客户端的每日签到任务": "Official client's daily check-in task", "定时签到": "Scheduled check-in", "定时签到已关闭": "Scheduled check-in disabled", "尚未查询": "Not queried yet", "尚未查询任务状态": "Task status not queried yet", "巡检一次": "Run one round", "已保存:{label}": "Saved: {label}", "已保存:保活模型链": "Saved: Keep-alive model chain", "已保存:定时条目": "Saved: schedule", "已删除定时条目": "Schedule deleted", "已完成活跃上报(连登已点亮),但活动未开启(本次没有可领的奖励)": "Activity reported (streak lit up), but the campaign is not active (nothing to claim this time)", "已抽 {n} 次": "Drew {n} times", "已有结果 {checked} / 共 {total} 个账号": "Results for {checked} / {total} accounts", "已签": "Checked in", "已领 {claimed}/{total} · 累计 {earned} 积分": "Claimed {claimed}/{total} · {earned} points earned", "已领养": "Adopted", "已领取": "Claimed", "带设备风控身份领取「每日 100 Credits」 · 需要 UMID 组件": "Claim \"Daily 100 Credits\" with a device risk-control identity · requires the UMID component", "开学季执行失败:{error}": "School-season run failed: {error}", "开学季执行完成:{message}": "School-season run completed: {message}", "开学季活动": "School-season event", "开着:启用的条目按各自时刻执行": "On: enabled schedules run at their own times", "开着:开机后今天没签过的条目立刻补签,不看随机窗口": "On: schedules not yet run today catch up right after startup, ignoring the random window", "待签": "Not checked in", "待领新手福利": "Starter rewards to claim", "总开关": "Master switch", "总开关已关闭 · 在「定时签到」页打开": "Master switch is off · enable it on the \"Scheduled check-in\" tab", "成功 {n}": "{n} succeeded", "成长任务": "Growth tasks", "成长任务完成({done} 项成功、{failed} 项失败),积分 +{credit} 能量 +{energy}": "Growth tasks finished ({done} succeeded, {failed} failed): credits +{credit}, energy +{energy}", "成长任务执行失败:{error}": "Growth task run failed: {error}", "执行失败:{error}": "Run failed: {error}", "执行并抽奖": "Run & draw", "执行开学季任务并抽空抽奖机会(分享 / 对话 / 专家事件)": "Run school-season tasks and spend all draw chances (share / chat / expert events)", "把缺省链填进清单,再点「保存」生效": "Puts the default chain into the list; click Save to apply", "抽奖机会 {n} 次": "{n} draw chances", "按住拖动调整顺序": "Press and drag to reorder", "按住拖动,调整这个模型在链里的顺序": "Press and drag to change this model's position in the chain", "按序逐个尝试,共 {n} 个": "{n} models, tried in order", "按结果筛选": "Filter by outcome", "探测 + 领取 + 保活 · 与定时签到同一套组合": "Detect + claim + keep-alive · same combo as scheduled check-in", "探测活动并领取日活奖励 · 不做保活": "Detect the campaign and claim the daily-activity reward · no keep-alive", "接单 + 点亮 + 领奖(只处理已实测沉淀的任务)": "Accept + light up + claim (only tasks with verified recipes)", "搜账号 / 收益 / 错误 / 触发原因": "Search account / gain / error / trigger reason", "收起新建": "Close new entry", "新建定时条目": "New scheduled entry", "新手福利": "Starter rewards", "新手福利有 {n} 项领取失败,可重试": "{n} starter reward(s) failed to claim — you can retry", "无": "None", "无独立签到接口 · 每天替账号打一次登录信息(即当日魔粒)": "No dedicated check-in API · hits the login-info endpoint once a day per account (which grants the daily Magicubes)", "无独立签到接口 · 每天替账号打一次首次登录积分": "No dedicated check-in API · awards first-login points once a day per account", "无账号": "No accounts", "暂不可领": "Not claimable yet", "暂不支持": "Not supported yet", "暂无启用的条目 · 点此添加": "No enabled schedules · click to add one", "有未保存的改动": "Unsaved changes", "未勾选提供商": "No provider selected", "未开启": "Off", "未解锁": "Locked", "未领养(领养需先完成当日对话量)": "Not adopted (adoption requires the daily chat quota first)", "未领取": "Not claimed", "本地台账里今天还没领过;活动期内每天发一份新套餐": "No claim recorded locally for today yet; a new plan is issued every day during the event", "本地台账里今天(北京时间)领过的套餐:{plans}": "Plans claimed today (Beijing time) according to the local record: {plans}", "条启用": "enabled", "查询于 {time}": "Queried at {time}", "查询任务": "Query tasks", "查询任务树并一键点亮 / 领奖(含开学季与猫猫旅行)": "Query the task tree, then light up / claim in one click (includes school-season and cat travel)", "查询失败:{error}": "Query failed: {error}", "桌面端每日积分链路": "Desktop daily points flow", "正在读取定时签到数据…": "Loading schedule data…", "正在读取签到数据…": "Loading check-in data…", "每天 {time}": "Daily at {time}", "每天 {time} · {scope}": "Daily {time} · {scope}", "每天 {time} · 随机前后 {n} 分钟 · {scope}": "Daily {time} ± {n} min · {scope}", "每天时刻": "Daily time", "每执行一次签到 · 每个账号一条明细 · 结果与收益以后端落账为准": "One row per account per check-in run · outcomes and gains as recorded by the backend", "每日活跃任务 · 网页会话保活点亮日活,领取才加积分 · 两者可分开执行": "Daily activity tasks · a web-app conversation lights up the daily activity, only claims add points · the two can run separately", "每日登录积分 · 顺带领取会员活动 · 访客账号无积分体系(跳过)": "Daily sign-in points · claims member activities along the way · guest accounts have no points system (skipped)", "每日福利 · 领取 → 确认 → 回读核实 · 按北京时间自然日重置": "Daily welfare · claim → confirm → read back to verify · resets on the Beijing calendar day", "每日签到": "Daily check-in", "每条条目各有时刻与范围 · 各自当天去重 · 错过时点开机自动补签": "Each schedule has its own time and scope · same-day dedup per entry · missed runs are made up after startup", "每账号一条明细 · 点此查看「签到记录」": "One row per account · open \"Check-in records\"", "没有可领套餐的账号(ZCode 未添加)。": "No accounts with claimable plans (ZCode not added).", "没有可领福利的账号(CodeArts / ZCode 未添加)。": "No accounts with claimable rewards (CodeArts / ZCode not added).", "没有支持成长任务的账号(需要 WorkBuddy 国内版)。": "No accounts support growth tasks (WorkBuddy CN required).", "没有支持新手福利的账号": "No accounts support starter rewards", "没有支持新手福利的账号 —— 目前有 Loomy、小浣熊、CodeArts 三家。": "No accounts support starter rewards — currently Loomy, Raccoon and CodeArts.", "没有符合筛选条件的签到记录": "No check-in records match the current filters", "没有需要执行的任务": "Nothing to run", "活动福利": "Event rewards", "活动(campaign)领取 · 每天 10:00 刷新": "Campaign claims · refreshed daily at 10:00", "活跃上报与保活均未成功,且活动未开启": "Both the activity report and keep-alive failed, and the campaign is not active", "活跃上报完成,但保活未成功且活动未开启": "Activity reported, but keep-alive failed and the campaign is not active", "活跃上报完成,但活动未开启": "Activity reported, but the campaign is not active", "活跃上报成功": "Activity reported", "活跃保活失败": "Keep-alive failed", "活跃保活完成": "Keep-alive complete", "活跃保活完成,但活动未开启": "Keep-alive complete, but the campaign is not active", "活跃保活完成,但活跃上报失败且活动未开启": "Keep-alive complete, but the activity report failed and the campaign is not active", "添加条目": "Add schedule", "添加模型": "Add model", "清单为空 —— 保存后恢复缺省链": "The list is empty — saving restores the default chain", "清单里已经有「{name}」": "The list already contains \"{name}\"", "清空失败:{error}": "Clear failed: {error}", "清空签到记录": "Clear check-in records", "点「套餐明细」看领到了哪几份、什么时候生效;活动期内每天可再领": "Click \"Plan details\" to see which plans you got and when they take effect; you can claim again every day during the event", "点击行展开账号明细 · 单账号签到不受范围限制": "Click a row to expand account details · single-account check-in is not limited by scope", "独立链路 · 只提供手动入口 · 不进自动签到": "Separate flow · manual entry only · not part of auto check-in", "猫猫旅行": "Cat travel", "猫猫旅行失败:{error}": "Cat travel failed: {error}", "猫猫旅行失败:{message}": "Cat travel failed: {message}", "猫猫旅行:{message}": "Cat travel: {message}", "用免费模型与网页会话维持账号活跃 · 不领取奖励": "Keep the account active with free models and a web-app conversation · no rewards claimed", "确定删除「{name}」?删除后到点不再执行。": "Delete \"{name}\"? It will no longer run at its scheduled time.", "确定清空全部签到记录?清空后无法恢复。": "Clear ALL check-in records? This cannot be undone.", "确定清空当前筛选出的签到记录?清空后无法恢复。": "Clear the filtered check-in records? This cannot be undone.", "移除 {name}": "Remove {name}", "立即全部签到": "Check in all now", "签到": "Check in", "签到中…": "Checking in…", "签到中心分区": "Check-in center sections", "签到失败:{error}": "Check-in failed: {error}", "签到完成:{succeeded}/{total} 成功{active},{failed} 个失败": "Check-in complete: {succeeded}/{total} succeeded{active}, {failed} failed", "签到成功": "Check-in succeeded", "签到提供商": "Check-in providers", "签到范围": "Check-in scope", "签到触发时刻": "Check-in trigger time", "签到记录": "Check-in records", "签到记录时间范围": "Check-in records time range", "签到记录表": "Check-in records table", "累计签到记录": "Total check-in records", "结算于 {time}": "Settled at {time}", "能量 {n}": "Energy {n}", "腾讯每日签到接口 · 仅国内版": "Tencent daily check-in API · China edition only", "至少勾一家才能保存(不勾等于这条条目不签到)": "Select at least one provider to save (an empty scope means this entry checks in nothing)", "读取定时签到数据失败:{error}": "Failed to load schedule data: {error}", "读取签到数据失败:{error}": "Failed to load check-in data: {error}", "读取签到记录失败:{error}": "Failed to load check-in records: {error}", "跳过 {n}": "{n} skipped", "运营活动交付(领取 → 确认 → 回读核实)· 领的是套餐赠送积分": "Campaign delivery (claim → confirm → read back to verify) · these are plan bonus points", "还没执行过": "Never run yet", "还没有定时条目 —— 点「添加条目」建一条,或到「签到中心」手动签到。": "No schedules yet — click \"Add schedule\" to create one, or check in manually on the \"Check-in center\" tab.", "还没有签到记录 —— 手动签到或等定时条目执行后,明细会出现在这里。": "No check-in records yet — details appear here after a manual check-in or a scheduled run.", "连登 {n} 天": "{n}-day streak", "部分": "Partial", "重签": "Check in again", "重试": "Retry", "限时体验套餐 · 领取需滑块验证码 · 逐份查看与领取": "Limited-time trial plan · claim requires a slider CAPTCHA · view and claim one by one", "限时体验套餐(start-plan),活动期内每天一份 · 领取需滑块验证码": "Limited-time trial plan (start-plan), one per day during the campaign · claim requires a slider CAPTCHA", "随机前后": "Random offset", "需真实操作": "Requires real action", "非活动期": "Event inactive", "项": "items", "领取": "Claim", "领取中": "Claiming", "领取中…": "Claiming…", "领取失败": "Claim failed", "领取失败:{error}": "Claim failed: {error}", "(共 {n} 个账号)": " ({n} accounts total)", "(能量 / 连登读数本次未取到)": "(Energy / streak readings unavailable this time)", ",日活保活 {n} 个": ", {n} kept alive" });
diff --git a/desktop-tauri/ui/i18n/ja/add-account.js b/desktop-tauri/ui/i18n/ja/add-account.js
index 25ce3406..dae2188a 100644
--- a/desktop-tauri/ui/i18n/ja/add-account.js
+++ b/desktop-tauri/ui/i18n/ja/add-account.js
@@ -1,2 +1,2 @@
/* Agent2API 词典构建产物:ja/add-account —— 由 desktop-tauri/i18n/build.mjs 生成,请勿手改;源头是 i18n-src/*.json */
-window.wbI18nDict = window.wbI18nDict || {}; Object.assign(window.wbI18nDict, { " · 模型 {head}{rest}": " · モデル {head}{rest}", " 等 {n} 个": " など {n} 個", "1// 开头的 Google refresh token(也可直接粘贴 refresh_token=… 整行)": "1// で始まる Google refresh token(refresh_token=… の行をそのまま貼り付けても可)", "11 位大陆手机号": "11 桁の中国本土の携帯番号", "1~64 个字符,账号列表里按它分组显示": "1~64 文字、アカウント一覧ではこれでグループ表示されます", "6 位数字": "6 桁の数字", "没有可自动领的活动": "自動で受け取れるイベントはありません", "领到的是套餐赠送积分,不会增加福利模型的 token 池;": "
受け取るのはプラン特典ポイントで、特典モデルの token プールは増えません;", "Anthropic 兼容端点在 https://api.deepseek.com/anthropic(协议换 anthropic 时填它)": "Anthropic 互換エンドポイントは https://api.deepseek.com/anthropic です(プロトコルを anthropic に切り替えるときにこれを入力)", "Anthropic 协议填根地址,不要带 /v1": "Anthropic プロトコルではルートアドレスを入力し、/v1 は付けないでください", "Antigravity": "Antigravity", "AutoClaw 国内版": "AutoClaw 中国版", "AutoClaw 国际版": "AutoClaw 国際版", "BDUSS 必填;请粘贴**完整 Cookie**(Cookie 编辑器一键导出即可)—— 其中 **PTOKEN 必须保留**,网关要用它向百度换发 KukuAI 业务会话令牌,缺了它模型刷新会报「未登录」。支持整段 Cookie 头、Cookie 编辑器导出的 JSON 数组,或 {BDUSS, STOKEN} 对象。KukuAI 没有刷新机制,登录态过期后重新粘贴即可。": "BDUSS は必須です;**完全な Cookie** を貼り付けてください(Cookie エディターのワンクリック書き出しで構いません)—— このうち **PTOKEN は必ず残してください**。ゲートウェイはこれを使って Baidu から KukuAI の業務セッショントークンを発行してもらうため、欠けるとモデル更新時に「未ログイン」と表示されます。Cookie ヘッダー全体、Cookie エディターが書き出した JSON 配列、または {BDUSS, STOKEN} オブジェクトに対応しています。KukuAI には更新の仕組みがないため、ログイン状態の期限が切れたら貼り直せば済みます。", "BDUSS=…; STOKEN=…(或 Cookie 编辑器导出的 JSON)": "BDUSS=…; STOKEN=…(または Cookie エディターが書き出した JSON)", "CatPaw 的 X-Passport-Token(登录态 Cookie)": "CatPaw の X-Passport-Token(ログイン状態 Cookie)", "Cline Pass 的 API Key 在 app.cline.bot 获取(订阅制);端点为 OpenAI 兼容,模型清单以 Cline 控制台为准,模型名在模型管理里按裸名添加(如 glm-5.2 / kimi-k2.7-code / deepseek-v4-pro);上游按客户端形态校验,所需的客户端请求头已随卡预置": "Cline Pass の API Key は app.cline.bot で取得します(サブスクリプション制)。エンドポイントは OpenAI 互換で、モデル一覧は Cline コンソールが正となります。モデル名はモデル管理で接頭辞なしの名前のまま追加します(例:glm-5.2 / kimi-k2.7-code / deepseek-v4-pro)。上流はクライアントの形態を検証するため、必要なクライアントリクエストヘッダーはこのカードにあらかじめ設定されています", "Cloud-IDE-JWT(三段点分)": "Cloud-IDE-JWT(3 段のドット区切り)", "Command Code": "Command Code", "JWT(三段点分;也可直接粘贴 Bearer 整行或 data.bin 内容)": "JWT(ドット区切り 3 パート。Bearer 行全体や data.bin の中身を貼っても可)", "JWT(三段点分;也可直接粘贴 chatglm_token=… 整行)": "JWT(3 つのドット区切り部分。chatglm_token=… の行をそのまま貼っても可)", "MonkeyCode": "MonkeyCode", "MonkeyCode 国际版": "MonkeyCode 国際版", "NVIDIA NIM 托管端点,Key 在 integrate.api.nvidia.com 申请": "NVIDIA NIM のマネージドエンドポイント。Key は integrate.api.nvidia.com で申請します", "OfficeAce 果办": "OfficeAce", "accessToken 是 Accio 的登录凭证(一长串不透明 token,不是 JWT);refreshToken 可选,填了之后到期能自动续期。请填写 {label}账号的凭证 —— {siteNote}(最容易拿到的办法:直接用上方的「网页登录」,不需要手工找 token。)": "accessToken は Accio のログイン認証情報です(長い不透明な token 文字列で、JWT ではありません);refreshToken は任意で、入力すると期限切れ時に自動更新できます。{label}アカウントの認証情報を入力してください —— {siteNote}(最も簡単な方法:上の「ウェブログイン」を使えば token を手動で探す必要はありません。)", "accessToken 是 Trae 的 Cloud-IDE-JWT(三段点分),refreshToken 用于到期自动续期(本家 refreshToken 一次一换:换发一次旧的即作废,所以两份程序别同时刷同一个账号)。
手工粘贴时请连 machineId / deviceId 一起填:上游把它们与登录时上传的设备公钥绑在一起判设备,凭空换一对会撞 2xxxx 那族设备绑定拒绝。
没有这三样时的正路是用上方的「网页登录」;容器 / 远程部署形态按提示粘贴地址栏回调地址即可。": "accessToken は Trae の Cloud-IDE-JWT(3 段のドット区切り)です。refreshToken は期限切れ時の自動更新に使用します(本家の refreshToken は 1 回ごとに交換され、一度更新すると古いものは無効になります。そのため 2 つのプログラムで同じアカウントを同時に更新しないでください)。
手動で貼り付ける場合は machineId / deviceId も一緒に入力してください:アップストリームはこれらをログイン時にアップロードされたデバイス公開鍵と紐付けてデバイスを判定するため、根拠なく別のペアにすると 2xxxx 系のデバイスバインディング拒否に当たります。
この 3 つがない場合の正道は上の「ウェブログイン」を使うことです;コンテナ / リモートデプロイ形態では案内に従ってアドレスバーのコールバックアドレスを貼り付けてください。", "monkeycode_ai_session 的值(也可直接粘贴整段 Cookie)": "monkeycode_ai_session の値(Cookie 全体をそのまま貼り付けても可)", "refreshToken 可选,填了到期可自动续期;两者都能从小浣熊客户端登录态文件里取到。": "refreshToken は任意で、入力すると期限切れ時に自動更新できます;どちらも小浣熊クライアントのログイン状態ファイルから取得できます。", "refreshToken 可选,填了可自动续期;两者都能从客户端登录态文件取到。同一个 Cline 账号两个池都能用,这里归入 {label}。": "refreshToken は任意で、入力すると自動更新できます;どちらもクライアントのログイン状態ファイルから取得できます。同じ Cline アカウントはどちらのプールでも使え、ここでは {label} に分類されます。", "token 支持 enc: 前缀(Windows 上自动解密)。未填 refreshToken 无法自动续期。": "token は enc: プレフィックスに対応しています(Windows では自動復号)。refreshToken を入力しないと自動更新できません。", "token 是登录态 Cookie;CatPaw 没有刷新机制,过期后需在客户端重新登录。": "token はログイン状態 Cookie です;CatPaw には更新の仕組みがないため、期限切れ後はクライアントで再ログインが必要です。", "user_ 开头的 API Key(也可直接粘贴 Authorization: Bearer … 整行)": "user_ で始まる API Key(Authorization: Bearer … の行をそのまま貼り付けても可)", "{label} 网页登录的打开方式": "{label} のウェブログインの開き方", "{label} 账号地区": "{label} アカウントの地域", "{label} 账号的添加方式": "{label} アカウントの追加方法", "{name} 不是合法 JSON:{reason}": "{name} は有効な JSON ではありません:{reason}", "{name}要粘一个 JSON 对象(形如 {sample})": "{name} には JSON オブジェクトを貼り付けてください(例:{sample})", "{n} 个账号": "{n} 個のアカウント", "{n} 个账号,点击添加": "{n} 個のアカウント、クリックして追加", "{seconds}s 后重发": "{seconds} 秒後に再送", "✅ {label}账号已添加": "✅ {label} アカウントを追加しました", "✅ {label}账号已添加{name}": "✅ {label} アカウントを追加しました{name}", "✅ 已从 cc-switch 导入 {n} 个供应商": "✅ cc-switch から {n} 個のプロバイダーをインポートしました", "✅ 已创建自定义提供商「{name}」并添加账号": "✅ カスタムプロバイダー「{name}」を作成し、アカウントを追加しました", "✅ 已删除自定义提供商「{name}」{accounts}{keys}": "✅ カスタムプロバイダー「{name}」を削除しました{accounts}{keys}", "✅ 已更新已有账号{name}(同一把 API Key 只保留一条,重复添加会合并)": "✅ 既存アカウント{name}を更新しました(同じ API Key は 1 件のみ保持し、再追加はマージされます)", "✅ 登录成功,{edition}账号已加入列表": "✅ ログインに成功し、{edition}アカウントをリストに追加しました", "✅ 领取成功:{planId}{period}": "✅ 受け取りに成功しました:{planId}{period}", " 同一家可以放多把 key,按优先级轮换。": " 同じプロバイダーに複数の key を置くことができ、優先度に従ってローテーションされます。", "「{name}」的账号添加功能还在开发中,敬请期待。": "「{name}」のアカウント追加機能は開発中です。ご期待ください。", "一个 Key 用遍多家模型,模型名用「厂商/模型」全称(如 deepseek/deepseek-chat)": "1 つの Key で複数のプロバイダーのモデルを利用できます。モデル名は「ベンダー/モデル」の完全名を指定します(例:deepseek/deepseek-chat)", "上游不要鉴权时留空,并勾选下面一项(留空又不勾会被当成未配置凭证)": "アップストリームが認証不要の場合は空欄にし、下の項目にチェックを入れてください(空欄かつ未チェックでは認証情報未設定として扱われます)", "上游信息": "アップストリーム情報", "不可领({status})": "受け取り不可({status})", "不支持导入": "インポートに対応していません", "不是有效的凭证文件:内容要是一个 JSON 对象": "有効な認証情報ファイルではありません:内容は JSON オブジェクトである必要があります", "不是有效的凭证文件:需要包含 accessToken 与 uid": "有効な認証情報ファイルではありません:accessToken と uid が必要です", "不是自定义提供商": "カスタムプロバイダーではありません", "不需要 Key:转发与拉取模型都不发送鉴权头": "Key は不要:転送とモデル取得のいずれも認証ヘッダーを送信しません", "不需要登录:点下面的按钮,网关会直接在智谱清言换发一份访客凭证并加入账号列表(也可以先填个备注名)。访客凭证可以直接用来对话,免费额度由上游按设备发放。
注意:访客账号没有积分体系 —— 它与「会员积分」「每日登录积分」「活动领取」相关的接口一律需要登录,因此那些能力对访客会如实跳过(账号页的积分、签到中心都不显示读数)。想要积分就用「填写凭证」粘一个已登录账号的令牌,或「导入桌面端登录态」。": "ログイン不要です。下のボタンを押すと、ゲートウェイが智谱清言からゲスト資格情報を直接取得してアカウント一覧に追加します(先にメモ名を入力しても構いません)。ゲスト資格情報はそのまま会話に使え、無料枠は上流がデバイス単位で発行します。
注意:ゲストアカウントにはポイント体系がありません。会員ポイント・毎日ログインポイント・アクティビティ受け取りの各インターフェースはすべてログインが必要なため、これらの機能はゲストではスキップされます(アカウントページのポイントや签到センターには数値が表示されません)。ポイントが必要な場合は「資格情報を入力」でログイン済みアカウントのトークンを貼り付けるか、「デスクトップのログイン状態をインポート」してください。", "两版账号可同时保存,各自一份模型清单(国内版与国际版是两家提供商,可分别启用与映射)。": "両版のアカウントは同時に保存でき、それぞれ独自のモデルカタログを持ちます(中国版と国際版は別々のプロバイダーで、個別に有効化とマッピングができます)。", "中国版": "中国版", "今天没有需要领的活动(都已到账)": "本日受け取る必要のあるイベントはありません(すべて付与済み)", "今天(北京时间 {day})已试 {attempts} 次,还能试 {left} 次{next}
": "本日(北京時間 {day})は {attempts} 回試行済み、あと {left} 回試せます{next}
", "从别的机器(或 OfficeAce 桌面端 models.json)取三项贴进来:模型网关基址(baseUrl,形如 https://modelgw-…/v2)与 modelAppKey / modelAppSecret。这三项就能转发(网关凭据不过期);控制面临时凭据(accessKeyId 等)可选,留空则额度/自动续期不可用,但不影响转发。": "別のマシン(または OfficeAce デスクトップ版の models.json)から次の 3 項目を取り出して貼り付けてください:モデルゲートウェイのベース URL(baseUrl、https://modelgw-…/v2 の形式)と modelAppKey / modelAppSecret。この 3 項目だけで転送できます(ゲートウェイ認証情報は無期限)。コントロールプレーンの一時認証情報(accessKeyId など)は任意で、空欄の場合は残高照会と自動更新が使えませんが、転送には影響しません。", "从本机导入桌面端登录态": "本機からデスクトップ版のログイン状態をインポート", "任务镜像 id": "タスクイメージ id", "余额查询": "残高照会", "使用 Google 账号登录": "Google アカウントでログイン", "使用 Zai 账号登录": "Zai アカウントでログイン", "使用个人访问令牌(PAT)": "個人アクセストークン(PAT)を使用", "免费模型不用填 Key(默认勾上「该上游无需鉴权」,网关自动用匿名凭证);付费模型则填 Zen 的 API Key。免费档上游只认官方客户端形态,已默认开启「伪装 OpenCode 官方客户端」": "無料モデルでは Key の入力は不要です(既定で「このアップストリームは認証不要」がチェックされ、ゲートウェイは自動的に匿名認証情報を使用します);有料モデルでは Zen の API Key を入力します。無料枠のアップストリームは公式クライアントの形態しか受け付けないため、「OpenCode 公式クライアントの偽装」が既定で有効になっています", "内嵌窗口": "内蔵ウィンドウ", "内嵌窗口打开;关窗即取消等待(Google 账号被拒时改用系统浏览器)": "内蔵ウィンドウで開きます;ウィンドウを閉じると待機をキャンセルします(Google アカウントが拒否された場合はシステムブラウザをお使いください)", "内嵌窗口打开;完成后自动加入列表,关窗即取消等待": "内蔵ウィンドウで開きます;完了後は自動でリストに追加され、ウィンドウを閉じると待機をキャンセルします", "内嵌窗口打开;扫码完成后自动加入列表,关窗即取消等待": "内蔵ウィンドウで開きます。読み取りが完了すると自動で一覧に追加され、ウィンドウを閉じると待機を中止します", "内嵌窗口用全新环境,多账号互不影响;关窗即取消等待": "内蔵ウィンドウは新しい環境を使うため、複数のアカウントが互いに影響しません;ウィンドウを閉じると待機をキャンセルします", "内嵌窗口(推荐)": "内蔵ウィンドウ(推奨)", "准备验证…": "認証を準備中…", "凭据 JSON": "認証情報 JSON", "凭证文件在哪?": "認証情報ファイルの場所は?", "创建并添加账号": "作成してアカウントを追加", "创建这个提供商,并同时建立它的第一个账号。": "このプロバイダーを作成し、同時にその最初のアカウントを作成します。", "删除功能不可用(脚本未就绪)": "削除機能は利用できません(スクリプト未準備)", "删除失败:{reason}": "削除に失敗しました:{reason}", "删除此提供商": "このプロバイダーを削除", "及 {n} 个账号": "、および {n} 個のアカウント", "发送中…": "送信中…", "发送失败:{message}": "送信に失敗しました:{message}", "发送未确认:登录窗口已弹出,请在弹出的窗口中手动完成登录": "送信は未確認です:ログインウィンドウが開きました。表示されたウィンドウで手動でログインを完了してください", "取消失败:{message}": "キャンセルに失敗しました:{message}", "取消等待": "待機をキャンセル", "只有「内嵌窗口」能恢复第三方入口:系统浏览器里我们无法改动登录页": "「内蔵ウィンドウ」でのみサードパーティの入り口を復元できます:システムブラウザではログインページを変更できないためです", "可选": "任意", "可选(cloudaicompanionProject):留空由网关自动发现": "任意(cloudaicompanionProject):空欄の場合はゲートウェイが自動検出します", "可选,展示用": "任意、表示用", "可选,没有则无法自动续期": "任意、ないと自動更新できません", "可选,留空使用凭据里的 user_name": "任意、空欄の場合は認証情報の user_name を使用", "可选,留空使用账号姓名、邮箱或令牌指纹": "任意、空欄の場合はアカウントの氏名、メールアドレス、またはトークンフィンガープリントを使用", "可选,留空使用账号昵称或邮箱": "任意、空欄の場合はアカウントのニックネームまたはメールアドレスを使用", "可选,留空则用 key 尾号": "任意、空欄の場合は key の末尾を使用", "可选,留空则用 userId": "任意、空欄の場合は userId を使用", "可选,留空则用上游返回的账号名或账号 id": "任意、空欄の場合はアップストリームが返したアカウント名またはアカウント id を使用", "可选,留空则用凭证里的账号名": "任意、空欄の場合は認証情報のアカウント名を使用", "可选,留空则用文件里的昵称": "任意。空欄の場合はファイル内のニックネームを使用", "可选,留空则用登录名或 uid": "任意、空欄の場合はログイン名または uid を使用", "可选,留空则用脱敏手机号": "任意、空欄の場合はマスク済み電話番号を使用", "可选,留空则用脱敏手机号或 userId": "任意、空欄の場合はマスク済み電話番号または userId を使用", "可选,留空则用账号 uk": "任意、空欄の場合はアカウントの uk を使用", "可选,留空则用账号昵称": "任意。空欄ならアカウントのニックネームを使用", "可选,留空则用账号昵称或 userId": "任意。空欄の場合はアカウントのニックネームまたは userId を使用", "可选,留空则用邮箱或令牌尾号": "任意、空欄の場合はメールアドレスまたはトークンの末尾を使用", "可选,留空用「OfficeAce 果办」": "任意、空欄の場合は「OfficeAce」を使用", "可选,留空自动生成": "任意、空欄の場合は自動生成", "可选,留空自动用昵称": "任意、空欄の場合はニックネームを自動使用", "可选,给这个访客账号起个备注名": "任意。このゲストアカウントのメモ名", "可选,续期时带上": "任意、更新時に一緒に送信されます", "可选,讯飞侧 userid": "任意、iFlytek 側の userid", "可选:发起对话必需,留空则由网关从该账号已有任务里自动发现,发现不到时之后手动补": "任意;会話の開始に必須です。空欄の場合はゲートウェイがこのアカウントの既存タスクから自動検出します。見つからない場合は後で手動で補ってください。", "可选:账号邮箱,用于展示与身份识别(换新令牌也能认回同一账号)": "任意;アカウントのメールアドレスで、表示と身元識別に使用します(新しいトークンに替えても同じアカウントとして認識されます)", "可选;UUID 形态,与凭据同生共死": "任意;UUID 形式で、認証情報と一体で管理されます", "可选;填了才能到期自动续期": "任意;入力すると期限切れ時に自動更新できます", "可选;用于去重与展示名(留空时网关会问一次上游)": "任意;重複排除と表示名に使用します(空欄の場合、ゲートウェイがアップストリームに一度問い合わせます)", "可选;用于生成账号 id 与展示名": "任意;アカウント id と表示名の生成に使用します", "可选;纯数字串(上游只收 8–24 位数字)": "任意;数字のみの文字列(アップストリームは 8–24 桁の数字のみ受け付けます)", "可领取": "受け取り可能", "同一家可以混着放:有 Key 的账号与无鉴权账号各按各的规则走;无需鉴权的账号也能并存多条(各自可配不同的出网代理)": "同じプロバイダーに API Key ありのアカウントと認証不要アカウントを混在でき、それぞれの規則でルーティングされます。認証不要アカウントも複数併存でき、それぞれ別の送信プロキシを設定できます", "同地址换 anthropic 协议即走它的 Claude 兼容端点。转发必须填 OpenCode Go 的 API Key(订阅制;获取模型清单不需要 Key,但发请求上游会回 401「Missing API key」)": "同じアドレスでプロトコルを anthropic に変えると、その Claude 互換エンドポイントを使用します。転送には OpenCode Go の API Key が必須です(サブスクリプション制;モデルカタログの取得に Key は不要ですが、リクエストを送るとアップストリームが 401「Missing API key」を返します)", "响应为空": "応答が空です", "商汤日日新的 OpenAI 兼容端点;余额查询走控制台账号密码(见下方「余额查询」一段)": "SenseNova の OpenAI 互換エンドポイント。残高照会はコンソールのアカウント / パスワードを使います(下の「残高照会」の節を参照)", "国内版": "中国版", "国内版与**国际版是两套独立的账号与套餐**,凭证与领取的套餐都不通用。": "中国版と**国際版は 2 組の独立したアカウントとプラン**で、認証情報と受け取ったプランはどちらも共用できません。", "国内版登录页没有 Google / GitHub 入口(它用微信 / 手机号 / 邮箱登录)": "中国版のログインページには Google / GitHub の入り口がありません(WeChat / 電話番号 / メールアドレスでログインします)", "国内版的登录站点是 www.accio-ai.com,与国际版不是同一站。": "中国版のログインサイトは www.accio-ai.com で、国際版とは別のサイトです。", "国内版(WorkBuddy)": "中国版(WorkBuddy)", "国内站为 https://api.siliconflow.cn/v1": "中国版サイトは https://api.siliconflow.cn/v1", "国内站(minimaxi.com);OpenAI 兼容地址为 https://api.minimaxi.com/v1": "中国版サイト(minimaxi.com);OpenAI 互換アドレスは https://api.minimaxi.com/v1", "国际版": "国際版", "国际版 z.ai 的 Coding 套餐;OpenAI 兼容地址为 https://api.z.ai/api/coding/paas/v4": "国際版 z.ai の Coding プラン;OpenAI 互換アドレスは https://api.z.ai/api/coding/paas/v4", "国际版与国内版是**两套独立的账号**(同一账号体系的两个站点),凭证不通用。": "国際版と中国版は**2 組の独立したアカウント**です(同じアカウント体系の 2 つのサイト)。認証情報は共用できません。", "国际版与国内版账号体系独立,请填国际版的凭证。未填 refreshToken 无法自动续期。": "国際版と中国版はアカウント体系が独立しています。国際版の認証情報を入力してください。refreshToken を入力しないと自動更新できません。", "国际版登录页默认只显示邮箱登录,勾选后恢复 Google / GitHub / X 入口": "国際版のログインページは既定でメールアドレスログインのみ表示されます。チェックすると Google / GitHub / X の入り口が復元されます", "国际版的推理站点是 api.z.ai,与国内版不是同一站;套餐也各自独立。": "国際版の推論サイトは api.z.ai で、中国版とは別のサイトです;プランもそれぞれ独立しています。", "国际版(WorkBuddy AI)": "国際版(WorkBuddy AI)", "国际站 Coding 套餐;OpenAI 兼容地址为 https://api.minimax.io/v1": "国際版サイトの Coding プラン;OpenAI 互換アドレスは https://api.minimax.io/v1", "在 cc-switch 里找到": "cc-switch で", "在内嵌窗口里完成官方登录,成功后自动加入账号列表。": "内蔵ウィンドウで公式ログインを完了してください。成功すると自動でアカウント一覧に追加されます。", "在{label}的 Qoder 账号设置 → Integrations 生成 PAT(别填 Google / GitHub 的令牌)。两个地区的账号与凭证不通用。": "{label} の Qoder アカウント設定 → Integrations で PAT を生成してください(Google / GitHub のトークンは入力しないでください)。2 つの地域のアカウントと認証情報は共用できません。", "在打开的官方授权页里用微信扫码登录(页面会直接显示二维码)。扫码成功后自动加入账号列表。": "開いた公式認可ページで WeChat の QR コードを読み取ってログインします(ページに QR コードが直接表示されます)。読み取りに成功すると自動でアカウント一覧に追加されます。", "在打开的窗口里用百度账号登录 KukuAI 主站(手机验证码 / 扫码均可),登录成功后自动加入账号列表。网关会向百度换发 KukuAI 业务会话令牌(依赖本机已安装库库AI 客户端)。": "開いたウィンドウで Baidu アカウントを使って KukuAI 本体サイトにログインしてください(SMS 認証コード / QR コードのいずれも可)。ログインに成功すると自動でアカウント一覧に追加されます。ゲートウェイは Baidu から KukuAI の業務セッショントークンを発行してもらいます(本機に KukuAI クライアントがインストールされている必要があります)。", "在打开的窗口里登录 Google 账号(Antigravity 的授权页),授权完成后自动加入账号列表。": "開いたウィンドウで Google アカウントにログインしてください(Antigravity の認可ページ)。認可が完了すると自動でアカウントリストに追加されます。", "在浏览器中打开登录页": "ブラウザでログインページを開く", "地区": "地域", "填写凭证": "認証情報を入力", "填写凭证添加": "認証情報を入力して追加", "备注名": "ラベル名", "套餐": "プラン", "如:智谱 GLM": "例:Zhipu GLM", "完成登录后自动加入账号列表,昵称取自上游。": "ログイン完了後は自動でアカウント一覧に追加されます。ニックネームはアップストリームから取得します。", "官方客户端凭证目录:Windows 是 C:\\Users\\<你的用户名>\\AppData\\Local\\CodeBuddyExtension\\Data\\Public\\auth,macOS 是 ~/Library/Application Support/CodeBuddyExtension/Data/Public/auth": "公式クライアントの認証情報ディレクトリ:Windows は C:\\Users\\<ユーザー名>\\AppData\\Local\\CodeBuddyExtension\\Data\\Public\\auth、macOS は ~/Library/Application Support/CodeBuddyExtension/Data/Public/auth", "官方已确认到账": "公式が付与を確認済み", "导入": "インポート", "导入中…": "インポート中…", "导入凭证文件": "認証情報ファイルのインポート", "导入失败": "インポートに失敗しました", "导入失败:{reason}": "インポートに失敗しました:{reason}", "导入所选": "選択項目をインポート", "导入所选({n})": "選択項目をインポート({n})", "导入桌面端登录态": "デスクトップ版のログイン状態をインポート", "将打开内嵌窗口;授权完成后自动加入账号列表。关掉窗口即取消等待。授权页最后可能提示无法打开 zcode:// 链接,这是正常的 —— 结果已由服务端记下": "内蔵ウィンドウを開きます;認可が完了すると自動でアカウント一覧に追加されます。ウィンドウを閉じると待機をキャンセルします。認可ページの最後に zcode:// リンクを開けない旨の表示が出ることがありますが、これは正常です —— 結果はサーバー側で記録済みです", "将打开内嵌窗口;授权完成后自动加入账号列表。远程面板可粘贴回调地址。关掉窗口即取消等待。链接 5 分钟内有效,超时或未点就会作废(可重新发起)": "内蔵ウィンドウを開きます;認可が完了すると自動でアカウント一覧に追加されます。リモートパネルではコールバックアドレスを貼り付けられます。ウィンドウを閉じると待機をキャンセルします。リンクの有効期限は 5 分で、タイムアウトまたは未クリックの場合は無効になります(再発行できます)", "将打开内嵌窗口;登录完成后自动加入账号列表。关掉窗口即取消等待": "内蔵ウィンドウを開きます;ログイン完了後は自動でアカウント一覧に追加されます。ウィンドウを閉じると待機をキャンセルします", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的 Trae 账号);同机完成后自动加入,Docker / 远程面板按提示粘贴地址栏回调地址。": "システムの既定ブラウザで認可ページを開きます(ブラウザでログイン済みの Trae アカウントが再利用されます);同一マシンでは完了後に自動追加され、Docker / リモートパネルでは案内に従ってアドレスバーのコールバックアドレスを貼り付けてください。", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的 ZCode 账号);授权完成后自动加入账号列表。页面最后可能提示无法打开 zcode:// 链接,属正常现象": "システムの既定ブラウザで認可ページを開きます(ブラウザでログイン済みの ZCode アカウントが再利用されます);認可完了後は自動でアカウント一覧に追加されます。ページの最後に zcode:// リンクを開けない旨の表示が出ることがありますが、正常な動作です", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的华为云账号);授权码由网关轮询云端取回,与浏览器跑在哪台机器无关,完成后自动加入账号列表": "システムの既定ブラウザで認可ページを開きます(ブラウザでログイン済みの Huawei Cloud アカウントが再利用されます);認可コードはゲートウェイがクラウドをポーリングして取得するため、ブラウザがどのマシンで動いていても関係ありません。完了後は自動でアカウント一覧に追加されます", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的华为云账号);浏览器与网关不在同一台机器时,按上方说明把最终回调地址粘贴回面板": "システムの既定ブラウザで認可ページを開きます(ブラウザでログイン済みの Huawei Cloud アカウントが再利用されます);ブラウザとゲートウェイが別のマシンにある場合は、上の説明に従って最終的なコールバックアドレスをパネルに貼り付けてください", "将用系统默认浏览器打开登录页(会复用浏览器里已登录的 Accio 账号);完成登录后自动加入账号列表,关掉弹窗即取消等待": "システムの既定ブラウザでログインページを開きます(ブラウザでログイン済みの Accio アカウントが再利用されます);ログイン完了後は自動でアカウント一覧に追加され、ポップアップを閉じると待機をキャンセルします", "小米 MiMo Token Plan 套餐(新加坡站)": "小米 MiMo Token Plan プラン(シンガポールサイト)", "已到账": "付与済み", "已取消登录等待": "ログイン待ちをキャンセルしました", "已取消领取": "受け取りをキャンセルしました", "已取消验证码": "認証をキャンセルしました", "已填写手机号,正在发送验证码…": "電話番号を入力しました。認証コードを送信中…", "已声明无需鉴权:账号会被正常选路,出网时不带任何鉴权头": "認証不要を宣言済み:アカウントは通常どおりルーティングされ、送信時に認証ヘッダーは一切付きません", "已导入 {ok} 个,失败 {fail} 个(失败项已标注在列表里)": "{ok} 個をインポートしました。失敗 {fail} 個(失敗した項目にはリスト内でマークが付いています)", "已建过 · {n} 个账号,点击继续添加": "作成済み · {n} 個のアカウント、クリックして追加", "已建过,点击继续添加账号": "作成済み、クリックしてアカウントを追加", "已打开官方登录页,请在窗口中完成登录…": "公式ログインページを開きました。ウィンドウでログインを完了してください…", "已点发送,等待短信…": "送信しました。SMS を待っています…", "已用系统默认浏览器打开登录页,请在浏览器中完成登录…": "システムの既定ブラウザでログインページを開きました。ブラウザでログインを完了してください…", "已领取,等官方确认": "受け取り済み、公式の確認待ち", "当前壳版本不支持 AutoClaw 网页登录,请更新应用": "現在のシェルバージョンは AutoClaw のウェブログインに対応していません。アプリを更新してください", "当前没有可领取的套餐(活动尚未开始)": "現在受け取り可能なプランはありません(イベントはまだ開始されていません)", "当前环境不支持领取(桥接方法缺失)": "現在の環境では受け取りに対応していません(ブリッジメソッドがありません)", "必填,CatPaw 账号标识": "必須、CatPaw アカウントの識別子", "恢复 Google / GitHub 入口": "Google / GitHub の入り口を復元", "手机号": "電話番号", "手机验证码登录": "SMS 認証コードログイン", "打开 Trae SOLO 的官方授权页(trae.cn)并用你的 Trae 账号登录:授权完成后官方页面会跳回本机的一个临时端口;同机部署自动接收,Docker / 远程面板请按提示复制地址栏回调地址。": "Trae SOLO の公式認可ページ(trae.cn)を開き、あなたの Trae アカウントでログインしてください:認可が完了すると公式ページから本機の一時ポートにリダイレクトされます;同一マシンでのデプロイでは自動受信し、Docker / リモートパネルでは案内に従ってアドレスバーのコールバックアドレスをコピーしてください。", "打开 Accio {label}的官方登录页({site})并用你的 Accio 账号登录:登录成功后官方页面会跳回本机;同机自动完成,Docker / 远程面板按提示粘贴回调地址即可(授权码只在本机传给网关,界面不显示明文 token)。": "Accio {label}の公式ログインページ({site})を開き、あなたの Accio アカウントでログインしてください:ログインに成功すると公式ページから本機にリダイレクトされます;同一マシンでは自動完了し、Docker / リモートパネルでは案内に従ってコールバックアドレスを貼り付けてください(認可コードは本機からゲートウェイに渡されるだけで、画面に平文 token は表示されません)。", "打开 Accio {label}登录页": "Accio {label} のログインページを開く", "打开 Antigravity 网页登录": "Antigravity のウェブログインを開く", "打开 CatPaw 网页登录": "CatPaw のウェブログインを開く", "打开 Cline 授权页": "Cline の認可ページを開く", "打开 CodeArts 授权页": "CodeArts の認可ページを開く", "打开 Qoder 网页登录": "Qoder のウェブログインを開く", "打开 Trae 授权页": "Trae の認可ページを開く", "打开 ZCode {label}的官方授权页并用你的账号登录。授权结果由 ZCode 服务端记录,网关在后台自动取回凭证并加入账号列表。": "ZCode {label}の公式認可ページを開き、あなたのアカウントでログインしてください。認可結果は ZCode サーバー側で記録され、ゲートウェイがバックグラウンドで自動的に認証情報を取得してアカウント一覧に追加します。", "打开 ZCode {label}授权页": "ZCode {label} の認可ページを開く", "打开华为云 CodeArts 的官方授权页登录:登录完成后官方页面会把浏览器带回网关自己的 /oauth/callback,网关用一次性授权码换取临时凭据并加入账号列表。
网关跑在另一台机器上时,网页端会提示把地址栏中的最终回调地址直接粘贴回面板。": "Huawei Cloud CodeArts の公式認可ページを開いてログインします:ログイン完了後、公式ページからブラウザがゲートウェイ自身の /oauth/callback に戻され、ゲートウェイはワンタイム認可コードで一時認証情報を取得し、アカウント一覧に追加します。
ゲートウェイが別のマシンで動作している場合は、ウェブ画面でアドレスバーの最終的なコールバックアドレスをそのままパネルに貼り付けるよう案内されます。", "打开华为云授权页登录:登录完成后网关会自动轮询云端取回授权码并加入账号列表(不需要装 OfficeAce 桌面端,也无需手工回填回调地址)。": "Huawei Cloud の認可ページを開いてログインしてください:完了すると、ゲートウェイがクラウドをポーリングして認可コードを取得し、アカウント一覧に追加します(OfficeAce デスクトップ版は不要で、コールバック URL を手動で貼り戻す必要もありません)。", "打开官方授权页完成设备码授权,登录的是{label}({site})的账号。": "公式認可ページを開いてデバイスコード認可を完了します。ログインするのは {label}({site})のアカウントです。", "打开授权页": "認可ページを開く", "打开授权页完成确认,账号自动加入 {label}{note}": "認可ページを開いて確認を完了すると、アカウントが自動で {label} に追加されます{note}", "打开方式": "開き方", "打开网页登录": "ウェブログインを開く", "探测失败:{message}": "検出に失敗しました:{message}", "接入一个兼容上游": "互換アップストリームを接続", "提交中…": "送信中…", "搜索提供商": "プロバイダーを検索", "搜索提供商…": "プロバイダーを検索…", "整份粘贴官方插件 / CLIProxyAPI 落盘的凭据 JSON(形如 {\"codearts_provider_credential\":{…}},铺平的也行)。
必填:access_key_id、secret_access_key、security_token。要能自动续期,必须连 refresh_token 与 oauth_context 一起粘 —— 临时凭据约一小时到期,缺这半块就续不回来,只能重新登录。": "公式プラグイン / CLIProxyAPI が保存した認証情報 JSON をまるごと貼り付けてください({\"codearts_provider_credential\":{…}} の形。フラットなものでも可)。
必須:access_key_id、secret_access_key、security_token。自動更新を効かせるには refresh_token と oauth_context も一緒に貼り付ける必要があります —— 一時認証情報は約 1 時間で期限切れになり、この半分が欠けると更新できず、再ログインするしかありません。", "文件是{edition}凭证,已按该版本导入": "ファイルは{edition}の認証情報のため、そのバージョンでインポートしました", "新建自定义提供商": "カスタムプロバイダーを新規作成", "方案:{label}": "方式:{label}", "明文 JWT 或 auth.json 里的 enc: 加密值(自动解密)": "平文 JWT または auth.json 内の enc: 暗号化値(自動復号)", "明文 JWT(国际版账号的 access token)": "平文 JWT(国際版アカウントの access token)", "智谱 bigmodel.cn 的 Coding 套餐,Key 在 open.bigmodel.cn/usercenter/apikeys": "Zhipu bigmodel.cn の Coding プラン。Key は open.bigmodel.cn/usercenter/apikeys で取得します", "未知错误": "不明なエラー", "未能获取授权地址,请重试": "認可アドレスを取得できませんでした。再試行してください", "未能读取 cc-switch 数据": "cc-switch のデータを読み取れませんでした", "未领取成功": "受け取りに失敗しました", "本地 Ollama、OpenCode Zen 免费档这类上游要勾上,否则账号不可用": "ローカル Ollama、OpenCode Zen の無料枠などのアップストリームではチェックを入れてください。入れないとアカウントを使用できません", "本家有两个**互不替代**的凭证,按你要用的功能填,至少填一个:编码套餐 API Key 用于转发推理(打 {site})与查询窗口限额(每 N 小时 / 每周的剩余比例);jwt 用于领取套餐与查询余额(打 zcode.z.ai 的 billing 网关,官方叫 Coding Plan JWT,是一串三段点分的字符串)。余额两把都能查、但读到的东西不同:jwt 读到余额桶与套餐到期,API Key 读到窗口限额;而领取只认 jwt、转发只认 API Key。请填写 {label}账号的凭证 —— {plan}(最容易拿到的办法:直接用上方的「网页登录」—— 它会替你把这个 API Key 换好,两个凭证一起拿到。)": "本家には**互いに代替できない** 2 つの認証情報があり、使いたい機能に応じて入力してください。少なくともどちらか一方は必須です:コーディングプラン API Key は推論の転送用({site} を叩きます)とウィンドウクォータの照会用(N 時間ごと / 週ごとの残り割合);jwt はプランの受け取りと残高照会用(zcode.z.ai の billing ゲートウェイを叩きます。公式名称は Coding Plan JWT で、3 段のドット区切り文字列です)。残高はどちらでも照会できますが、読み取れる内容が異なります:jwt は残高バケットとプランの有効期限、API Key はウィンドウクォータを読み取ります;受け取りは jwt のみ、転送は API Key のみです。{label}アカウントの認証情報を入力してください —— {plan}(最も簡単な方法:上の「ウェブログイン」を使うこと —— この API Key を代わりに交換してくれ、2 つの認証情報をまとめて取得できます。)", "本机 Ollama 的 OpenAI 兼容端点,无需 API Key(默认已勾上「该上游无需鉴权」,鉴权头一个都不发)": "本機の Ollama の OpenAI 互換エンドポイント。API Key は不要です(既定で「このアップストリームは認証不要」がチェック済みで、認証ヘッダーは一切送信されません)", "本次未确认到账": "今回は付与が確認できませんでした", "条可导入": "件がインポート可能", "条配置,其中": "件の設定、うち", "桌面运行时不可用(Tauri 未初始化)": "デスクトップランタイムが利用できません(Tauri が未初期化)", "模型网关基址": "モデルゲートウェイのベース URL", "正在打开百度登录页…": "Baidu のログインページを開いています…", "正在扫描本机 cc-switch…": "本機の cc-switch をスキャンしています…", "正在换发访客凭证…": "ゲスト資格情報を発行中…", "正在添加…": "追加中…", "正在等待{name}登录完成;完成或取消后才能发起新的登录": "{name} のログイン完了を待っています;完了またはキャンセルしないと新しいログインを開始できません", "每周": "毎週", "每日": "毎日", "每月": "毎月", "没有则无法自动续期": "ないと自動更新できません", "没有匹配「{keyword}」的提供商": "「{keyword}」に一致するプロバイダーはありません", "添加 {name} 账号": "{name} アカウントを追加", "添加中…": "追加中…", "添加到 ": "追加先 ", "添加失败:{reason}": "追加に失敗しました:{reason}", "添加小浣熊账号": "小浣熊アカウントを追加", "添加方式": "追加方法", "添加访客账号": "ゲストアカウントを追加", "添加账号": "アカウントを追加", "火山引擎 Coding 套餐;通用推理接入点为 https://ark.cn-beijing.volces.com/api/v3": "Volcano Engine Coding プラン;汎用推論エンドポイントは https://ark.cn-beijing.volces.com/api/v3", "点击添加账号": "クリックしてアカウントを追加", "点开即预填,填 Key 接入": "開くと自動入力済み、Key を入力して接続", "点按钮后先过一次滑块验证(官方风控),随后打开登录页,登录完成即自动添加账号。
这是国际版官方唯一的登录方式;已在客户端登录过的,用「导入桌面端登录态」更快。": "ボタンを押すとまずスライダー認証(公式の不正対策)を 1 回行い、その後ログインページが開きます。ログイン完了で自動的にアカウントが追加されます。
これが国際版公式の唯一のログイン方式です。すでにクライアントでログイン済みの場合は、「デスクトップ版のログイン状態をインポート」を使う方が速いです。", "用 AutoClaw 账号绑定的手机号登录:点击「获取验证码」,收到短信后填入下方并登录。验证码由本机直接提交给官方接口,界面不显示 token。": "AutoClaw アカウントに紐付けられた電話番号でログインします:「コードを取得」をクリックし、SMS を受け取ったら下の欄に入力してログインしてください。認証コードは本機から直接公式 API に送信され、画面に token は表示されません。", "用 CatPaw 账号完成登录(美团 passport),成功后自动加入账号列表。": "CatPaw アカウントでログインを完了します(Meituan passport)。成功すると自動でアカウント一覧に追加されます。", "用 Loomy 账号绑定的手机号登录:点「获取验证码」后填入即可。这是本家最省事的入口。": "Loomy アカウントに紐付けられた電話番号でログインします:「コードを取得」をクリックして入力するだけです。本家で最も手軽な入り口です。", "用于转发;形如 apiKey.secret 两段点分(不填则这个账号不能转发)": "転送用。apiKey.secret の 2 段ドット区切り形式です(未入力の場合、このアカウントは転送できません)", "用于领取套餐与查询余额;不填则这个账号不能领取与查余额": "プランの受け取りと残高照会用。未入力の場合、このアカウントは受け取りと残高照会ができません", "用户 ID": "ユーザー ID", "用绑定的手机号登录:点「获取验证码」后填入即可。这是国内版官方唯一的登录方式。": "紐付けられた電話番号でログインします:「コードを取得」をクリックして入力するだけです。これが中国版公式の唯一のログイン方式です。", "留空则用提供商名称": "空欄の場合はプロバイダー名を使用", "登录 / 添加 {name} 账号": "ログイン / {name} アカウントを追加", "登录 session(一长串)": "ログイン session(長い文字列)", "登录中…": "ログイン中…", "登录失败:{message}": "ログインに失敗しました:{message}", "登录已结束": "ログインは終了しました", "登录并添加": "ログインして追加", "登录态文件路径:~/.box-agent/config/auth.json(Windows:C:\\Users\\<你的用户名>\\.box-agent\\config\\auth.json)": "ログイン状態ファイルのパス:~/.box-agent/config/auth.json(Windows:C:\\Users\\<ユーザー名>\\.box-agent\\config\\auth.json)", "确定删除自定义提供商「{name}」?将同时删除该提供商下 {count} 个账号,删除后无法恢复。": "カスタムプロバイダー「{name}」を削除しますか?このプロバイダー配下の {count} 個のアカウントも同時に削除され、削除後は元に戻せません。", "等待 Accio {label}登录完成…": "Accio {label} のログイン完了を待っています…", "等待 CatPaw 登录完成…": "CatPaw のログイン完了を待っています…", "等待 Cline 授权确认…": "Cline の認可確認を待っています…", "等待 CodeArts 登录完成…": "CodeArts のログイン完了を待っています…", "等待 Google 授权完成…": "Google の認可完了を待っています…", "等待 KukuAI 登录完成…": "KukuAI のログイン完了を待っています…", "等待 OfficeAce 登录完成…": "OfficeAce のログイン完了を待っています…", "等待 OrcaTerm 登录完成…": "OrcaTerm のログイン完了を待っています…", "等待 Qoder 授权完成…": "Qoder の認可完了を待っています…", "等待 Trae 授权完成…": "Trae の認可完了を待っています…", "等待 ZCode {label}授权完成…": "ZCode {label} の認可完了を待っています…", "等待小浣熊登录完成…": "小浣熊のログイン完了を待っています…", "等待登录完成…": "ログインの完了を待っています…", "等待网页登录…": "ウェブログインを待っています…", "粘贴 API Key": "API Key を貼り付け", "粘贴 Accio 的 accessToken": "Accio の accessToken を貼り付け", "粘贴 Antigravity 的 Google refresh token(以 1// 开头;直接粘贴含 refresh_token= 的整行也行)。
这是网页登录之外的手工入口(例如从已登录的官方 IDE 里导出)。refresh token 不会过期,access token 到期由网关自动续期;令牌丢了只能重新走 Google 授权,请妥善保存。": "Antigravity の Google refresh token を貼り付け(1// で始まる;refresh_token= を含む行全体をそのまま貼り付けても可)。
これはウェブログイン以外の手動入り口です(例:ログイン済みの公式 IDE からエクスポート)。refresh token は期限切れにならず、access token の期限切れはゲートウェイが自動で更新します;トークンを紛失すると Google の認可をやり直すしかないため、大切に保管してください。", "粘贴 Command Code 的 API Key(user_ 开头;从官方 CLI 的 ~/.commandcode/auth.json 或网页 studio 获取)。整行 / 带引号 / 带 Bearer 前缀地粘都行,网关会自己剥成裸 key。key 不过期、也没有续期接口,失效后重新获取即可;添加时网关会做一次轻量探活,失败不影响添加。": "Command Code の API Key を貼り付け(user_ で始まる;公式 CLI の ~/.commandcode/auth.json またはウェブの studio から取得)。行全体 / 引用符付き / Bearer プレフィックス付きのまま貼り付けても構いません。ゲートウェイが自動で裸の key に剥がします。key は期限切れにならず、更新用 API もありません。無効になったら取得し直してください;追加時にゲートウェイが軽量な死活確認を 1 回行いますが、失敗しても追加には影響しません。", "粘贴 Cookie": "Cookie を貼り付け", "粘贴 Google refresh token": "Google refresh token を貼り付け", "粘贴 OrcaTerm 的 OAuth accessToken(JWT,三段点分;从桌面客户端 data.bin 或 Web 版 Cookie ot_session 获取)。直接粘贴含 Bearer / ot_session= 的整行也行,网关会自己剥成裸 token。添加后由网关自动续期(上游有续期接口),无需跟随 2 小时时效手动更换。": "OrcaTerm の OAuth accessToken(ドット区切り 3 パートの JWT。デスクトップクライアントの data.bin か Web 版の Cookie ot_session から取得)を貼り付けます。Bearer / ot_session= を含む行をそのまま貼ってもよく、ゲートウェイが裸のトークンに剥がします。追加後はゲートウェイが自動で更新するため(上流に更新 API があります)、2 時間の有効期限を手動で追う必要はありません。", "粘贴 Qoder 个人访问令牌(pt-…)": "Qoder の個人アクセストークン(pt-…)を貼り付け", "粘贴 accessToken": "accessToken を貼り付け", "粘贴 access_token(一长串 JWT)": "access_token(長い JWT)を貼り付け", "粘贴 session cookie": "session cookie を貼り付け", "粘贴 token / refreshToken": "token / refreshToken を貼り付け", "粘贴 workos:… 开头的令牌(不带前缀也会自动补上)": "workos:… で始まるトークンを貼り付け(プレフィックスがなくても自動で補われます)", "粘贴智谱清言的访问令牌(JWT,三段点分)。获取方式:浏览器打开 chatglm.cn 并登录后,在开发者工具的 Application → Cookies 里复制 chatglm_token 的值(也可以直接粘 chatglm_token=…; 整行)。粘贴后会先向上游校验一次,校验通过才落账号;登录账号的积分、签到能力都能用,之后由网关自动续期(上游有续期接口)。": "智谱清言のアクセストークン(3 つのドット区切り部分からなる JWT)を貼り付けてください。取得方法:ブラウザで chatglm.cn を開いてログインし、開発者ツールの Application → Cookies から chatglm_token の値をコピーします(chatglm_token=…; の行をそのまま貼っても可)。貼り付けたあと上流に対して一度検証し、通った場合のみアカウントを保存します。ログイン済みアカウントではポイントと签到の機能が使え、以降はゲートウェイが自動で更新します(上流に更新インターフェースがあります)。", "粘贴登录凭据": "ログイン認証情報を貼り付け", "粘贴的是登录 session(同时是模型网关的 token)。Loomy 没有续期接口,session 有效期约 14 天,过期后重新登录即可。": "貼り付けるのはログイン session です(同時にモデルゲートウェイの token でもあります)。Loomy には更新用 API がなく、session の有効期間は約 14 日です。期限切れ後は再ログインしてください。", "粘贴网关凭据": "ゲートウェイ認証情報を貼り付け", "粘贴网页登录态 cookie monkeycode_ai_session 的值(在浏览器里复制整段 Cookie 直接粘贴也行,网关会自己剥出值)。
{siteNote}
MonkeyCode 没有续期接口:session 有效期约 30 天(硬限制),过期后重新登录网页、再粘贴一次即可。": "ウェブのログイン状態 cookie monkeycode_ai_session の値を貼り付け(ブラウザーで Cookie 全体をコピーしてそのまま貼り付けても可。ゲートウェイが値を自動で取り出します)。
{siteNote}
MonkeyCode には更新用 API がありません:session の有効期間は約 30 日(ハードリミット)で、期限切れ後はウェブに再ログインして貼り付け直せば済みます。", "粘贴访问令牌": "アクセストークンを貼り付け", "系统浏览器": "システムブラウザ", "系统浏览器可复用已有登录态(国际版推荐);内嵌窗口更干净。": "システムブラウザは既存のログイン状態を再利用できます(国際版で推奨);内蔵ウィンドウの方がクリーンです。", "系统浏览器打开(复用已登录的 Cline 账号);完成后自动加入列表": "システムブラウザで開く(ログイン済みの Cline アカウントを再利用);完了後は自動でリストに追加されます", "系统浏览器打开(复用已登录的 Google 账号);完成后自动加入列表": "システムブラウザで開きます(ログイン済みの Google アカウントを再利用);完了後は自動でリストに追加されます", "系统浏览器打开(复用已登录的 Zai / Google 账号);完成后自动加入列表": "システムブラウザで開く(ログイン済みの Zai / Google アカウントを再利用);完了後は自動でリストに追加されます", "系统浏览器打开(复用已登录的美团账号);完成后自动加入列表": "システムブラウザで開く(ログイン済みの Meituan アカウントを再利用);完了後は自動でリストに追加されます", "系统浏览器打开(复用已登录账号);完成后自动加入列表": "システムブラウザで開く(ログイン済みアカウントを再利用);完了後は自動でリストに追加されます", "系统默认浏览器": "システムの既定ブラウザ", "编码套餐 API Key": "コーディングプラン API Key", "网关 Secret": "ゲートウェイシークレット", "网页登录": "ウェブログイン", "网页登录的打开方式": "ウェブログインの開き方", "网页登录(Zai / Google)": "ウェブログイン(Zai / Google)", "自定义": "カスタム", "自建聚合面板:填你自己的站点地址。余额查询用该账号的 API Key 打 {base}/v1/usage,不需要额外配置": "自前のアグリゲーションパネル:自分のサイトアドレスを入力。残高照会はこのアカウントの API キーで {base}/v1/usage を叩きます。追加設定不要", "自建聚合面板:填你自己的站点地址;余额查询要另填 NewAPI 的个人访问令牌(见下方「余额查询」一段)": "自前のアグリゲーションパネル:自分のサイトアドレスを入力。残高照会には別途 NewAPI の個人アクセストークンが必要です(下の「残高照会」の節を参照)", "获取风控配置失败,将直接尝试领取:{message}": "不正対策設定の取得に失敗しました。そのまま受け取りを試みます:{message}", "获取验证码": "コードを取得", "访客模式": "ゲストモード", "访客模式(免登录)": "ゲストモード(ログイン不要)", "该上游无需鉴权(不发送鉴权头)": "このアップストリームは認証不要(認証ヘッダーを送信しません)", "该提供商": "このプロバイダー", "该提供商账号添加功能即将上线": "このプロバイダーのアカウント追加機能は近日公開予定です", "该自定义提供商已不存在(可能已被删除),请刷新后重试": "このカスタムプロバイダーは存在しません(削除された可能性があります)。更新してから再試行してください", "请先选择一个自定义提供商": "先にカスタムプロバイダーを選択してください", "请在弹出的滑块中完成验证(官方要求的风控步骤)": "表示されたスライダーで認証を完了してください(公式が求める不正対策ステップ)", "请填写 11 位大陆手机号": "11 桁の中国本土の携帯番号を入力してください", "请填写 6 位数字验证码": "6 桁の認証コードを入力してください", "请填写 Base URL": "Base URL を入力してください", "请填写 {label}": "{label} を入力してください", "请填写名称": "名前を入力してください", "请完成验证…": "認証を完了してください…", "读取 %APPDATA%/AutoClaw/auth.json 并解密,仅 Windows": "%APPDATA%/AutoClaw/auth.json を読み込んで復号します。Windows のみ", "读取 ~/.cline/data/settings/providers.json,需已在 Cline 客户端登录": "~/.cline/data/settings/providers.json を読み込みます。Cline クライアントでログイン済みである必要があります", "读取 ~/.meituan-catpaw/auth.json,需已在 CatPaw 客户端登录": "~/.meituan-catpaw/auth.json を読み込みます。CatPaw クライアントでログイン済みである必要があります", "读取本机 KukuAI 客户端登录态(%APPDATA%\\baidugenflowpro\\Network\\Cookies),需已在 KukuAI 客户端登录": "本機の KukuAI クライアントのログイン状態を読み込みます(%APPDATA%\\baidugenflowpro\\Network\\Cookies)。KukuAI クライアントでログイン済みである必要があります", "读取本机 OrcaTerm 客户端登录态(%APPDATA%\\com.orcaterm-desktop.app\\data.bin),需已在 OrcaTerm 客户端登录": "ローカルの OrcaTerm クライアントのログイン状態(%APPDATA%\\com.orcaterm-desktop.app\\data.bin)を読み取ります。OrcaTerm クライアントでのログインが必要です", "读取本机智谱清言客户端登录态(%APPDATA%\\chatglm\\Network\\Cookies),需已在客户端登录": "本機の智谱清言クライアントのログイン状態を読み取ります(%APPDATA%\\chatglm\\Network\\Cookies)。クライアントでログイン済みである必要があります", "读本机官方客户端(Tencent WorkBuddy / WorkBuddy AI)当前登录的账号:自动定位其凭证目录里最新的登录态文件(需已在本机官方客户端登录)。导入后由网关自动续期,无需跟随 2 小时时效手动换令牌。": "このマシンの公式クライアント(Tencent WorkBuddy / WorkBuddy AI)で現在ログイン中のアカウントを読み取ります:認証情報ディレクトリ内の最新のログイン状態ファイルを自動で特定します(このマシンの公式クライアントにログイン済みである必要があります)。インポート後はゲートウェイが自動で更新するため、2 時間の有効期限に合わせて手動でトークンを交換する必要はありません。", "读本机客户端当前登录态(明文 Cookie,无需解密)。客户端运行时 Cookies 文件被独占占用,导入前请先关闭 KukuAI 客户端。": "本機クライアントの現在のログイン状態を読み込みます(平文 Cookie、復号不要)。クライアントの実行中は Cookies ファイルが排他占有されるため、インポート前に KukuAI クライアントを終了してください。", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。": "本機クライアントの現在のログイン状態を読み込みます。毎回リアルタイムで読み取ります(この記録を削除してもクライアントのログイン状態には影響しません)。", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。客户端重新登录后点「刷新 Token」同步。": "本機クライアントの現在のログイン状態を読み込みます。毎回リアルタイムで読み取ります(この記録を削除してもクライアントのログイン状態には影響しません)。クライアントで再ログインしたら「Token を更新」をクリックして同期してください。", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。客户端重新登录后重新导入即可。": "本機クライアントの現在のログイン状態を読み込みます。毎回リアルタイムで読み取ります(この記録を削除してもクライアントのログイン状態には影響しません)。クライアントで再ログインしたら再インポートしてください。", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。用 Zai / Google 登录客户端的用户走这一条。": "本機クライアントの現在のログイン状態を読み込みます。毎回リアルタイムで読み取ります(この記録を削除してもクライアントのログイン状態には影響しません)。Zai / Google でクライアントにログインしているユーザーはこちらを使ってください。", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。这一条归入 {label}。": "本機クライアントの現在のログイン状態を読み込みます。毎回リアルタイムで読み取ります(この記録を削除してもクライアントのログイン状態には影響しません)。これは {label} に分類されます。", "读本机客户端当前登录的 OAuth 令牌(明文 JSON,无需解密)。导入后由网关自动续期,无需跟随客户端的 2 小时时效手动换令牌。": "ローカルクライアントが現在ログインしている OAuth トークンを読み取ります(平文 JSON、復号不要)。インポート後はゲートウェイが自動で更新するため、クライアントの 2 時間の有効期限に合わせて手動で切り替える必要はありません。", "读本机客户端当前的登录态。客户端的 Cookies 是 DPAPI 加密的(Chromium os_crypt),因此仅 Windows 可用;客户端正在运行时可能读不到该文件,先退出客户端再试即可(也可改用「填写凭证」粘贴令牌)。": "本機クライアントの現在のログイン状態を読み取ります。クライアントの Cookies は DPAPI 暗号化(Chromium os_crypt)されているため、Windows でのみ利用できます。クライアントの起動中はこのファイルを読めないことがあるので、クライアントを終了してから再試行してください(「資格情報を入力」でトークンを貼り付ける方法でも構いません)。", "账号信息": "アカウント情報", "账号信息不完整,请刷新后重试": "アカウント情報が不完全です。更新してから再試行してください", "账号已添加,但请留意:{warning}": "アカウントを追加しましたが、ご注意ください:{warning}", "账号版本": "アカウントバージョン", "账号类型": "アカウント種別", "账号:{name}
": "アカウント:{name}
", "走 Inference Providers 路由,Key 在 hf.co/settings/tokens 创建": "Inference Providers ルートを使用します。Key は hf.co/settings/tokens で作成します", "还没有账号": "アカウントはまだありません", "这一家当前不支持网页登录,请改用填写凭证": "このプロバイダーは現在ウェブログインに対応していません。認証情報の入力に切り替えてください", "这个账号当前没有可自动领的活动(只自动领每日登录赠送积分)": "このアカウントには現在自動で受け取れるイベントがありません(自動で受け取るのは毎日ログインで付与されるポイントのみです)", "这份额度走「活动套餐」通道:若转发时提示编码套餐已到期,": "このクォータは「イベントプラン」の経路を使用します:転送時にコーディングプランの期限切れが表示された場合は、", "这里填国内站(monkeycode-ai.com)的账号:请粘贴国内站的 session。国际站(monkeycode-ai.net)是另一家 provider、另一套账号,两边的凭证不通用。": "ここには中国サイト(monkeycode-ai.com)のアカウントを入力します:中国サイトの session を貼り付けてください。国際サイト(monkeycode-ai.net)は別のプロバイダーで、アカウントも別です。両者の認証情報は共用できません。", "这里填国际站(monkeycode-ai.net)的账号:请粘贴国际站的 session。国内站(monkeycode-ai.com)是另一家 provider、另一套账号,两边的凭证不通用。": "ここには国際サイト(monkeycode-ai.net)のアカウントを入力します:国際サイトの session を貼り付けてください。中国サイト(monkeycode-ai.com)は別のプロバイダーで、アカウントも別です。両者の認証情報は共用できません。", "选择 CatPaw 客户端的登录态文件 auth.json(Windows:C:\\Users\\<你的用户名>\\.meituan-catpaw\\auth.json;macOS / Linux:~/.meituan-catpaw/auth.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端。": "CatPaw クライアントのログイン状態ファイル auth.json を選択します(Windows:C:\\Users\\<ユーザー名>\\.meituan-catpaw\\auth.json、macOS / Linux:~/.meituan-catpaw/auth.json)。インポート後は認証情報がゲートウェイ側に保存され、単独で転送できるようになります(本機クライアントに依存しません)。", "选择 Cline 客户端的登录态文件 providers.json(Windows:C:\\Users\\<你的用户名>\\.cline\\data\\settings\\providers.json;macOS / Linux:~/.cline/data/settings/providers.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端;这一条归入 {label}。": "Cline クライアントのログイン状態ファイル providers.json を選択します(Windows:C:\\Users\\<ユーザー名>\\.cline\\data\\settings\\providers.json、macOS / Linux:~/.cline/data/settings/providers.json)。インポート後は認証情報がゲートウェイ側に保存され、単独で転送できるようになります(本機クライアントに依存しません)。この項目は {label} に登録されます。", "选择 KukuAI 客户端的 Cookies 文件(%APPDATA%\\baidugenflowpro\\Network\\Cookies):它是**二进制** SQLite 数据库(无扩展名,不是 JSON)。导入时读的是你选中文件的副本、不和运行中的客户端抢占用,因此**无需先关闭客户端**。导入后凭证直接落在网关、可独立转发。": "KukuAI クライアントの Cookies ファイルを選択します(%APPDATA%\\baidugenflowpro\\Network\\Cookies):これは**バイナリ**の SQLite データベースです(拡張子なし、JSON ではありません)。インポート時は選択したファイルのコピーを読み、実行中のクライアントと占有を争いません。したがって**クライアントを終了する必要はありません**。インポート後は認証情報がゲートウェイ側に保存され、単独で転送できるようになります。", "选择凭证文件导入": "認証情報ファイルからインポート", "选择官方客户端的登录态凭证文件(workbuddy-desktop.info / workbuddy-desktop-ai.info)或 wb2api 导出的账号 JSON(嵌套 / 扁平形均可)。": "公式クライアントのログイン状態の認証情報ファイル(workbuddy-desktop.info / workbuddy-desktop-ai.info)または wb2api がエクスポートしたアカウント JSON(ネスト / フラット形式どちらも可)を選択してください。", "选择小浣熊客户端的登录态文件 auth.json(Windows:C:\\Users\\<你的用户名>\\.box-agent\\config\\auth.json;macOS / Linux:~/.box-agent/config/auth.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端。": "小浣熊クライアントのログイン状態ファイル auth.json を選択します(Windows:C:\\Users\\<ユーザー名>\\.box-agent\\config\\auth.json、macOS / Linux:~/.box-agent/config/auth.json)。インポート後は認証情報がゲートウェイ側に保存され、単独で転送できるようになります(本機クライアントに依存しません)。", "选择提供商": "プロバイダーを選択", "选择的文件不是合法 JSON": "選択したファイルは有効な JSON ではありません", "选择要添加账号的提供商": "アカウントを追加するプロバイダーを選択", "重新扫描": "再スキャン", "鉴权": "認証", "阿里云 Token Plan 套餐(国际站)": "Alibaba Cloud Token Plan プラン(国際版サイト)", "阿里云百炼 Coding 套餐(国内站)": "Alibaba Cloud Model Studio Coding プラン(中国版サイト)", "阿里云百炼 Coding 套餐(国际站)": "Alibaba Cloud Model Studio Coding プラン(国際版サイト)", "阿里云百炼模型服务(国际站,OpenAI 兼容模式)": "Alibaba Cloud Model Studio モデルサービス(国際版サイト、OpenAI 互換モード)", "需要图形验证码:登录窗口已弹出,请填写后继续": "画像認証が必要です:ログインウィンドウが開きました。入力して続行してください", "预置 API": "プリセット API", "领取 CodeArts 每日福利": "CodeArts の毎日特典を受け取る", "领取失败:{message}": "受け取りに失敗しました:{message}", "领取并让官方确认": "受け取って公式の確認を待つ", "风控验证配置不完整,请稍后重试": "不正対策認証の設定が不完全です。しばらくしてから再試行してください", "验证码": "認証コード", "验证码已发送。收到后填入下方并点「登录并添加」": "認証コードを送信しました。受け取ったら下の欄に入力し、「ログインして追加」をクリックしてください", "验证码已发送,请查看手机短信": "認証コードを送信しました。携帯の SMS をご確認ください", "验证码已发送,请查看手机短信。填入下方并点「登录并添加」即完成登录": "認証コードを送信しました。携帯の SMS をご確認ください。下の欄に入力して「ログインして追加」をクリックすると、ログインが完了します", "验证码已发送,请查看短信": "認証コードを送信しました。SMS をご確認ください", "验证码校验失败,请重试": "認証コードの検証に失敗しました。再試行してください", "验证码校验超时,请重试": "認証コードの検証がタイムアウトしました。再試行してください", "验证码组件不可用,请重试": "認証コンポーネントが利用できません。再試行してください", "验证码组件初始化超时,请重试": "認証コンポーネントの初期化がタイムアウトしました。再試行してください", "验证码组件加载失败,请检查网络后重试": "認証コンポーネントの読み込みに失敗しました。ネットワークを確認して再試行してください", "验证码组件加载异常,请重试": "認証コンポーネントの読み込みでエラーが発生しました。再試行してください", "验证码组件加载超时,请检查网络后重试": "認証コンポーネントの読み込みがタイムアウトしました。ネットワークを確認して再試行してください", "验证码组件未加载,请重启应用后重试": "認証コンポーネントが読み込まれていません。アプリを再起動してから再試行してください", "(免费额度池,模型名带 cline-free/ 前缀)。": "(無料枠プール、モデル名に cline-free/ プレフィックスが付きます)。", "(其中 {n} 把恢复为不限制)": "(うち {n} 個は無制限に戻ります)", "(必填)": "(必須)", "(有效期 {window})": "(有効期間 {window})", "(订阅池,模型名带 cline-pass/ 前缀,需要账号有对应订阅)。": "(サブスクプール、モデル名に cline-pass/ プレフィックスが付きます。アカウントに対応するサブスクリプションが必要です)。", ",下一次最快 {minutes} 分钟后": "、次回は最短 {minutes} 分後", ",并从 {n} 把 Key 的可用提供商里移除": "、Key {n} 個を利用可能なプロバイダーからも除外しました" });
+window.wbI18nDict = window.wbI18nDict || {}; Object.assign(window.wbI18nDict, { " · 模型 {head}{rest}": " · モデル {head}{rest}", " 等 {n} 个": " など {n} 個", "1// 开头的 Google refresh token(也可直接粘贴 refresh_token=… 整行)": "1// で始まる Google refresh token(refresh_token=… の行をそのまま貼り付けても可)", "11 位大陆手机号": "11 桁の中国本土の携帯番号", "1~64 个字符,账号列表里按它分组显示": "1~64 文字、アカウント一覧ではこれでグループ表示されます", "6 位数字": "6 桁の数字", "
没有可自动领的活动": "自動で受け取れるイベントはありません", "领到的是套餐赠送积分,不会增加福利模型的 token 池;": "
受け取るのはプラン特典ポイントで、特典モデルの token プールは増えません;", "Anthropic 兼容端点在 https://api.deepseek.com/anthropic(协议换 anthropic 时填它)": "Anthropic 互換エンドポイントは https://api.deepseek.com/anthropic です(プロトコルを anthropic に切り替えるときにこれを入力)", "Anthropic 协议填根地址,不要带 /v1": "Anthropic プロトコルではルートアドレスを入力し、/v1 は付けないでください", "Antigravity": "Antigravity", "AutoClaw 国内版": "AutoClaw 中国版", "AutoClaw 国际版": "AutoClaw 国際版", "BDUSS 必填;请粘贴**完整 Cookie**(Cookie 编辑器一键导出即可)—— 其中 **PTOKEN 必须保留**,网关要用它向百度换发 KukuAI 业务会话令牌,缺了它模型刷新会报「未登录」。支持整段 Cookie 头、Cookie 编辑器导出的 JSON 数组,或 {BDUSS, STOKEN} 对象。KukuAI 没有刷新机制,登录态过期后重新粘贴即可。": "BDUSS は必須です;**完全な Cookie** を貼り付けてください(Cookie エディターのワンクリック書き出しで構いません)—— このうち **PTOKEN は必ず残してください**。ゲートウェイはこれを使って Baidu から KukuAI の業務セッショントークンを発行してもらうため、欠けるとモデル更新時に「未ログイン」と表示されます。Cookie ヘッダー全体、Cookie エディターが書き出した JSON 配列、または {BDUSS, STOKEN} オブジェクトに対応しています。KukuAI には更新の仕組みがないため、ログイン状態の期限が切れたら貼り直せば済みます。", "BDUSS=…; STOKEN=…(或 Cookie 编辑器导出的 JSON)": "BDUSS=…; STOKEN=…(または Cookie エディターが書き出した JSON)", "CatPaw 的 X-Passport-Token(登录态 Cookie)": "CatPaw の X-Passport-Token(ログイン状態 Cookie)", "Cline Pass 的 API Key 在 app.cline.bot 获取(订阅制);端点为 OpenAI 兼容,模型清单以 Cline 控制台为准,模型名在模型管理里按裸名添加(如 glm-5.2 / kimi-k2.7-code / deepseek-v4-pro);上游按客户端形态校验,所需的客户端请求头已随卡预置": "Cline Pass の API Key は app.cline.bot で取得します(サブスクリプション制)。エンドポイントは OpenAI 互換で、モデル一覧は Cline コンソールが正となります。モデル名はモデル管理で接頭辞なしの名前のまま追加します(例:glm-5.2 / kimi-k2.7-code / deepseek-v4-pro)。上流はクライアントの形態を検証するため、必要なクライアントリクエストヘッダーはこのカードにあらかじめ設定されています", "Cloud-IDE-JWT(三段点分)": "Cloud-IDE-JWT(3 段のドット区切り)", "Command Code": "Command Code", "JWT(三段点分;也可直接粘贴 Bearer 整行或 data.bin 内容)": "JWT(ドット区切り 3 パート。Bearer 行全体や data.bin の中身を貼っても可)", "JWT(三段点分;也可直接粘贴 chatglm_token=… 整行)": "JWT(3 つのドット区切り部分。chatglm_token=… の行をそのまま貼っても可)", "MonkeyCode": "MonkeyCode", "MonkeyCode 国际版": "MonkeyCode 国際版", "NVIDIA NIM 托管端点,Key 在 integrate.api.nvidia.com 申请": "NVIDIA NIM のマネージドエンドポイント。Key は integrate.api.nvidia.com で申請します", "OfficeAce 果办": "OfficeAce", "accessToken 是 Accio 的登录凭证(一长串不透明 token,不是 JWT);refreshToken 可选,填了之后到期能自动续期。请填写 {label}账号的凭证 —— {siteNote}(最容易拿到的办法:直接用上方的「网页登录」,不需要手工找 token。)": "accessToken は Accio のログイン認証情報です(長い不透明な token 文字列で、JWT ではありません);refreshToken は任意で、入力すると期限切れ時に自動更新できます。{label}アカウントの認証情報を入力してください —— {siteNote}(最も簡単な方法:上の「ウェブログイン」を使えば token を手動で探す必要はありません。)", "accessToken 是 Trae 的 Cloud-IDE-JWT(三段点分),refreshToken 用于到期自动续期(本家 refreshToken 一次一换:换发一次旧的即作废,所以两份程序别同时刷同一个账号)。
手工粘贴时请连 machineId / deviceId 一起填:上游把它们与登录时上传的设备公钥绑在一起判设备,凭空换一对会撞 2xxxx 那族设备绑定拒绝。
没有这三样时的正路是用上方的「网页登录」;容器 / 远程部署形态按提示粘贴地址栏回调地址即可。": "accessToken は Trae の Cloud-IDE-JWT(3 段のドット区切り)です。refreshToken は期限切れ時の自動更新に使用します(本家の refreshToken は 1 回ごとに交換され、一度更新すると古いものは無効になります。そのため 2 つのプログラムで同じアカウントを同時に更新しないでください)。
手動で貼り付ける場合は machineId / deviceId も一緒に入力してください:アップストリームはこれらをログイン時にアップロードされたデバイス公開鍵と紐付けてデバイスを判定するため、根拠なく別のペアにすると 2xxxx 系のデバイスバインディング拒否に当たります。
この 3 つがない場合の正道は上の「ウェブログイン」を使うことです;コンテナ / リモートデプロイ形態では案内に従ってアドレスバーのコールバックアドレスを貼り付けてください。", "monkeycode_ai_session 的值(也可直接粘贴整段 Cookie)": "monkeycode_ai_session の値(Cookie 全体をそのまま貼り付けても可)", "ms- 开头的 API 令牌": "ms- で始まる API トークン", "refreshToken 可选,填了到期可自动续期;两者都能从小浣熊客户端登录态文件里取到。": "refreshToken は任意で、入力すると期限切れ時に自動更新できます;どちらも小浣熊クライアントのログイン状態ファイルから取得できます。", "refreshToken 可选,填了可自动续期;两者都能从客户端登录态文件取到。同一个 Cline 账号两个池都能用,这里归入 {label}。": "refreshToken は任意で、入力すると自動更新できます;どちらもクライアントのログイン状態ファイルから取得できます。同じ Cline アカウントはどちらのプールでも使え、ここでは {label} に分類されます。", "token 支持 enc: 前缀(Windows 上自动解密)。未填 refreshToken 无法自动续期。": "token は enc: プレフィックスに対応しています(Windows では自動復号)。refreshToken を入力しないと自動更新できません。", "token 是登录态 Cookie;CatPaw 没有刷新机制,过期后需在客户端重新登录。": "token はログイン状態 Cookie です;CatPaw には更新の仕組みがないため、期限切れ後はクライアントで再ログインが必要です。", "user_ 开头的 API Key(也可直接粘贴 Authorization: Bearer … 整行)": "user_ で始まる API Key(Authorization: Bearer … の行をそのまま貼り付けても可)", "{label} 网页登录的打开方式": "{label} のウェブログインの開き方", "{label} 账号地区": "{label} アカウントの地域", "{label} 账号的添加方式": "{label} アカウントの追加方法", "{name} 不是合法 JSON:{reason}": "{name} は有効な JSON ではありません:{reason}", "{name}要粘一个 JSON 对象(形如 {sample})": "{name} には JSON オブジェクトを貼り付けてください(例:{sample})", "{n} 个账号": "{n} 個のアカウント", "{n} 个账号,点击添加": "{n} 個のアカウント、クリックして追加", "{seconds}s 后重发": "{seconds} 秒後に再送", "✅ {label}账号已添加": "✅ {label} アカウントを追加しました", "✅ {label}账号已添加{name}": "✅ {label} アカウントを追加しました{name}", "✅ 已从 cc-switch 导入 {n} 个供应商": "✅ cc-switch から {n} 個のプロバイダーをインポートしました", "✅ 已创建自定义提供商「{name}」并添加账号": "✅ カスタムプロバイダー「{name}」を作成し、アカウントを追加しました", "✅ 已删除自定义提供商「{name}」{accounts}{keys}": "✅ カスタムプロバイダー「{name}」を削除しました{accounts}{keys}", "✅ 已更新已有账号{name}(同一把 API Key 只保留一条,重复添加会合并)": "✅ 既存アカウント{name}を更新しました(同じ API Key は 1 件のみ保持し、再追加はマージされます)", "✅ 登录成功,{edition}账号已加入列表": "✅ ログインに成功し、{edition}アカウントをリストに追加しました", "✅ 领取成功:{planId}{period}": "✅ 受け取りに成功しました:{planId}{period}", " 同一家可以放多把 key,按优先级轮换。": " 同じプロバイダーに複数の key を置くことができ、優先度に従ってローテーションされます。", "「{name}」的账号添加功能还在开发中,敬请期待。": "「{name}」のアカウント追加機能は開発中です。ご期待ください。", "一个 Key 用遍多家模型,模型名用「厂商/模型」全称(如 deepseek/deepseek-chat)": "1 つの Key で複数のプロバイダーのモデルを利用できます。モデル名は「ベンダー/モデル」の完全名を指定します(例:deepseek/deepseek-chat)", "上游不要鉴权时留空,并勾选下面一项(留空又不勾会被当成未配置凭证)": "アップストリームが認証不要の場合は空欄にし、下の項目にチェックを入れてください(空欄かつ未チェックでは認証情報未設定として扱われます)", "上游信息": "アップストリーム情報", "不可领({status})": "受け取り不可({status})", "不支持导入": "インポートに対応していません", "不是有效的凭证文件:内容要是一个 JSON 对象": "有効な認証情報ファイルではありません:内容は JSON オブジェクトである必要があります", "不是有效的凭证文件:需要包含 accessToken 与 uid": "有効な認証情報ファイルではありません:accessToken と uid が必要です", "不是自定义提供商": "カスタムプロバイダーではありません", "不需要 Key:转发与拉取模型都不发送鉴权头": "Key は不要:転送とモデル取得のいずれも認証ヘッダーを送信しません", "不需要登录:点下面的按钮,网关会直接在智谱清言换发一份访客凭证并加入账号列表(也可以先填个备注名)。访客凭证可以直接用来对话,免费额度由上游按设备发放。
注意:访客账号没有积分体系 —— 它与「会员积分」「每日登录积分」「活动领取」相关的接口一律需要登录,因此那些能力对访客会如实跳过(账号页的积分、签到中心都不显示读数)。想要积分就用「填写凭证」粘一个已登录账号的令牌,或「导入桌面端登录态」。": "ログイン不要です。下のボタンを押すと、ゲートウェイが智谱清言からゲスト資格情報を直接取得してアカウント一覧に追加します(先にメモ名を入力しても構いません)。ゲスト資格情報はそのまま会話に使え、無料枠は上流がデバイス単位で発行します。
注意:ゲストアカウントにはポイント体系がありません。会員ポイント・毎日ログインポイント・アクティビティ受け取りの各インターフェースはすべてログインが必要なため、これらの機能はゲストではスキップされます(アカウントページのポイントや签到センターには数値が表示されません)。ポイントが必要な場合は「資格情報を入力」でログイン済みアカウントのトークンを貼り付けるか、「デスクトップのログイン状態をインポート」してください。", "两版账号可同时保存,各自一份模型清单(国内版与国际版是两家提供商,可分别启用与映射)。": "両版のアカウントは同時に保存でき、それぞれ独自のモデルカタログを持ちます(中国版と国際版は別々のプロバイダーで、個別に有効化とマッピングができます)。", "中国版": "中国版", "今天没有需要领的活动(都已到账)": "本日受け取る必要のあるイベントはありません(すべて付与済み)", "今天(北京时间 {day})已试 {attempts} 次,还能试 {left} 次{next}
": "本日(北京時間 {day})は {attempts} 回試行済み、あと {left} 回試せます{next}
", "从别的机器(或 OfficeAce 桌面端 models.json)取三项贴进来:模型网关基址(baseUrl,形如 https://modelgw-…/v2)与 modelAppKey / modelAppSecret。这三项就能转发(网关凭据不过期);控制面临时凭据(accessKeyId 等)可选,留空则额度/自动续期不可用,但不影响转发。": "別のマシン(または OfficeAce デスクトップ版の models.json)から次の 3 項目を取り出して貼り付けてください:モデルゲートウェイのベース URL(baseUrl、https://modelgw-…/v2 の形式)と modelAppKey / modelAppSecret。この 3 項目だけで転送できます(ゲートウェイ認証情報は無期限)。コントロールプレーンの一時認証情報(accessKeyId など)は任意で、空欄の場合は残高照会と自動更新が使えませんが、転送には影響しません。", "从本机导入桌面端登录态": "本機からデスクトップ版のログイン状態をインポート", "任务镜像 id": "タスクイメージ id", "余额查询": "残高照会", "使用 Google 账号登录": "Google アカウントでログイン", "使用 Zai 账号登录": "Zai アカウントでログイン", "使用个人访问令牌(PAT)": "個人アクセストークン(PAT)を使用", "免费模型不用填 Key(默认勾上「该上游无需鉴权」,网关自动用匿名凭证);付费模型则填 Zen 的 API Key。免费档上游只认官方客户端形态,已默认开启「伪装 OpenCode 官方客户端」": "無料モデルでは Key の入力は不要です(既定で「このアップストリームは認証不要」がチェックされ、ゲートウェイは自動的に匿名認証情報を使用します);有料モデルでは Zen の API Key を入力します。無料枠のアップストリームは公式クライアントの形態しか受け付けないため、「OpenCode 公式クライアントの偽装」が既定で有効になっています", "内嵌窗口": "内蔵ウィンドウ", "内嵌窗口打开;关窗即取消等待(Google 账号被拒时改用系统浏览器)": "内蔵ウィンドウで開きます;ウィンドウを閉じると待機をキャンセルします(Google アカウントが拒否された場合はシステムブラウザをお使いください)", "内嵌窗口打开;完成后自动加入列表,关窗即取消等待": "内蔵ウィンドウで開きます;完了後は自動でリストに追加され、ウィンドウを閉じると待機をキャンセルします", "内嵌窗口打开;扫码完成后自动加入列表,关窗即取消等待": "内蔵ウィンドウで開きます。読み取りが完了すると自動で一覧に追加され、ウィンドウを閉じると待機を中止します", "内嵌窗口用全新环境,多账号互不影响;关窗即取消等待": "内蔵ウィンドウは新しい環境を使うため、複数のアカウントが互いに影響しません;ウィンドウを閉じると待機をキャンセルします", "内嵌窗口(推荐)": "内蔵ウィンドウ(推奨)", "准备验证…": "認証を準備中…", "凭据 JSON": "認証情報 JSON", "凭证文件在哪?": "認証情報ファイルの場所は?", "创建并添加账号": "作成してアカウントを追加", "创建这个提供商,并同时建立它的第一个账号。": "このプロバイダーを作成し、同時にその最初のアカウントを作成します。", "删除功能不可用(脚本未就绪)": "削除機能は利用できません(スクリプト未準備)", "删除失败:{reason}": "削除に失敗しました:{reason}", "删除此提供商": "このプロバイダーを削除", "及 {n} 个账号": "、および {n} 個のアカウント", "发送中…": "送信中…", "发送失败:{message}": "送信に失敗しました:{message}", "发送未确认:登录窗口已弹出,请在弹出的窗口中手动完成登录": "送信は未確認です:ログインウィンドウが開きました。表示されたウィンドウで手動でログインを完了してください", "取消失败:{message}": "キャンセルに失敗しました:{message}", "取消等待": "待機をキャンセル", "只有「内嵌窗口」能恢复第三方入口:系统浏览器里我们无法改动登录页": "「内蔵ウィンドウ」でのみサードパーティの入り口を復元できます:システムブラウザではログインページを変更できないためです", "可选": "任意", "可选(cloudaicompanionProject):留空由网关自动发现": "任意(cloudaicompanionProject):空欄の場合はゲートウェイが自動検出します", "可选,展示用": "任意、表示用", "可选,没有则无法自动续期": "任意、ないと自動更新できません", "可选,留空使用凭据里的 user_name": "任意、空欄の場合は認証情報の user_name を使用", "可选,留空使用账号姓名、邮箱或令牌指纹": "任意、空欄の場合はアカウントの氏名、メールアドレス、またはトークンフィンガープリントを使用", "可选,留空使用账号昵称或邮箱": "任意、空欄の場合はアカウントのニックネームまたはメールアドレスを使用", "可选,留空则用 key 尾号": "任意、空欄の場合は key の末尾を使用", "可选,留空则用 userId": "任意、空欄の場合は userId を使用", "可选,留空则用上游账号昵称": "任意。空欄の場合は上流アカウントのニックネームを使用", "可选,留空则用上游返回的账号名或账号 id": "任意、空欄の場合はアップストリームが返したアカウント名またはアカウント id を使用", "可选,留空则用凭证里的账号名": "任意、空欄の場合は認証情報のアカウント名を使用", "可选,留空则用文件里的昵称": "任意。空欄の場合はファイル内のニックネームを使用", "可选,留空则用登录名或 uid": "任意、空欄の場合はログイン名または uid を使用", "可选,留空则用脱敏手机号": "任意、空欄の場合はマスク済み電話番号を使用", "可选,留空则用脱敏手机号或 userId": "任意、空欄の場合はマスク済み電話番号または userId を使用", "可选,留空则用账号 uk": "任意、空欄の場合はアカウントの uk を使用", "可选,留空则用账号昵称": "任意。空欄ならアカウントのニックネームを使用", "可选,留空则用账号昵称或 userId": "任意。空欄の場合はアカウントのニックネームまたは userId を使用", "可选,留空则用邮箱或令牌尾号": "任意、空欄の場合はメールアドレスまたはトークンの末尾を使用", "可选,留空用「OfficeAce 果办」": "任意、空欄の場合は「OfficeAce」を使用", "可选,留空自动生成": "任意、空欄の場合は自動生成", "可选,留空自动用昵称": "任意、空欄の場合はニックネームを自動使用", "可选,给这个访客账号起个备注名": "任意。このゲストアカウントのメモ名", "可选,续期时带上": "任意、更新時に一緒に送信されます", "可选,讯飞侧 userid": "任意、iFlytek 側の userid", "可选:发起对话必需,留空则由网关从该账号已有任务里自动发现,发现不到时之后手动补": "任意;会話の開始に必須です。空欄の場合はゲートウェイがこのアカウントの既存タスクから自動検出します。見つからない場合は後で手動で補ってください。", "可选:账号邮箱,用于展示与身份识别(换新令牌也能认回同一账号)": "任意;アカウントのメールアドレスで、表示と身元識別に使用します(新しいトークンに替えても同じアカウントとして認識されます)", "可选;UUID 形态,与凭据同生共死": "任意;UUID 形式で、認証情報と一体で管理されます", "可选;填了才能到期自动续期": "任意;入力すると期限切れ時に自動更新できます", "可选;用于去重与展示名(留空时网关会问一次上游)": "任意;重複排除と表示名に使用します(空欄の場合、ゲートウェイがアップストリームに一度問い合わせます)", "可选;用于生成账号 id 与展示名": "任意;アカウント id と表示名の生成に使用します", "可选;纯数字串(上游只收 8–24 位数字)": "任意;数字のみの文字列(アップストリームは 8–24 桁の数字のみ受け付けます)", "可领取": "受け取り可能", "同一家可以混着放:有 Key 的账号与无鉴权账号各按各的规则走;无需鉴权的账号也能并存多条(各自可配不同的出网代理)": "同じプロバイダーに API Key ありのアカウントと認証不要アカウントを混在でき、それぞれの規則でルーティングされます。認証不要アカウントも複数併存でき、それぞれ別の送信プロキシを設定できます", "同地址换 anthropic 协议即走它的 Claude 兼容端点。转发必须填 OpenCode Go 的 API Key(订阅制;获取模型清单不需要 Key,但发请求上游会回 401「Missing API key」)": "同じアドレスでプロトコルを anthropic に変えると、その Claude 互換エンドポイントを使用します。転送には OpenCode Go の API Key が必須です(サブスクリプション制;モデルカタログの取得に Key は不要ですが、リクエストを送るとアップストリームが 401「Missing API key」を返します)", "响应为空": "応答が空です", "商汤日日新的 OpenAI 兼容端点;余额查询走控制台账号密码(见下方「余额查询」一段)": "SenseNova の OpenAI 互換エンドポイント。残高照会はコンソールのアカウント / パスワードを使います(下の「残高照会」の節を参照)", "国内版": "中国版", "国内版与**国际版是两套独立的账号与套餐**,凭证与领取的套餐都不通用。": "中国版と**国際版は 2 組の独立したアカウントとプラン**で、認証情報と受け取ったプランはどちらも共用できません。", "国内版登录页没有 Google / GitHub 入口(它用微信 / 手机号 / 邮箱登录)": "中国版のログインページには Google / GitHub の入り口がありません(WeChat / 電話番号 / メールアドレスでログインします)", "国内版的登录站点是 www.accio-ai.com,与国际版不是同一站。": "中国版のログインサイトは www.accio-ai.com で、国際版とは別のサイトです。", "国内版(WorkBuddy)": "中国版(WorkBuddy)", "国内站为 https://api.siliconflow.cn/v1": "中国版サイトは https://api.siliconflow.cn/v1", "国内站(minimaxi.com);OpenAI 兼容地址为 https://api.minimaxi.com/v1": "中国版サイト(minimaxi.com);OpenAI 互換アドレスは https://api.minimaxi.com/v1", "国际版": "国際版", "国际版 z.ai 的 Coding 套餐;OpenAI 兼容地址为 https://api.z.ai/api/coding/paas/v4": "国際版 z.ai の Coding プラン;OpenAI 互換アドレスは https://api.z.ai/api/coding/paas/v4", "国际版与国内版是**两套独立的账号**(同一账号体系的两个站点),凭证不通用。": "国際版と中国版は**2 組の独立したアカウント**です(同じアカウント体系の 2 つのサイト)。認証情報は共用できません。", "国际版与国内版账号体系独立,请填国际版的凭证。未填 refreshToken 无法自动续期。": "国際版と中国版はアカウント体系が独立しています。国際版の認証情報を入力してください。refreshToken を入力しないと自動更新できません。", "国际版登录页默认只显示邮箱登录,勾选后恢复 Google / GitHub / X 入口": "国際版のログインページは既定でメールアドレスログインのみ表示されます。チェックすると Google / GitHub / X の入り口が復元されます", "国际版的推理站点是 api.z.ai,与国内版不是同一站;套餐也各自独立。": "国際版の推論サイトは api.z.ai で、中国版とは別のサイトです;プランもそれぞれ独立しています。", "国际版(WorkBuddy AI)": "国際版(WorkBuddy AI)", "国际站 Coding 套餐;OpenAI 兼容地址为 https://api.minimax.io/v1": "国際版サイトの Coding プラン;OpenAI 互換アドレスは https://api.minimax.io/v1", "在 cc-switch 里找到": "cc-switch で", "在内嵌窗口里完成官方登录,成功后自动加入账号列表。": "内蔵ウィンドウで公式ログインを完了してください。成功すると自動でアカウント一覧に追加されます。", "在{label}的 Qoder 账号设置 → Integrations 生成 PAT(别填 Google / GitHub 的令牌)。两个地区的账号与凭证不通用。": "{label} の Qoder アカウント設定 → Integrations で PAT を生成してください(Google / GitHub のトークンは入力しないでください)。2 つの地域のアカウントと認証情報は共用できません。", "在打开的官方授权页里用微信扫码登录(页面会直接显示二维码)。扫码成功后自动加入账号列表。": "開いた公式認可ページで WeChat の QR コードを読み取ってログインします(ページに QR コードが直接表示されます)。読み取りに成功すると自動でアカウント一覧に追加されます。", "在打开的窗口里用百度账号登录 KukuAI 主站(手机验证码 / 扫码均可),登录成功后自动加入账号列表。网关会向百度换发 KukuAI 业务会话令牌(依赖本机已安装库库AI 客户端)。": "開いたウィンドウで Baidu アカウントを使って KukuAI 本体サイトにログインしてください(SMS 認証コード / QR コードのいずれも可)。ログインに成功すると自動でアカウント一覧に追加されます。ゲートウェイは Baidu から KukuAI の業務セッショントークンを発行してもらいます(本機に KukuAI クライアントがインストールされている必要があります)。", "在打开的窗口里登录 Google 账号(Antigravity 的授权页),授权完成后自动加入账号列表。": "開いたウィンドウで Google アカウントにログインしてください(Antigravity の認可ページ)。認可が完了すると自動でアカウントリストに追加されます。", "在浏览器中打开登录页": "ブラウザでログインページを開く", "地区": "地域", "填写凭证": "認証情報を入力", "填写凭证添加": "認証情報を入力して追加", "备注名": "ラベル名", "套餐": "プラン", "如:智谱 GLM": "例:Zhipu GLM", "完成登录后自动加入账号列表,昵称取自上游。": "ログイン完了後は自動でアカウント一覧に追加されます。ニックネームはアップストリームから取得します。", "官方客户端凭证目录:Windows 是 C:\\Users\\<你的用户名>\\AppData\\Local\\CodeBuddyExtension\\Data\\Public\\auth,macOS 是 ~/Library/Application Support/CodeBuddyExtension/Data/Public/auth": "公式クライアントの認証情報ディレクトリ:Windows は C:\\Users\\<ユーザー名>\\AppData\\Local\\CodeBuddyExtension\\Data\\Public\\auth、macOS は ~/Library/Application Support/CodeBuddyExtension/Data/Public/auth", "官方已确认到账": "公式が付与を確認済み", "导入": "インポート", "导入中…": "インポート中…", "导入凭证文件": "認証情報ファイルのインポート", "导入失败": "インポートに失敗しました", "导入失败:{reason}": "インポートに失敗しました:{reason}", "导入所选": "選択項目をインポート", "导入所选({n})": "選択項目をインポート({n})", "导入桌面端登录态": "デスクトップ版のログイン状態をインポート", "将打开内嵌窗口;授权完成后自动加入账号列表。关掉窗口即取消等待。授权页最后可能提示无法打开 zcode:// 链接,这是正常的 —— 结果已由服务端记下": "内蔵ウィンドウを開きます;認可が完了すると自動でアカウント一覧に追加されます。ウィンドウを閉じると待機をキャンセルします。認可ページの最後に zcode:// リンクを開けない旨の表示が出ることがありますが、これは正常です —— 結果はサーバー側で記録済みです", "将打开内嵌窗口;授权完成后自动加入账号列表。远程面板可粘贴回调地址。关掉窗口即取消等待。链接 5 分钟内有效,超时或未点就会作废(可重新发起)": "内蔵ウィンドウを開きます;認可が完了すると自動でアカウント一覧に追加されます。リモートパネルではコールバックアドレスを貼り付けられます。ウィンドウを閉じると待機をキャンセルします。リンクの有効期限は 5 分で、タイムアウトまたは未クリックの場合は無効になります(再発行できます)", "将打开内嵌窗口;登录完成后自动加入账号列表。关掉窗口即取消等待": "内蔵ウィンドウを開きます;ログイン完了後は自動でアカウント一覧に追加されます。ウィンドウを閉じると待機をキャンセルします", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的 Trae 账号);同机完成后自动加入,Docker / 远程面板按提示粘贴地址栏回调地址。": "システムの既定ブラウザで認可ページを開きます(ブラウザでログイン済みの Trae アカウントが再利用されます);同一マシンでは完了後に自動追加され、Docker / リモートパネルでは案内に従ってアドレスバーのコールバックアドレスを貼り付けてください。", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的 ZCode 账号);授权完成后自动加入账号列表。页面最后可能提示无法打开 zcode:// 链接,属正常现象": "システムの既定ブラウザで認可ページを開きます(ブラウザでログイン済みの ZCode アカウントが再利用されます);認可完了後は自動でアカウント一覧に追加されます。ページの最後に zcode:// リンクを開けない旨の表示が出ることがありますが、正常な動作です", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的华为云账号);授权码由网关轮询云端取回,与浏览器跑在哪台机器无关,完成后自动加入账号列表": "システムの既定ブラウザで認可ページを開きます(ブラウザでログイン済みの Huawei Cloud アカウントが再利用されます);認可コードはゲートウェイがクラウドをポーリングして取得するため、ブラウザがどのマシンで動いていても関係ありません。完了後は自動でアカウント一覧に追加されます", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的华为云账号);浏览器与网关不在同一台机器时,按上方说明把最终回调地址粘贴回面板": "システムの既定ブラウザで認可ページを開きます(ブラウザでログイン済みの Huawei Cloud アカウントが再利用されます);ブラウザとゲートウェイが別のマシンにある場合は、上の説明に従って最終的なコールバックアドレスをパネルに貼り付けてください", "将用系统默认浏览器打开登录页(会复用浏览器里已登录的 Accio 账号);完成登录后自动加入账号列表,关掉弹窗即取消等待": "システムの既定ブラウザでログインページを開きます(ブラウザでログイン済みの Accio アカウントが再利用されます);ログイン完了後は自動でアカウント一覧に追加され、ポップアップを閉じると待機をキャンセルします", "小米 MiMo Token Plan 套餐(新加坡站)": "小米 MiMo Token Plan プラン(シンガポールサイト)", "已到账": "付与済み", "已取消登录等待": "ログイン待ちをキャンセルしました", "已取消领取": "受け取りをキャンセルしました", "已取消验证码": "認証をキャンセルしました", "已填写手机号,正在发送验证码…": "電話番号を入力しました。認証コードを送信中…", "已声明无需鉴权:账号会被正常选路,出网时不带任何鉴权头": "認証不要を宣言済み:アカウントは通常どおりルーティングされ、送信時に認証ヘッダーは一切付きません", "已导入 {ok} 个,失败 {fail} 个(失败项已标注在列表里)": "{ok} 個をインポートしました。失敗 {fail} 個(失敗した項目にはリスト内でマークが付いています)", "已建过 · {n} 个账号,点击继续添加": "作成済み · {n} 個のアカウント、クリックして追加", "已建过,点击继续添加账号": "作成済み、クリックしてアカウントを追加", "已打开官方登录页,请在窗口中完成登录…": "公式ログインページを開きました。ウィンドウでログインを完了してください…", "已点发送,等待短信…": "送信しました。SMS を待っています…", "已用系统默认浏览器打开登录页,请在浏览器中完成登录…": "システムの既定ブラウザでログインページを開きました。ブラウザでログインを完了してください…", "已领取,等官方确认": "受け取り済み、公式の確認待ち", "当前壳版本不支持 AutoClaw 网页登录,请更新应用": "現在のシェルバージョンは AutoClaw のウェブログインに対応していません。アプリを更新してください", "当前没有可领取的套餐(活动尚未开始)": "現在受け取り可能なプランはありません(イベントはまだ開始されていません)", "当前环境不支持领取(桥接方法缺失)": "現在の環境では受け取りに対応していません(ブリッジメソッドがありません)", "必填,CatPaw 账号标识": "必須、CatPaw アカウントの識別子", "恢复 Google / GitHub 入口": "Google / GitHub の入り口を復元", "手机号": "電話番号", "手机验证码登录": "SMS 認証コードログイン", "打开 Trae SOLO 的官方授权页(trae.cn)并用你的 Trae 账号登录:授权完成后官方页面会跳回本机的一个临时端口;同机部署自动接收,Docker / 远程面板请按提示复制地址栏回调地址。": "Trae SOLO の公式認可ページ(trae.cn)を開き、あなたの Trae アカウントでログインしてください:認可が完了すると公式ページから本機の一時ポートにリダイレクトされます;同一マシンでのデプロイでは自動受信し、Docker / リモートパネルでは案内に従ってアドレスバーのコールバックアドレスをコピーしてください。", "打开 Accio {label}的官方登录页({site})并用你的 Accio 账号登录:登录成功后官方页面会跳回本机;同机自动完成,Docker / 远程面板按提示粘贴回调地址即可(授权码只在本机传给网关,界面不显示明文 token)。": "Accio {label}の公式ログインページ({site})を開き、あなたの Accio アカウントでログインしてください:ログインに成功すると公式ページから本機にリダイレクトされます;同一マシンでは自動完了し、Docker / リモートパネルでは案内に従ってコールバックアドレスを貼り付けてください(認可コードは本機からゲートウェイに渡されるだけで、画面に平文 token は表示されません)。", "打开 Accio {label}登录页": "Accio {label} のログインページを開く", "打开 Antigravity 网页登录": "Antigravity のウェブログインを開く", "打开 CatPaw 网页登录": "CatPaw のウェブログインを開く", "打开 Cline 授权页": "Cline の認可ページを開く", "打开 CodeArts 授权页": "CodeArts の認可ページを開く", "打开 Qoder 网页登录": "Qoder のウェブログインを開く", "打开 Trae 授权页": "Trae の認可ページを開く", "打开 ZCode {label}的官方授权页并用你的账号登录。授权结果由 ZCode 服务端记录,网关在后台自动取回凭证并加入账号列表。": "ZCode {label}の公式認可ページを開き、あなたのアカウントでログインしてください。認可結果は ZCode サーバー側で記録され、ゲートウェイがバックグラウンドで自動的に認証情報を取得してアカウント一覧に追加します。", "打开 ZCode {label}授权页": "ZCode {label} の認可ページを開く", "打开华为云 CodeArts 的官方授权页登录:登录完成后官方页面会把浏览器带回网关自己的 /oauth/callback,网关用一次性授权码换取临时凭据并加入账号列表。
网关跑在另一台机器上时,网页端会提示把地址栏中的最终回调地址直接粘贴回面板。": "Huawei Cloud CodeArts の公式認可ページを開いてログインします:ログイン完了後、公式ページからブラウザがゲートウェイ自身の /oauth/callback に戻され、ゲートウェイはワンタイム認可コードで一時認証情報を取得し、アカウント一覧に追加します。
ゲートウェイが別のマシンで動作している場合は、ウェブ画面でアドレスバーの最終的なコールバックアドレスをそのままパネルに貼り付けるよう案内されます。", "打开华为云授权页登录:登录完成后网关会自动轮询云端取回授权码并加入账号列表(不需要装 OfficeAce 桌面端,也无需手工回填回调地址)。": "Huawei Cloud の認可ページを開いてログインしてください:完了すると、ゲートウェイがクラウドをポーリングして認可コードを取得し、アカウント一覧に追加します(OfficeAce デスクトップ版は不要で、コールバック URL を手動で貼り戻す必要もありません)。", "打开官方授权页完成设备码授权,登录的是{label}({site})的账号。": "公式認可ページを開いてデバイスコード認可を完了します。ログインするのは {label}({site})のアカウントです。", "打开授权页": "認可ページを開く", "打开授权页完成确认,账号自动加入 {label}{note}": "認可ページを開いて確認を完了すると、アカウントが自動で {label} に追加されます{note}", "打开方式": "開き方", "打开网页登录": "ウェブログインを開く", "探测失败:{message}": "検出に失敗しました:{message}", "接入一个兼容上游": "互換アップストリームを接続", "提交中…": "送信中…", "搜索提供商": "プロバイダーを検索", "搜索提供商…": "プロバイダーを検索…", "整份粘贴官方插件 / CLIProxyAPI 落盘的凭据 JSON(形如 {\"codearts_provider_credential\":{…}},铺平的也行)。
必填:access_key_id、secret_access_key、security_token。要能自动续期,必须连 refresh_token 与 oauth_context 一起粘 —— 临时凭据约一小时到期,缺这半块就续不回来,只能重新登录。": "公式プラグイン / CLIProxyAPI が保存した認証情報 JSON をまるごと貼り付けてください({\"codearts_provider_credential\":{…}} の形。フラットなものでも可)。
必須:access_key_id、secret_access_key、security_token。自動更新を効かせるには refresh_token と oauth_context も一緒に貼り付ける必要があります —— 一時認証情報は約 1 時間で期限切れになり、この半分が欠けると更新できず、再ログインするしかありません。", "文件是{edition}凭证,已按该版本导入": "ファイルは{edition}の認証情報のため、そのバージョンでインポートしました", "新建自定义提供商": "カスタムプロバイダーを新規作成", "方案:{label}": "方式:{label}", "明文 JWT 或 auth.json 里的 enc: 加密值(自动解密)": "平文 JWT または auth.json 内の enc: 暗号化値(自動復号)", "明文 JWT(国际版账号的 access token)": "平文 JWT(国際版アカウントの access token)", "智谱 bigmodel.cn 的 Coding 套餐,Key 在 open.bigmodel.cn/usercenter/apikeys": "Zhipu bigmodel.cn の Coding プラン。Key は open.bigmodel.cn/usercenter/apikeys で取得します", "未知错误": "不明なエラー", "未能获取授权地址,请重试": "認可アドレスを取得できませんでした。再試行してください", "未能读取 cc-switch 数据": "cc-switch のデータを読み取れませんでした", "未领取成功": "受け取りに失敗しました", "本地 Ollama、OpenCode Zen 免费档这类上游要勾上,否则账号不可用": "ローカル Ollama、OpenCode Zen の無料枠などのアップストリームではチェックを入れてください。入れないとアカウントを使用できません", "本家有两个**互不替代**的凭证,按你要用的功能填,至少填一个:编码套餐 API Key 用于转发推理(打 {site})与查询窗口限额(每 N 小时 / 每周的剩余比例);jwt 用于领取套餐与查询余额(打 zcode.z.ai 的 billing 网关,官方叫 Coding Plan JWT,是一串三段点分的字符串)。余额两把都能查、但读到的东西不同:jwt 读到余额桶与套餐到期,API Key 读到窗口限额;而领取只认 jwt、转发只认 API Key。请填写 {label}账号的凭证 —— {plan}(最容易拿到的办法:直接用上方的「网页登录」—— 它会替你把这个 API Key 换好,两个凭证一起拿到。)": "本家には**互いに代替できない** 2 つの認証情報があり、使いたい機能に応じて入力してください。少なくともどちらか一方は必須です:コーディングプラン API Key は推論の転送用({site} を叩きます)とウィンドウクォータの照会用(N 時間ごと / 週ごとの残り割合);jwt はプランの受け取りと残高照会用(zcode.z.ai の billing ゲートウェイを叩きます。公式名称は Coding Plan JWT で、3 段のドット区切り文字列です)。残高はどちらでも照会できますが、読み取れる内容が異なります:jwt は残高バケットとプランの有効期限、API Key はウィンドウクォータを読み取ります;受け取りは jwt のみ、転送は API Key のみです。{label}アカウントの認証情報を入力してください —— {plan}(最も簡単な方法:上の「ウェブログイン」を使うこと —— この API Key を代わりに交換してくれ、2 つの認証情報をまとめて取得できます。)", "本机 Ollama 的 OpenAI 兼容端点,无需 API Key(默认已勾上「该上游无需鉴权」,鉴权头一个都不发)": "本機の Ollama の OpenAI 互換エンドポイント。API Key は不要です(既定で「このアップストリームは認証不要」がチェック済みで、認証ヘッダーは一切送信されません)", "本次未确认到账": "今回は付与が確認できませんでした", "条可导入": "件がインポート可能", "条配置,其中": "件の設定、うち", "桌面运行时不可用(Tauri 未初始化)": "デスクトップランタイムが利用できません(Tauri が未初期化)", "模型网关基址": "モデルゲートウェイのベース URL", "正在打开百度登录页…": "Baidu のログインページを開いています…", "正在扫描本机 cc-switch…": "本機の cc-switch をスキャンしています…", "正在换发访客凭证…": "ゲスト資格情報を発行中…", "正在添加…": "追加中…", "正在等待{name}登录完成;完成或取消后才能发起新的登录": "{name} のログイン完了を待っています;完了またはキャンセルしないと新しいログインを開始できません", "每周": "毎週", "每日": "毎日", "每月": "毎月", "没有则无法自动续期": "ないと自動更新できません", "没有匹配「{keyword}」的提供商": "「{keyword}」に一致するプロバイダーはありません", "添加 {name} 账号": "{name} アカウントを追加", "添加中…": "追加中…", "添加到 ": "追加先 ", "添加失败:{reason}": "追加に失敗しました:{reason}", "添加小浣熊账号": "小浣熊アカウントを追加", "添加方式": "追加方法", "添加访客账号": "ゲストアカウントを追加", "添加账号": "アカウントを追加", "火山引擎 Coding 套餐;通用推理接入点为 https://ark.cn-beijing.volces.com/api/v3": "Volcano Engine Coding プラン;汎用推論エンドポイントは https://ark.cn-beijing.volces.com/api/v3", "点击添加账号": "クリックしてアカウントを追加", "点开即预填,填 Key 接入": "開くと自動入力済み、Key を入力して接続", "点按钮后先过一次滑块验证(官方风控),随后打开登录页,登录完成即自动添加账号。
这是国际版官方唯一的登录方式;已在客户端登录过的,用「导入桌面端登录态」更快。": "ボタンを押すとまずスライダー認証(公式の不正対策)を 1 回行い、その後ログインページが開きます。ログイン完了で自動的にアカウントが追加されます。
これが国際版公式の唯一のログイン方式です。すでにクライアントでログイン済みの場合は、「デスクトップ版のログイン状態をインポート」を使う方が速いです。", "用 AutoClaw 账号绑定的手机号登录:点击「获取验证码」,收到短信后填入下方并登录。验证码由本机直接提交给官方接口,界面不显示 token。": "AutoClaw アカウントに紐付けられた電話番号でログインします:「コードを取得」をクリックし、SMS を受け取ったら下の欄に入力してログインしてください。認証コードは本機から直接公式 API に送信され、画面に token は表示されません。", "用 CatPaw 账号完成登录(美团 passport),成功后自动加入账号列表。": "CatPaw アカウントでログインを完了します(Meituan passport)。成功すると自動でアカウント一覧に追加されます。", "用 Loomy 账号绑定的手机号登录:点「获取验证码」后填入即可。这是本家最省事的入口。": "Loomy アカウントに紐付けられた電話番号でログインします:「コードを取得」をクリックして入力するだけです。本家で最も手軽な入り口です。", "用于转发;形如 apiKey.secret 两段点分(不填则这个账号不能转发)": "転送用。apiKey.secret の 2 段ドット区切り形式です(未入力の場合、このアカウントは転送できません)", "用于领取套餐与查询余额;不填则这个账号不能领取与查余额": "プランの受け取りと残高照会用。未入力の場合、このアカウントは受け取りと残高照会ができません", "用户 ID": "ユーザー ID", "用绑定的手机号登录:点「获取验证码」后填入即可。这是国内版官方唯一的登录方式。": "紐付けられた電話番号でログインします:「コードを取得」をクリックして入力するだけです。これが中国版公式の唯一のログイン方式です。", "留空则用提供商名称": "空欄の場合はプロバイダー名を使用", "登录 / 添加 {name} 账号": "ログイン / {name} アカウントを追加", "登录 session(一长串)": "ログイン session(長い文字列)", "登录中…": "ログイン中…", "登录失败:{message}": "ログインに失敗しました:{message}", "登录已结束": "ログインは終了しました", "登录并添加": "ログインして追加", "登录态文件路径:~/.box-agent/config/auth.json(Windows:C:\\Users\\<你的用户名>\\.box-agent\\config\\auth.json)": "ログイン状態ファイルのパス:~/.box-agent/config/auth.json(Windows:C:\\Users\\<ユーザー名>\\.box-agent\\config\\auth.json)", "确定删除自定义提供商「{name}」?将同时删除该提供商下 {count} 个账号,删除后无法恢复。": "カスタムプロバイダー「{name}」を削除しますか?このプロバイダー配下の {count} 個のアカウントも同時に削除され、削除後は元に戻せません。", "等待 Accio {label}登录完成…": "Accio {label} のログイン完了を待っています…", "等待 CatPaw 登录完成…": "CatPaw のログイン完了を待っています…", "等待 Cline 授权确认…": "Cline の認可確認を待っています…", "等待 CodeArts 登录完成…": "CodeArts のログイン完了を待っています…", "等待 Google 授权完成…": "Google の認可完了を待っています…", "等待 KukuAI 登录完成…": "KukuAI のログイン完了を待っています…", "等待 OfficeAce 登录完成…": "OfficeAce のログイン完了を待っています…", "等待 OrcaTerm 登录完成…": "OrcaTerm のログイン完了を待っています…", "等待 Qoder 授权完成…": "Qoder の認可完了を待っています…", "等待 Trae 授权完成…": "Trae の認可完了を待っています…", "等待 ZCode {label}授权完成…": "ZCode {label} の認可完了を待っています…", "等待小浣熊登录完成…": "小浣熊のログイン完了を待っています…", "等待登录完成…": "ログインの完了を待っています…", "等待网页登录…": "ウェブログインを待っています…", "粘贴 API Key": "API Key を貼り付け", "粘贴 API 令牌": "API トークンを貼り付け", "粘贴 Accio 的 accessToken": "Accio の accessToken を貼り付け", "粘贴 Antigravity 的 Google refresh token(以 1// 开头;直接粘贴含 refresh_token= 的整行也行)。
这是网页登录之外的手工入口(例如从已登录的官方 IDE 里导出)。refresh token 不会过期,access token 到期由网关自动续期;令牌丢了只能重新走 Google 授权,请妥善保存。": "Antigravity の Google refresh token を貼り付け(1// で始まる;refresh_token= を含む行全体をそのまま貼り付けても可)。
これはウェブログイン以外の手動入り口です(例:ログイン済みの公式 IDE からエクスポート)。refresh token は期限切れにならず、access token の期限切れはゲートウェイが自動で更新します;トークンを紛失すると Google の認可をやり直すしかないため、大切に保管してください。", "粘贴 Command Code 的 API Key(user_ 开头;从官方 CLI 的 ~/.commandcode/auth.json 或网页 studio 获取)。整行 / 带引号 / 带 Bearer 前缀地粘都行,网关会自己剥成裸 key。key 不过期、也没有续期接口,失效后重新获取即可;添加时网关会做一次轻量探活,失败不影响添加。": "Command Code の API Key を貼り付け(user_ で始まる;公式 CLI の ~/.commandcode/auth.json またはウェブの studio から取得)。行全体 / 引用符付き / Bearer プレフィックス付きのまま貼り付けても構いません。ゲートウェイが自動で裸の key に剥がします。key は期限切れにならず、更新用 API もありません。無効になったら取得し直してください;追加時にゲートウェイが軽量な死活確認を 1 回行いますが、失敗しても追加には影響しません。", "粘贴 Cookie": "Cookie を貼り付け", "粘贴 Google refresh token": "Google refresh token を貼り付け", "粘贴 OrcaTerm 的 OAuth accessToken(JWT,三段点分;从桌面客户端 data.bin 或 Web 版 Cookie ot_session 获取)。直接粘贴含 Bearer / ot_session= 的整行也行,网关会自己剥成裸 token。添加后由网关自动续期(上游有续期接口),无需跟随 2 小时时效手动更换。": "OrcaTerm の OAuth accessToken(ドット区切り 3 パートの JWT。デスクトップクライアントの data.bin か Web 版の Cookie ot_session から取得)を貼り付けます。Bearer / ot_session= を含む行をそのまま貼ってもよく、ゲートウェイが裸のトークンに剥がします。追加後はゲートウェイが自動で更新するため(上流に更新 API があります)、2 時間の有効期限を手動で追う必要はありません。", "粘贴 Qoder 个人访问令牌(pt-…)": "Qoder の個人アクセストークン(pt-…)を貼り付け", "粘贴 accessToken": "accessToken を貼り付け", "粘贴 access_token(一长串 JWT)": "access_token(長い JWT)を貼り付け", "粘贴 session cookie": "session cookie を貼り付け", "粘贴 token / refreshToken": "token / refreshToken を貼り付け", "粘贴 workos:… 开头的令牌(不带前缀也会自动补上)": "workos:… で始まるトークンを貼り付け(プレフィックスがなくても自動で補われます)", "粘贴智谱清言的访问令牌(JWT,三段点分)。获取方式:浏览器打开 chatglm.cn 并登录后,在开发者工具的 Application → Cookies 里复制 chatglm_token 的值(也可以直接粘 chatglm_token=…; 整行)。粘贴后会先向上游校验一次,校验通过才落账号;登录账号的积分、签到能力都能用,之后由网关自动续期(上游有续期接口)。": "智谱清言のアクセストークン(3 つのドット区切り部分からなる JWT)を貼り付けてください。取得方法:ブラウザで chatglm.cn を開いてログインし、開発者ツールの Application → Cookies から chatglm_token の値をコピーします(chatglm_token=…; の行をそのまま貼っても可)。貼り付けたあと上流に対して一度検証し、通った場合のみアカウントを保存します。ログイン済みアカウントではポイントと签到の機能が使え、以降はゲートウェイが自動で更新します(上流に更新インターフェースがあります)。", "粘贴登录凭据": "ログイン認証情報を貼り付け", "粘贴的是登录 session(同时是模型网关的 token)。Loomy 没有续期接口,session 有效期约 14 天,过期后重新登录即可。": "貼り付けるのはログイン session です(同時にモデルゲートウェイの token でもあります)。Loomy には更新用 API がなく、session の有効期間は約 14 日です。期限切れ後は再ログインしてください。", "粘贴网关凭据": "ゲートウェイ認証情報を貼り付け", "粘贴网页登录态 cookie monkeycode_ai_session 的值(在浏览器里复制整段 Cookie 直接粘贴也行,网关会自己剥出值)。
{siteNote}
MonkeyCode 没有续期接口:session 有效期约 30 天(硬限制),过期后重新登录网页、再粘贴一次即可。": "ウェブのログイン状態 cookie monkeycode_ai_session の値を貼り付け(ブラウザーで Cookie 全体をコピーしてそのまま貼り付けても可。ゲートウェイが値を自動で取り出します)。
{siteNote}
MonkeyCode には更新用 API がありません:session の有効期間は約 30 日(ハードリミット)で、期限切れ後はウェブに再ログインして貼り付け直せば済みます。", "粘贴访问令牌": "アクセストークンを貼り付け", "系统浏览器": "システムブラウザ", "系统浏览器可复用已有登录态(国际版推荐);内嵌窗口更干净。": "システムブラウザは既存のログイン状態を再利用できます(国際版で推奨);内蔵ウィンドウの方がクリーンです。", "系统浏览器打开(复用已登录的 Cline 账号);完成后自动加入列表": "システムブラウザで開く(ログイン済みの Cline アカウントを再利用);完了後は自動でリストに追加されます", "系统浏览器打开(复用已登录的 Google 账号);完成后自动加入列表": "システムブラウザで開きます(ログイン済みの Google アカウントを再利用);完了後は自動でリストに追加されます", "系统浏览器打开(复用已登录的 Zai / Google 账号);完成后自动加入列表": "システムブラウザで開く(ログイン済みの Zai / Google アカウントを再利用);完了後は自動でリストに追加されます", "系统浏览器打开(复用已登录的美团账号);完成后自动加入列表": "システムブラウザで開く(ログイン済みの Meituan アカウントを再利用);完了後は自動でリストに追加されます", "系统浏览器打开(复用已登录账号);完成后自动加入列表": "システムブラウザで開く(ログイン済みアカウントを再利用);完了後は自動でリストに追加されます", "系统默认浏览器": "システムの既定ブラウザ", "编码套餐 API Key": "コーディングプラン API Key", "网关 Secret": "ゲートウェイシークレット", "网页登录": "ウェブログイン", "网页登录的打开方式": "ウェブログインの開き方", "网页登录(Zai / Google)": "ウェブログイン(Zai / Google)", "自定义": "カスタム", "自建聚合面板:填你自己的站点地址。余额查询用该账号的 API Key 打 {base}/v1/usage,不需要额外配置": "自前のアグリゲーションパネル:自分のサイトアドレスを入力。残高照会はこのアカウントの API キーで {base}/v1/usage を叩きます。追加設定不要", "自建聚合面板:填你自己的站点地址;余额查询要另填 NewAPI 的个人访问令牌(见下方「余额查询」一段)": "自前のアグリゲーションパネル:自分のサイトアドレスを入力。残高照会には別途 NewAPI の個人アクセストークンが必要です(下の「残高照会」の節を参照)", "获取风控配置失败,将直接尝试领取:{message}": "不正対策設定の取得に失敗しました。そのまま受け取りを試みます:{message}", "获取验证码": "コードを取得", "访客模式": "ゲストモード", "访客模式(免登录)": "ゲストモード(ログイン不要)", "该上游无需鉴权(不发送鉴权头)": "このアップストリームは認証不要(認証ヘッダーを送信しません)", "该提供商": "このプロバイダー", "该提供商账号添加功能即将上线": "このプロバイダーのアカウント追加機能は近日公開予定です", "该自定义提供商已不存在(可能已被删除),请刷新后重试": "このカスタムプロバイダーは存在しません(削除された可能性があります)。更新してから再試行してください", "请先选择一个自定义提供商": "先にカスタムプロバイダーを選択してください", "请在弹出的滑块中完成验证(官方要求的风控步骤)": "表示されたスライダーで認証を完了してください(公式が求める不正対策ステップ)", "请填写 11 位大陆手机号": "11 桁の中国本土の携帯番号を入力してください", "请填写 6 位数字验证码": "6 桁の認証コードを入力してください", "请填写 Base URL": "Base URL を入力してください", "请填写 {label}": "{label} を入力してください", "请填写名称": "名前を入力してください", "请完成验证…": "認証を完了してください…", "读取 %APPDATA%/AutoClaw/auth.json 并解密,仅 Windows": "%APPDATA%/AutoClaw/auth.json を読み込んで復号します。Windows のみ", "读取 ~/.cline/data/settings/providers.json,需已在 Cline 客户端登录": "~/.cline/data/settings/providers.json を読み込みます。Cline クライアントでログイン済みである必要があります", "读取 ~/.meituan-catpaw/auth.json,需已在 CatPaw 客户端登录": "~/.meituan-catpaw/auth.json を読み込みます。CatPaw クライアントでログイン済みである必要があります", "读取本机 KukuAI 客户端登录态(%APPDATA%\\baidugenflowpro\\Network\\Cookies),需已在 KukuAI 客户端登录": "本機の KukuAI クライアントのログイン状態を読み込みます(%APPDATA%\\baidugenflowpro\\Network\\Cookies)。KukuAI クライアントでログイン済みである必要があります", "读取本机 OrcaTerm 客户端登录态(%APPDATA%\\com.orcaterm-desktop.app\\data.bin),需已在 OrcaTerm 客户端登录": "ローカルの OrcaTerm クライアントのログイン状態(%APPDATA%\\com.orcaterm-desktop.app\\data.bin)を読み取ります。OrcaTerm クライアントでのログインが必要です", "读取本机智谱清言客户端登录态(%APPDATA%\\chatglm\\Network\\Cookies),需已在客户端登录": "本機の智谱清言クライアントのログイン状態を読み取ります(%APPDATA%\\chatglm\\Network\\Cookies)。クライアントでログイン済みである必要があります", "读本机官方客户端(Tencent WorkBuddy / WorkBuddy AI)当前登录的账号:自动定位其凭证目录里最新的登录态文件(需已在本机官方客户端登录)。导入后由网关自动续期,无需跟随 2 小时时效手动换令牌。": "このマシンの公式クライアント(Tencent WorkBuddy / WorkBuddy AI)で現在ログイン中のアカウントを読み取ります:認証情報ディレクトリ内の最新のログイン状態ファイルを自動で特定します(このマシンの公式クライアントにログイン済みである必要があります)。インポート後はゲートウェイが自動で更新するため、2 時間の有効期限に合わせて手動でトークンを交換する必要はありません。", "读本机客户端当前登录态(明文 Cookie,无需解密)。客户端运行时 Cookies 文件被独占占用,导入前请先关闭 KukuAI 客户端。": "本機クライアントの現在のログイン状態を読み込みます(平文 Cookie、復号不要)。クライアントの実行中は Cookies ファイルが排他占有されるため、インポート前に KukuAI クライアントを終了してください。", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。": "本機クライアントの現在のログイン状態を読み込みます。毎回リアルタイムで読み取ります(この記録を削除してもクライアントのログイン状態には影響しません)。", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。客户端重新登录后点「刷新 Token」同步。": "本機クライアントの現在のログイン状態を読み込みます。毎回リアルタイムで読み取ります(この記録を削除してもクライアントのログイン状態には影響しません)。クライアントで再ログインしたら「Token を更新」をクリックして同期してください。", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。客户端重新登录后重新导入即可。": "本機クライアントの現在のログイン状態を読み込みます。毎回リアルタイムで読み取ります(この記録を削除してもクライアントのログイン状態には影響しません)。クライアントで再ログインしたら再インポートしてください。", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。用 Zai / Google 登录客户端的用户走这一条。": "本機クライアントの現在のログイン状態を読み込みます。毎回リアルタイムで読み取ります(この記録を削除してもクライアントのログイン状態には影響しません)。Zai / Google でクライアントにログインしているユーザーはこちらを使ってください。", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。这一条归入 {label}。": "本機クライアントの現在のログイン状態を読み込みます。毎回リアルタイムで読み取ります(この記録を削除してもクライアントのログイン状態には影響しません)。これは {label} に分類されます。", "读本机客户端当前登录的 OAuth 令牌(明文 JSON,无需解密)。导入后由网关自动续期,无需跟随客户端的 2 小时时效手动换令牌。": "ローカルクライアントが現在ログインしている OAuth トークンを読み取ります(平文 JSON、復号不要)。インポート後はゲートウェイが自動で更新するため、クライアントの 2 時間の有効期限に合わせて手動で切り替える必要はありません。", "读本机客户端当前的登录态。客户端的 Cookies 是 DPAPI 加密的(Chromium os_crypt),因此仅 Windows 可用;客户端正在运行时可能读不到该文件,先退出客户端再试即可(也可改用「填写凭证」粘贴令牌)。": "本機クライアントの現在のログイン状態を読み取ります。クライアントの Cookies は DPAPI 暗号化(Chromium os_crypt)されているため、Windows でのみ利用できます。クライアントの起動中はこのファイルを読めないことがあるので、クライアントを終了してから再試行してください(「資格情報を入力」でトークンを貼り付ける方法でも構いません)。", "账号信息": "アカウント情報", "账号信息不完整,请刷新后重试": "アカウント情報が不完全です。更新してから再試行してください", "账号已添加,但请留意:{warning}": "アカウントを追加しましたが、ご注意ください:{warning}", "账号版本": "アカウントバージョン", "账号类型": "アカウント種別", "账号:{name}
": "アカウント:{name}
", "走 Inference Providers 路由,Key 在 hf.co/settings/tokens 创建": "Inference Providers ルートを使用します。Key は hf.co/settings/tokens で作成します", "还没有账号": "アカウントはまだありません", "这一家当前不支持网页登录,请改用填写凭证": "このプロバイダーは現在ウェブログインに対応していません。認証情報の入力に切り替えてください", "这个账号当前没有可自动领的活动(只自动领每日登录赠送积分)": "このアカウントには現在自動で受け取れるイベントがありません(自動で受け取るのは毎日ログインで付与されるポイントのみです)", "这份额度走「活动套餐」通道:若转发时提示编码套餐已到期,": "このクォータは「イベントプラン」の経路を使用します:転送時にコーディングプランの期限切れが表示された場合は、", "这里填国内站(modelscope.cn)的账号:请粘贴国内站的令牌。国际站(modelscope.ai)是另一家 provider、另一套账号,两边的令牌不通用。": "ここには中国サイト(modelscope.cn)のアカウントを入力します。中国サイトのトークンを貼り付けてください。国際サイト(modelscope.ai)は別の provider・別のアカウントで、両者のトークンに互換性はありません。", "这里填国内站(monkeycode-ai.com)的账号:请粘贴国内站的 session。国际站(monkeycode-ai.net)是另一家 provider、另一套账号,两边的凭证不通用。": "ここには中国サイト(monkeycode-ai.com)のアカウントを入力します:中国サイトの session を貼り付けてください。国際サイト(monkeycode-ai.net)は別のプロバイダーで、アカウントも別です。両者の認証情報は共用できません。", "这里填国际站(modelscope.ai)的账号:请粘贴国际站的令牌。国内站(modelscope.cn)是另一家 provider、另一套账号,两边的令牌不通用。": "ここには国際サイト(modelscope.ai)のアカウントを入力します。国際サイトのトークンを貼り付けてください。中国サイト(modelscope.cn)は別の provider・別のアカウントで、両者のトークンに互換性はありません。", "这里填国际站(monkeycode-ai.net)的账号:请粘贴国际站的 session。国内站(monkeycode-ai.com)是另一家 provider、另一套账号,两边的凭证不通用。": "ここには国際サイト(monkeycode-ai.net)のアカウントを入力します:国際サイトの session を貼り付けてください。中国サイト(monkeycode-ai.com)は別のプロバイダーで、アカウントも別です。両者の認証情報は共用できません。", "选择 CatPaw 客户端的登录态文件 auth.json(Windows:C:\\Users\\<你的用户名>\\.meituan-catpaw\\auth.json;macOS / Linux:~/.meituan-catpaw/auth.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端。": "CatPaw クライアントのログイン状態ファイル auth.json を選択します(Windows:C:\\Users\\<ユーザー名>\\.meituan-catpaw\\auth.json、macOS / Linux:~/.meituan-catpaw/auth.json)。インポート後は認証情報がゲートウェイ側に保存され、単独で転送できるようになります(本機クライアントに依存しません)。", "选择 Cline 客户端的登录态文件 providers.json(Windows:C:\\Users\\<你的用户名>\\.cline\\data\\settings\\providers.json;macOS / Linux:~/.cline/data/settings/providers.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端;这一条归入 {label}。": "Cline クライアントのログイン状態ファイル providers.json を選択します(Windows:C:\\Users\\<ユーザー名>\\.cline\\data\\settings\\providers.json、macOS / Linux:~/.cline/data/settings/providers.json)。インポート後は認証情報がゲートウェイ側に保存され、単独で転送できるようになります(本機クライアントに依存しません)。この項目は {label} に登録されます。", "选择 KukuAI 客户端的 Cookies 文件(%APPDATA%\\baidugenflowpro\\Network\\Cookies):它是**二进制** SQLite 数据库(无扩展名,不是 JSON)。导入时读的是你选中文件的副本、不和运行中的客户端抢占用,因此**无需先关闭客户端**。导入后凭证直接落在网关、可独立转发。": "KukuAI クライアントの Cookies ファイルを選択します(%APPDATA%\\baidugenflowpro\\Network\\Cookies):これは**バイナリ**の SQLite データベースです(拡張子なし、JSON ではありません)。インポート時は選択したファイルのコピーを読み、実行中のクライアントと占有を争いません。したがって**クライアントを終了する必要はありません**。インポート後は認証情報がゲートウェイ側に保存され、単独で転送できるようになります。", "选择凭证文件导入": "認証情報ファイルからインポート", "选择官方客户端的登录态凭证文件(workbuddy-desktop.info / workbuddy-desktop-ai.info)或 wb2api 导出的账号 JSON(嵌套 / 扁平形均可)。": "公式クライアントのログイン状態の認証情報ファイル(workbuddy-desktop.info / workbuddy-desktop-ai.info)または wb2api がエクスポートしたアカウント JSON(ネスト / フラット形式どちらも可)を選択してください。", "选择小浣熊客户端的登录态文件 auth.json(Windows:C:\\Users\\<你的用户名>\\.box-agent\\config\\auth.json;macOS / Linux:~/.box-agent/config/auth.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端。": "小浣熊クライアントのログイン状態ファイル auth.json を選択します(Windows:C:\\Users\\<ユーザー名>\\.box-agent\\config\\auth.json、macOS / Linux:~/.box-agent/config/auth.json)。インポート後は認証情報がゲートウェイ側に保存され、単独で転送できるようになります(本機クライアントに依存しません)。", "选择提供商": "プロバイダーを選択", "选择的文件不是合法 JSON": "選択したファイルは有効な JSON ではありません", "选择要添加账号的提供商": "アカウントを追加するプロバイダーを選択", "重新扫描": "再スキャン", "鉴权": "認証", "阿里云 Token Plan 套餐(国际站)": "Alibaba Cloud Token Plan プラン(国際版サイト)", "阿里云百炼 Coding 套餐(国内站)": "Alibaba Cloud Model Studio Coding プラン(中国版サイト)", "阿里云百炼 Coding 套餐(国际站)": "Alibaba Cloud Model Studio Coding プラン(国際版サイト)", "阿里云百炼模型服务(国际站,OpenAI 兼容模式)": "Alibaba Cloud Model Studio モデルサービス(国際版サイト、OpenAI 互換モード)", "需要图形验证码:登录窗口已弹出,请填写后继续": "画像認証が必要です:ログインウィンドウが開きました。入力して続行してください", "预置 API": "プリセット API", "领取 CodeArts 每日福利": "CodeArts の毎日特典を受け取る", "领取失败:{message}": "受け取りに失敗しました:{message}", "领取并让官方确认": "受け取って公式の確認を待つ", "风控验证配置不完整,请稍后重试": "不正対策認証の設定が不完全です。しばらくしてから再試行してください", "验证码": "認証コード", "验证码已发送。收到后填入下方并点「登录并添加」": "認証コードを送信しました。受け取ったら下の欄に入力し、「ログインして追加」をクリックしてください", "验证码已发送,请查看手机短信": "認証コードを送信しました。携帯の SMS をご確認ください", "验证码已发送,请查看手机短信。填入下方并点「登录并添加」即完成登录": "認証コードを送信しました。携帯の SMS をご確認ください。下の欄に入力して「ログインして追加」をクリックすると、ログインが完了します", "验证码已发送,请查看短信": "認証コードを送信しました。SMS をご確認ください", "验证码校验失败,请重试": "認証コードの検証に失敗しました。再試行してください", "验证码校验超时,请重试": "認証コードの検証がタイムアウトしました。再試行してください", "验证码组件不可用,请重试": "認証コンポーネントが利用できません。再試行してください", "验证码组件初始化超时,请重试": "認証コンポーネントの初期化がタイムアウトしました。再試行してください", "验证码组件加载失败,请检查网络后重试": "認証コンポーネントの読み込みに失敗しました。ネットワークを確認して再試行してください", "验证码组件加载异常,请重试": "認証コンポーネントの読み込みでエラーが発生しました。再試行してください", "验证码组件加载超时,请检查网络后重试": "認証コンポーネントの読み込みがタイムアウトしました。ネットワークを確認して再試行してください", "验证码组件未加载,请重启应用后重试": "認証コンポーネントが読み込まれていません。アプリを再起動してから再試行してください", "(免费额度池,模型名带 cline-free/ 前缀)。": "(無料枠プール、モデル名に cline-free/ プレフィックスが付きます)。", "(其中 {n} 把恢复为不限制)": "(うち {n} 個は無制限に戻ります)", "(必填)": "(必須)", "(有效期 {window})": "(有効期間 {window})", "(订阅池,模型名带 cline-pass/ 前缀,需要账号有对应订阅)。": "(サブスクプール、モデル名に cline-pass/ プレフィックスが付きます。アカウントに対応するサブスクリプションが必要です)。", ",下一次最快 {minutes} 分钟后": "、次回は最短 {minutes} 分後", ",并从 {n} 把 Key 的可用提供商里移除": "、Key {n} 個を利用可能なプロバイダーからも除外しました" });
diff --git a/desktop-tauri/ui/i18n/ja/checkin.js b/desktop-tauri/ui/i18n/ja/checkin.js
index 2b2ba23f..636908e7 100644
--- a/desktop-tauri/ui/i18n/ja/checkin.js
+++ b/desktop-tauri/ui/i18n/ja/checkin.js
@@ -1,2 +1,2 @@
/* Agent2API 词典构建产物:ja/checkin —— 由 desktop-tauri/i18n/build.mjs 生成,请勿手改;源头是 i18n-src/*.json */
-window.wbI18nDict = window.wbI18nDict || {}; Object.assign(window.wbI18nDict, { " · ": " · ", "SOLO 的 checkin_credits 领取 · 按自然日 0 点刷新": "SOLO の checkin_credits 受け取り · 自然日 0 時に更新", "UMID 组件安装失败:{error}": "UMID コンポーネントのインストールに失敗しました:{error}", "WorkBuddy 国内版 · 查询任务树后一键点亮 / 领奖 · 含开学季与猫猫旅行 · 点击行展开明细": "WorkBuddy 中国版 · タスクツリーを照会してワンクリックで点灯/受け取り · 新学期イベントとねこ旅行を含む · 行をクリックで詳細", "WorkBuddy 国际版保活模型,按顺序回退": "WorkBuddy 国際版のキープアライブ用モデル(順番にフォールバック)", "WorkBuddy 国际版日活任务的免费模型 · 全局一份,与条目无关": "WorkBuddy国際版のデイリーアクティビティ用の無料モデル · 全体で1つの設定、スケジュールとは無関係", "{date}(每天 {time})": "{date}(毎日 {time})", "{label} ×{count}({reason})": "{label} ×{count}({reason})", "{n} 项可完成": "完了可能 {n} 件", "{n} 项待领": "{n} 件受け取り待ち", "{total} 账号 · {done} 已签": "{total} アカウント · {done} チェックイン済み", "{total} 项任务 · {pending} 项可完成": "タスク {total} 件 · 完了可能 {pending} 件", "✅ UMID 组件已安装,下轮签到即可领取国际版积分": "✅ UMID コンポーネントをインストールしました。次回のチェックインで国際版の積分を受け取れます", "✅ {message}": "✅ {message}", "✅ 定时签到已开启": "✅ 定期チェックインを有効にしました", "✅ 开学季任务执行完成": "✅ 新学期タスクの実行が完了しました", "✅ 成长任务执行完成:积分 +{credit} 能量 +{energy}": "✅ 成長タスク完了:クレジット +{credit} エネルギー +{energy}", "✅ 新手福利领取完成,累计 {n} 积分": "✅ 初心者ボーナスの受け取りが完了しました。累計 {n} 積分", "✅ 签到完成:{succeeded}/{total} 个账号成功领取{active}": "✅ チェックイン完了:{succeeded}/{total} 件のアカウントが受け取りに成功{active}", "「保活模型链」是 WorkBuddy 国际版领日活时用来保活的免费模型,按顺序逐个尝试、 第一个成功即止;清空提交恢复缺省({defaults})。 当天去重 + 幂等领取:重复执行只会拿到「已领取」,不会重复加分。": "「キープアライブモデルチェーン」は、WorkBuddy国際版のデイリーアクティビティでアカウントを活性化し続けるための無料モデルです。順に試し、最初の成功で止まります。空で送信すると既定({defaults})に戻します。当日の重複排除+冪等な受け取り:再実行しても「受取済み」が返るだけで、ポイントが二重に加算されることはありません。", "「保活模型链」是 WorkBuddy 国际版领日活时用来保活的免费模型,按顺序逐个尝试、 第一个成功即止;清空清单并保存 = 恢复缺省链(当前缺省:{defaults})。 当天去重 + 幂等领取:重复执行只会拿到「已领取」,不会重复加分。": "「キープアライブモデルチェーン」は、WorkBuddy国際版のデイリーアクティビティでアカウントを活性化し続けるための無料モデルです。順に試し、最初の成功で止まります。リストを空にして保存すると既定のチェーン(現在の既定:{defaults})に戻ります。当日の重複排除+冪等な受け取り:再実行しても「受取済み」が返るだけで、ポイントが二重に加算されることはありません。", "「免费领积分」的每日任务 · 逐个领取": "「無料積分受け取り」のデイリータスク · 1 つずつ受け取る", "一次性福利 · 签到后自动查询并领取,领完记在本机不再查上游 · 点击行展开任务清单": "一度きりの特典 · チェックイン後に自動で照会して受け取り、受け取り済みは本機に記録し以降はアップストリームに問い合わせません · 行をクリックしてタスク一覧を展開", "一次领当天全部奖励(每日签到 + 新人礼) · 幂等由上游保证": "その日の報酬を一度にまとめて受け取ります(毎日チェックイン+新規特典) · 冪等性はアップストリームが保証", "一键安装组件": "ワンクリックでインストール", "一键完成": "一括完了", "一键领取({n})": "一括受け取り({n})", "上次执行:{line}": "前回実行:{line}", "上次签到时间": "前回のチェックイン時刻", "上次领取 {time} · 领取需通过滑块验证码": "前回の受け取り {time} · 受け取りにはスライダー認証が必要", "下次 {date}": "次回 {date}", "下次 {date} · 点此管理条目": "次回 {date} · クリックしてスケジュールを管理", "不参与每日签到:{list}。CodeArts 的一次性奖励在下方「新手福利」,它与 ZCode 的每日/套餐福利领取见「活动福利」。": "デイリーチェックインの対象外:{list}。CodeArts の一度きりの特典は下の「初心者ボーナス」に、CodeArts と ZCode の日次/プラン特典の受け取りは「アクティビティ特典」にあります。", "不参与每日签到:{list}。CodeArts 的一次性奖励在下方「新手福利」,它的每日福利就在上方「每日签到」里;ZCode 的套餐领取见「活动福利」。": "デイリーチェックインの対象外:{list}。CodeArts の一度きりの特典は下の「初心者ボーナス」、CodeArts のデイリー特典はすぐ上の「デイリーチェックイン」にあります。ZCode のプラン受け取りは「アクティビティ特典」です。", "与国内版同一套任务接口 · 站点不同": "中国版と同じタスク API · サイトが異なる", "今天已领 {n} 份": "本日 {n} 件受け取り済み", "今天未领": "本日は未受取", "今天(北京时间 {day})已领取 · 官方确认到账 {n} 项 · 明天可再领": "本日(北京時間 {day})受け取り済み · 公式に {n} 件の到着を確認 · 明日また受け取れます", "今日已执行": "本日実行済み", "今日已派出": "本日は出発済み", "今日已领取": "本日受け取り済み", "今日签到": "本日のチェックイン", "今日签到进度": "本日のチェックイン進捗", "从清单里移除": "リストから削除", "保活": "キープアライブ", "保活 {n}": "キープアライブ {n}", "保活+领取": "キープアライブ+受け取り", "保活中…": "キープアライブ中…", "保活模型链": "キープアライブモデルチェーン", "全选": "すべて選択", "全部 {n} 家": "全 {n} 社", "全部完成": "すべて完了", "全部查询": "一括クエリ", "全部结果": "すべての結果", "全部账号均可签到": "すべてのアカウントがチェックイン可能", "全部领取": "すべて受け取り済み", "关着:所有条目都不执行": "オフ:どのスケジュールも実行されません", "删除失败:{error}": "削除に失敗しました:{error}", "删除定时条目": "スケジュールを削除", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活并在网页通道建会话点亮日活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;CodeArts 领当日的运营福利(领取 → 确认 → 回读核实,自动执行受每天 6 次 / 间隔 10 分钟的写请求限流);OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "時刻になると、チェックを入れたプロバイダーの利用可能なアカウントを自動でチェックインします(WorkBuddy 国内版は毎日チェックイン API、国際版はデイリーアクティブクエスト:イベントを探し、デイリーアクティブ報酬を受け取り、無料モデルでキープアライブし、Web チャネルでセッションを張って日次アクティブを点灯。小浣熊はデスクトップの日次ポイント経路。AutoClaw は公式クライアントの毎日チェックインタスク。Qoder 中国版はイベント受領で、イベントを付与されていないアカウントは中立的な通知を受け取ります。Qoder 国際版はデバイスのリスク管理 ID(ローカル Qoder クライアント / qodercli の UMID コンポーネントが生成)を持たないと「毎日 100 Credits」イベントが表示されず、コンポーネントがなければエラーではなく明確な説明が返ります。Trae は SOLO の毎日チェックインポイントを受け取り(0 時リセット)、上流がイベントを用意していない、または認証情報にデバイス ID がない場合は「未受領 + 理由」が返ります。Loomy は毎日 1 回初回ログインポイントを付け、KukuAI は「無料ポイント」の日次タスクを受け取り、CodeArts は当日の運営特典を受け取ります(受領 → 確認 → 再読で検証。自動実行は 1 日 6 回 / 10 分間隔の書き込みレート制限内)。OfficeAce はその日の特典を一括で受け取ります(毎日チェックイン + 新規特典))。時刻を逃しても起動時に自動で追補するため、電源が入っていなくても取りこぼしません。各社のチェックイン API は冪等で、繰り返しても二重受け取りにはなりません。", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;CodeArts 领当日的运营福利(领取 → 确认 → 回读核实,自动执行受每天 6 次 / 间隔 10 分钟的写请求限流);OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "時刻になると、チェックしたプロバイダーの利用可能なアカウントを自動でチェックインします(WorkBuddy 中国版はデイリーチェックイン API、国際版はデイリーアクティブタスク:イベントを検出して日活報酬を受け取り、無料モデルでキープアライブ。小浣熊はデスクトップ版のデイリー積分経路。AutoClaw は公式クライアントのデイリーチェックインタスク。Qoder 中国版はイベント受け取りで、イベントが配信されていないアカウントには中立的な案内が出ます。Qoder 国際版はデバイスリスク制御 ID(本機の Qoder クライアント / qodercli の UMID コンポーネントで生成)を付けて初めて「毎日 100 Credits」イベントが見えるようになり、コンポーネントが欠けている場合はエラーではなく明確な説明が出ます。Trae は SOLO のデイリーチェックイン積分を受け取り(自然日 0 時にリセット)、アップストリームがそのアカウントにイベントを開いていない場合や認証情報にデバイス ID がない場合は、エラーではなく「未受け取り + 具体的な理由」が返ります。Loomy は毎日アカウントの初回ログイン積分を 1 回付与します。KukuAI は「無料積分受け取り」のデイリータスクを消化します;CodeArts はその日の運営特典を受け取ります(受け取り → 確認 → 読み戻し検証。自動実行は 1 日 6 回・間隔 10 分の書き込み制限を受けます);OfficeAce はその日の報酬を一度の操作でまとめて受け取ります(毎日チェックイン+新規特典))。時刻を逃しても、起動後に自動で補完チェックインされ、当時電源が入っていなかったことを理由に漏れることはありません。各社のチェックイン API はすべて冪等なので、繰り返し実行しても二重に受け取ることはありません。", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "時刻になると、チェックしたプロバイダーの利用可能なアカウントを自動でチェックインします(WorkBuddy 中国版はデイリーチェックイン API、国際版はデイリーアクティブタスク:イベントを検出して日活報酬を受け取り、無料モデルでキープアライブ。小浣熊はデスクトップ版のデイリー積分経路。AutoClaw は公式クライアントのデイリーチェックインタスク。Qoder 中国版はイベント受け取りで、イベントが配信されていないアカウントには中立的な案内が出ます。Qoder 国際版はデバイスリスク制御 ID(本機の Qoder クライアント / qodercli の UMID コンポーネントで生成)を付けて初めて「毎日 100 Credits」イベントが見えるようになり、コンポーネントが欠けている場合はエラーではなく明確な説明が出ます。Trae は SOLO のデイリーチェックイン積分を受け取り(自然日 0 時にリセット)、アップストリームがそのアカウントにイベントを開いていない場合や認証情報にデバイス ID がない場合は、エラーではなく「未受け取り + 具体的な理由」が返ります。Loomy は毎日アカウントの初回ログイン積分を 1 回付与します。KukuAI は「無料積分受け取り」のデイリータスクを消化します;OfficeAce はその日の報酬を一度の操作でまとめて受け取ります(毎日チェックイン+新規特典))。時刻を逃しても、起動後に自動で補完チェックインされ、当時電源が入っていなかったことを理由に漏れることはありません。各社のチェックイン API はすべて冪等なので、繰り返し実行しても二重に受け取ることはありません。", "到点时逐个签到,已勾 {n} / {total} 家": "定刻に 1 社ずつチェックインします。選択 {n} / {total} 社", "北京时间 · 错过时点开机后会自动补签": "北京時間 · 起動時に自動で補完します", "去领取": "受け取りへ", "另有 {n} 个账号不参与每日签到": "ほかにデイリーチェックインの対象外のアカウントが {n} 件", "只领取已完成任务的奖励(幂等,重复点不会重复入账)": "完了済みタスクの報酬のみ受け取り(冪等・連打しても二重加算されません)", "可完成": "完了可能", "可派出": "出発可能", "可选 · 缺省显示时刻": "任意 · 未指定では時刻を表示", "可领奖": "受け取り可能", "后端未返回定时签到数据": "バックエンドがスケジュールデータを返しませんでした", "后端未返回签到中心数据": "バックエンドがチェックインセンターのデータを返しませんでした", "国际版签到需要 UMID 组件生成设备风控身份(本机未检测到)。": "国際版のチェックインには、UMID コンポーネントで生成するデバイスリスク制御 ID が必要です(本機では検出されませんでした)。", "在途": "旅行中", "填入缺省链": "既定のチェーンを入力", "填好时刻与签到范围后点「保存」;名称可以留空(界面显示时刻)": "時刻と範囲を決めて「保存」を押してください。名前は空欄でも構いません(空欄なら時刻を表示)", "失败 {n}": "失敗 {n}", "套餐明细": "プラン明細", "安装 Qoder 客户端或 qodercli 后即可(无需重启网关)。": "Qoder クライアントまたは qodercli をインストールすれば利用できます(ゲートウェイの再起動は不要)。", "安装中…": "インストール中…", "官方客户端的每日签到任务": "公式クライアントのデイリーチェックインタスク", "定时签到": "定期チェックイン", "定时签到已关闭": "定期チェックインを無効にしました", "尚未查询": "未照会", "尚未查询任务状态": "タスク状態は未クエリ", "巡检一次": "1 回実行", "已保存:{label}": "保存しました:{label}", "已保存:保活模型链": "保存しました:キープアライブモデルチェーン", "已保存:定时条目": "保存しました:スケジュール", "已删除定时条目": "スケジュールを削除しました", "已完成活跃上报(连登已点亮),但活动未开启(本次没有可领的奖励)": "アクティビティを報告しました(連続ログイン達成)が、キャンペーンは未実施です(今回の報酬はなし)", "已抽 {n} 次": "{n} 回抽選しました", "已有结果 {checked} / 共 {total} 个账号": "結果あり {checked} / 全 {total} アカウント", "已签": "チェックイン済み", "已领 {claimed}/{total} · 累计 {earned} 积分": "受け取り済み {claimed}/{total} · 累計 {earned} 積分", "已领养": "飼い主になりました", "已领取": "受け取り済み", "带设备风控身份领取「每日 100 Credits」 · 需要 UMID 组件": "デバイスリスク制御 ID を付けて「毎日 100 Credits」を受け取り · UMID コンポーネントが必要", "开学季执行失败:{error}": "新学期の実行に失敗:{error}", "开学季执行完成:{message}": "新学期の実行が完了:{message}", "开学季活动": "新学期イベント", "开着:启用的条目按各自时刻执行": "オン:有効なスケジュールがそれぞれの時刻に実行されます", "待签": "未チェックイン", "待领新手福利": "受け取り待ちの初心者ボーナス", "总开关": "マスタースイッチ", "总开关已关闭 · 在「定时签到」页打开": "マスタースイッチがオフです · 「定期チェックイン」タブで有効化してください", "成功 {n}": "成功 {n}", "成长任务": "成長タスク", "成长任务完成({done} 项成功、{failed} 项失败),积分 +{credit} 能量 +{energy}": "成長タスク完了(成功 {done} 件・失敗 {failed} 件):クレジット +{credit} エネルギー +{energy}", "成长任务执行失败:{error}": "成長タスクの実行に失敗:{error}", "执行失败:{error}": "実行に失敗しました:{error}", "执行并抽奖": "実行して抽選", "执行开学季任务并抽空抽奖机会(分享 / 对话 / 专家事件)": "新学期タスクを実行し、抽選回数を使い切る(シェア/会話/エキスパートイベント)", "把缺省链填进清单,再点「保存」生效": "既定のチェーンを一覧に入れます。「保存」で反映されます", "抽奖机会 {n} 次": "抽選チャンス {n} 回", "按住拖动调整顺序": "押したままドラッグで並べ替え", "按住拖动,调整这个模型在链里的顺序": "押したままドラッグして、チェーン内でのこのモデルの順序を変更します", "按序逐个尝试,共 {n} 个": "順番に試行、計 {n} 件", "按结果筛选": "結果で絞り込み", "探测 + 领取 + 保活 · 与定时签到同一套组合": "検出 + 受け取り + キープアライブ · 定期チェックインと同じ組み合わせ", "探测活动并领取日活奖励 · 不做保活": "イベントを検出して日活報酬を受け取り · キープアライブは行わない", "接单 + 点亮 + 领奖(只处理已实测沉淀的任务)": "受注+点灯+受け取り(実測で検証済みのタスクのみ処理)", "搜账号 / 收益 / 错误 / 触发原因": "アカウント / 収益 / エラー / トリガー理由を検索", "收起新建": "新規入力を閉じる", "新建定时条目": "新しい定時エントリ", "新手福利": "初心者ボーナス", "新手福利有 {n} 项领取失败,可重试": "初心者ボーナスで {n} 件の受け取りに失敗しました。再試行できます", "无": "なし", "无独立签到接口 · 每天替账号打一次首次登录积分": "専用のチェックイン API なし · 毎日アカウントの初回ログイン積分を 1 回付与", "无账号": "アカウントなし", "暂不可领": "受け取り不可", "暂不支持": "未対応", "暂无启用的条目 · 点此添加": "有効なスケジュールがありません · クリックして追加", "有未保存的改动": "未保存の変更があります", "未勾选提供商": "プロバイダー未選択", "未开启": "未有効", "未解锁": "未解禁", "未领养(领养需先完成当日对话量)": "未飼育(飼育には当日の会話量の達成が先に必要)", "未领取": "未受け取り", "本地台账里今天还没领过;活动期内每天发一份新套餐": "ローカルの記録では本日まだ受け取っていません。キャンペーン期間中は毎日新しいプランが 1 件配布されます", "本地台账里今天(北京时间)领过的套餐:{plans}": "ローカル記録で本日(北京時間)受け取ったプラン:{plans}", "条启用": "件有効", "查询于 {time}": "{time} にクエリ", "查询任务": "タスクをクエリ", "查询任务树并一键点亮 / 领奖(含开学季与猫猫旅行)": "タスクツリーを照会してワンクリックで点灯/受け取り(新学期・ねこ旅行を含む)", "查询失败:{error}": "クエリに失敗しました:{error}", "桌面端每日积分链路": "デスクトップ版のデイリー積分経路", "正在读取定时签到数据…": "定期チェックインデータを読み込み中…", "正在读取签到数据…": "チェックインデータを読み込み中…", "每天 {time}": "毎日 {time}", "每天 {time} · {scope}": "毎日 {time} · {scope}", "每天时刻": "毎日の時刻", "每执行一次签到 · 每个账号一条明细 · 结果与收益以后端落账为准": "チェックイン1回ごとに · アカウントごとに1行 · 結果と収益はバックエンドの記録が正", "每日活跃任务 · 网页会话保活点亮日活,领取才加积分 · 两者可分开执行": "毎日のアクティブタスク · Webチャネルの会話で日活を達成、ポイントは受け取りで加算 · 両方は別々に実行可能", "每日登录积分 · 顺带领取会员活动 · 访客账号无积分体系(跳过)": "毎日ログインポイント · あわせて会員アクティビティを受け取り · ゲストアカウントはポイント体系なし(スキップ)", "每日福利 · 领取 → 确认 → 回读核实 · 按北京时间自然日重置": "デイリー特典 · 受け取り → 確認 → 読み戻し検証 · 北京時間の自然日でリセット", "每日签到": "デイリーチェックイン", "每条条目各有时刻与范围 · 各自当天去重 · 错过时点开机自动补签": "スケジュールごとに時刻と範囲 · 当日はそれぞれ重複排除 · 起動時に自動補完", "每账号一条明细 · 点此查看「签到记录」": "アカウントごとに1行 · 「チェックイン記録」を開く", "没有可领套餐的账号(ZCode 未添加)。": "受け取れるプランのあるアカウントがありません(ZCode 未追加)。", "没有可领福利的账号(CodeArts / ZCode 未添加)。": "受け取れる特典のあるアカウントがありません(CodeArts / ZCode が未追加)。", "没有支持成长任务的账号(需要 WorkBuddy 国内版)。": "成長タスクに対応するアカウントがありません(WorkBuddy 中国版が必要)。", "没有支持新手福利的账号": "初心者ボーナスに対応するアカウントがありません", "没有支持新手福利的账号 —— 目前有 Loomy、小浣熊、CodeArts 三家。": "初心者ボーナスに対応するアカウントがありません —— 現在は Loomy、小浣熊、CodeArts の 3 社です。", "没有符合筛选条件的签到记录": "絞り込み条件に一致するチェックイン記録がありません", "没有需要执行的任务": "実行するタスクはありません", "活动福利": "イベント特典", "活动(campaign)领取 · 每天 10:00 刷新": "イベント(campaign)の受け取り · 毎日 10:00 に更新", "活跃上报与保活均未成功,且活动未开启": "アクティビティの報告とキープアライブの両方に失敗し、キャンペーンも未実施です", "活跃上报完成,但保活未成功且活动未开启": "アクティビティの報告は完了しましたが、キープアライブに失敗し、キャンペーンも未実施です", "活跃上报完成,但活动未开启": "アクティビティを報告しましたが、キャンペーンは未実施です", "活跃上报成功": "アクティビティの報告に成功しました", "活跃保活失败": "アクティブのキープアライブに失敗しました", "活跃保活完成": "アクティブのキープアライブが完了しました", "活跃保活完成,但活动未开启": "アクティブのキープアライブは完了しましたが、イベントが有効ではありません", "活跃保活完成,但活跃上报失败且活动未开启": "キープアライブは完了しましたが、アクティビティの報告に失敗し、キャンペーンも未実施です", "添加条目": "スケジュールを追加", "添加模型": "モデルを追加", "清单为空 —— 保存后恢复缺省链": "リストが空です — 保存すると既定のチェーンに戻ります", "清单里已经有「{name}」": "リストに「{name}」はすでにあります", "清空失败:{error}": "クリアに失敗しました:{error}", "清空签到记录": "チェックイン記録をクリア", "点「套餐明细」看领到了哪几份、什么时候生效;活动期内每天可再领": "「プラン明細」で受け取ったプランと有効になる時期を確認できます。キャンペーン期間中は毎日また受け取れます", "点击行展开账号明细 · 单账号签到不受范围限制": "行をクリックしてアカウントの詳細を展開 · 単一アカウントのチェックインは範囲の制限を受けません", "独立链路 · 只提供手动入口 · 不进自动签到": "独立した経路 · 手動入口のみ · 自動チェックインには含まれない", "猫猫旅行": "ねこ旅行", "猫猫旅行失败:{error}": "ねこ旅行に失敗:{error}", "猫猫旅行失败:{message}": "ねこ旅行に失敗:{message}", "猫猫旅行:{message}": "ねこ旅行:{message}", "用免费模型与网页会话维持账号活跃 · 不领取奖励": "無料モデルとWebチャネルの会話でアカウントのアクティブ状態を維持 · 報酬は受け取らない", "确定删除「{name}」?删除后到点不再执行。": "「{name}」を削除しますか?削除後は予定時刻に実行されません。", "确定清空全部签到记录?清空后无法恢复。": "すべてのチェックイン記録をクリアしますか?クリア後は復元できません。", "确定清空当前筛选出的签到记录?清空后无法恢复。": "現在の絞り込みに一致するチェックイン記録をクリアしますか?クリア後は復元できません。", "移除 {name}": "{name} を削除", "立即全部签到": "今すぐ一括チェックイン", "签到": "チェックイン", "签到中…": "チェックイン中…", "签到中心分区": "チェックインセンターのセクション", "签到失败:{error}": "チェックインに失敗しました:{error}", "签到完成:{succeeded}/{total} 成功{active},{failed} 个失败": "チェックイン完了:{succeeded}/{total} 成功{active}、{failed} 件失敗", "签到成功": "チェックインに成功しました", "签到提供商": "チェックインプロバイダー", "签到范围": "チェックイン範囲", "签到触发时刻": "チェックイン実行時刻", "签到记录": "チェックイン記録", "签到记录时间范围": "チェックイン記録の時間範囲", "签到记录表": "チェックイン記録テーブル", "累计签到记录": "累計チェックイン記録", "结算于 {time}": "{time} に確定", "能量 {n}": "エネルギー {n}", "腾讯每日签到接口 · 仅国内版": "Tencent のデイリーチェックイン API · 中国版のみ", "至少勾一家才能保存(不勾等于这条条目不签到)": "保存するには 1 社以上選択してください(未選択=このエントリは何もチェックインしません)", "读取定时签到数据失败:{error}": "定期チェックインデータの読み込みに失敗しました:{error}", "读取签到数据失败:{error}": "チェックインデータの読み込みに失敗しました:{error}", "读取签到记录失败:{error}": "チェックイン記録の読み込みに失敗しました:{error}", "跳过 {n}": "スキップ {n}", "运营活动交付(领取 → 确认 → 回读核实)· 领的是套餐赠送积分": "運営イベントの受け渡し(受け取り → 確認 → 読み戻しで検証)· 受け取るのはプラン特典積分", "还没执行过": "まだ実行されていません", "还没有定时条目 —— 点「添加条目」建一条,或到「签到中心」手动签到。": "スケジュールがまだありません —— 「スケジュールを追加」で作成するか、「チェックインセンター」で手動チェックインしてください。", "还没有签到记录 —— 手动签到或等定时条目执行后,明细会出现在这里。": "チェックイン記録はまだありません —— 手動チェックインまたは定期実行の後に、明細がここに表示されます。", "连登 {n} 天": "連続ログイン {n} 日", "部分": "一部", "重签": "再チェックイン", "重试": "再試行", "限时体验套餐 · 领取需滑块验证码 · 逐份查看与领取": "期間限定お試しプラン · 受け取りにはスライダー認証が必要 · 1 件ずつ確認して受け取り", "限时体验套餐(start-plan),活动期内每天一份 · 领取需滑块验证码": "期間限定体験プラン(start-plan)。開催期間中は毎日 1 件 · 受け取りにはスライダー認証が必要", "需真实操作": "実際の操作が必要", "非活动期": "イベント期間外", "项": "件", "领取": "受け取る", "领取中": "受け取り中", "领取中…": "受け取り中…", "领取失败": "受け取りに失敗", "领取失败:{error}": "受け取りに失敗しました:{error}", "(共 {n} 个账号)": "(全 {n} アカウント)", "(能量 / 连登读数本次未取到)": "(エネルギー/連続ログインの数値は今回取得できませんでした)", ",日活保活 {n} 个": "、日活キープアライブ {n} 件" });
+window.wbI18nDict = window.wbI18nDict || {}; Object.assign(window.wbI18nDict, { " · ": " · ", "SOLO 的 checkin_credits 领取 · 按自然日 0 点刷新": "SOLO の checkin_credits 受け取り · 自然日 0 時に更新", "UMID 组件安装失败:{error}": "UMID コンポーネントのインストールに失敗しました:{error}", "WorkBuddy 国内版 · 查询任务树后一键点亮 / 领奖 · 含开学季与猫猫旅行 · 点击行展开明细": "WorkBuddy 中国版 · タスクツリーを照会してワンクリックで点灯/受け取り · 新学期イベントとねこ旅行を含む · 行をクリックで詳細", "WorkBuddy 国际版保活模型,按顺序回退": "WorkBuddy 国際版のキープアライブ用モデル(順番にフォールバック)", "WorkBuddy 国际版日活任务的免费模型 · 全局一份,与条目无关": "WorkBuddy国際版のデイリーアクティビティ用の無料モデル · 全体で1つの設定、スケジュールとは無関係", "{date}(每天 {time})": "{date}(毎日 {time})", "{label} ×{count}({reason})": "{label} ×{count}({reason})", "{n} 项可完成": "完了可能 {n} 件", "{n} 项待领": "{n} 件受け取り待ち", "{total} 账号 · {done} 已签": "{total} アカウント · {done} チェックイン済み", "{total} 项任务 · {pending} 项可完成": "タスク {total} 件 · 完了可能 {pending} 件", "✅ UMID 组件已安装,下轮签到即可领取国际版积分": "✅ UMID コンポーネントをインストールしました。次回のチェックインで国際版の積分を受け取れます", "✅ {message}": "✅ {message}", "✅ 定时签到已开启": "✅ 定期チェックインを有効にしました", "✅ 开学季任务执行完成": "✅ 新学期タスクの実行が完了しました", "✅ 成长任务执行完成:积分 +{credit} 能量 +{energy}": "✅ 成長タスク完了:クレジット +{credit} エネルギー +{energy}", "✅ 新手福利领取完成,累计 {n} 积分": "✅ 初心者ボーナスの受け取りが完了しました。累計 {n} 積分", "✅ 签到完成:{succeeded}/{total} 个账号成功领取{active}": "✅ チェックイン完了:{succeeded}/{total} 件のアカウントが受け取りに成功{active}", "「保活模型链」是 WorkBuddy 国际版领日活时用来保活的免费模型,按顺序逐个尝试、 第一个成功即止;清空提交恢复缺省({defaults})。 当天去重 + 幂等领取:重复执行只会拿到「已领取」,不会重复加分。": "「キープアライブモデルチェーン」は、WorkBuddy国際版のデイリーアクティビティでアカウントを活性化し続けるための無料モデルです。順に試し、最初の成功で止まります。空で送信すると既定({defaults})に戻します。当日の重複排除+冪等な受け取り:再実行しても「受取済み」が返るだけで、ポイントが二重に加算されることはありません。", "「保活模型链」是 WorkBuddy 国际版领日活时用来保活的免费模型,按顺序逐个尝试、 第一个成功即止;清空清单并保存 = 恢复缺省链(当前缺省:{defaults})。 当天去重 + 幂等领取:重复执行只会拿到「已领取」,不会重复加分。": "「キープアライブモデルチェーン」は、WorkBuddy国際版のデイリーアクティビティでアカウントを活性化し続けるための無料モデルです。順に試し、最初の成功で止まります。リストを空にして保存すると既定のチェーン(現在の既定:{defaults})に戻ります。当日の重複排除+冪等な受け取り:再実行しても「受取済み」が返るだけで、ポイントが二重に加算されることはありません。", "「免费领积分」的每日任务 · 逐个领取": "「無料積分受け取り」のデイリータスク · 1 つずつ受け取る", "一次性福利 · 签到后自动查询并领取,领完记在本机不再查上游 · 点击行展开任务清单": "一度きりの特典 · チェックイン後に自動で照会して受け取り、受け取り済みは本機に記録し以降はアップストリームに問い合わせません · 行をクリックしてタスク一覧を展開", "一次领当天全部奖励(每日签到 + 新人礼) · 幂等由上游保证": "その日の報酬を一度にまとめて受け取ります(毎日チェックイン+新規特典) · 冪等性はアップストリームが保証", "一键安装组件": "ワンクリックでインストール", "一键完成": "一括完了", "一键领取({n})": "一括受け取り({n})", "上次执行:{line}": "前回実行:{line}", "上次签到时间": "前回のチェックイン時刻", "上次领取 {time} · 领取需通过滑块验证码": "前回の受け取り {time} · 受け取りにはスライダー認証が必要", "下次 {date}": "次回 {date}", "下次 {date} · 点此管理条目": "次回 {date} · クリックしてスケジュールを管理", "不参与每日签到:{list}。CodeArts 的一次性奖励在下方「新手福利」,它与 ZCode 的每日/套餐福利领取见「活动福利」。": "デイリーチェックインの対象外:{list}。CodeArts の一度きりの特典は下の「初心者ボーナス」に、CodeArts と ZCode の日次/プラン特典の受け取りは「アクティビティ特典」にあります。", "不参与每日签到:{list}。CodeArts 的一次性奖励在下方「新手福利」,它的每日福利就在上方「每日签到」里;ZCode 的套餐领取见「活动福利」。": "デイリーチェックインの対象外:{list}。CodeArts の一度きりの特典は下の「初心者ボーナス」、CodeArts のデイリー特典はすぐ上の「デイリーチェックイン」にあります。ZCode のプラン受け取りは「アクティビティ特典」です。", "与国内版同一套任务接口 · 站点不同": "中国版と同じタスク API · サイトが異なる", "与国内版同一套链路 · 站点不同、令牌不通用": "中国版と同じフロー · サイトが異なり、トークンに互換性なし", "今天已领 {n} 份": "本日 {n} 件受け取り済み", "今天未领": "本日は未受取", "今天(北京时间 {day})已领取 · 官方确认到账 {n} 项 · 明天可再领": "本日(北京時間 {day})受け取り済み · 公式に {n} 件の到着を確認 · 明日また受け取れます", "今日已执行": "本日実行済み", "今日已派出": "本日は出発済み", "今日已领取": "本日受け取り済み", "今日签到": "本日のチェックイン", "今日签到进度": "本日のチェックイン進捗", "从清单里移除": "リストから削除", "保活": "キープアライブ", "保活 {n}": "キープアライブ {n}", "保活+领取": "キープアライブ+受け取り", "保活中…": "キープアライブ中…", "保活模型链": "キープアライブモデルチェーン", "全选": "すべて選択", "全部 {n} 家": "全 {n} 社", "全部完成": "すべて完了", "全部查询": "一括クエリ", "全部结果": "すべての結果", "全部账号均可签到": "すべてのアカウントがチェックイン可能", "全部领取": "すべて受け取り済み", "关着:开机后等到窗口起点再签,随机窗口当天生效": "オフ:起動後はウィンドウ開始まで待ち、当日からランダムウィンドウを適用", "关着:所有条目都不执行": "オフ:どのスケジュールも実行されません", "分钟 · 窗口内逐个账号随机执行,0 = 到点立即执行": "分 · ウィンドウ内で各アカウントをランダムな時刻に実行、0 = 定刻に即実行", "删除失败:{error}": "削除に失敗しました:{error}", "删除定时条目": "スケジュールを削除", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活并在网页通道建会话点亮日活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;CodeArts 领当日的运营福利(领取 → 确认 → 回读核实,自动执行受每天 6 次 / 间隔 10 分钟的写请求限流);OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。设了「随机前后 N 分钟」时,本轮账号在各自窗口内分散执行(窗口夹在当天 0 点到 23:59 之间),不再全部挤在同一分钟;窗口已过则立即全部执行。错过时点开机后会自动补签,不会因为当时没开机而漏掉(可在「启动补签」关掉,改为等到窗口起点)。各家签到接口都是幂等的,重复执行不会重复领取。": "時刻になると選択プロバイダーの利用可能なアカウントをサインインします(WorkBuddy 中国版は毎日チェックイン API、国際版はデイリーアクティブタスク:アクティビティ検出・日次報酬受取・無料モデルでキープアライブと Web セッションで連続日数を点灯。小浣熊はデスクトップの毎日ポイント経路、AutoClaw は公式クライアントの毎日サインインタスク、Qoder 中国版はキャンペーン受取でキャンペーン未配信のアカウントには中立の案内を表示、Qoder 国際版はデバイス風控身分(ローカルの Qoder クライアント / qodercli の UMID コンポーネントが生成)が必要で、コンポーネント欠如時はエラーではなく明確な説明を表示。Trae は SOLO の毎日チェックインクレジット(現地 0 時リセット)を受け取り、上流がアカウントにキャンペーンを出していない場合や資格情報にデバイス ID がない場合はエラーではなく「未受取 + 理由」を返します。Loomy は毎日初回ログインポイントを 1 回呼び、KukuAI は「無料ポイント」の毎日タスクを受け取り、CodeArts は当日の運営特典(受取 → 確認 → 読み戻し、自動実行は 1 日 6 回・10 分間隔の書き込み制限あり)を受け取り、OfficeAce はその日の全報酬(毎日チェックイン + 新規特典)を 1 回で受け取ります)。「ランダム幅 N 分」を設定すると、その回のアカウントは各自のウィンドウ内(当日 0:00〜23:59 にクランプ)に分散して実行され、同じ 1 分に集中しません。ウィンドウを過ぎている場合は全員すぐに実行します。逃した回は起動後にキャッチアップするので、電源が入っていなかったことで失われることはありません(「起動時キャッチアップ」をオフにするとウィンドウ開始まで待つ動作になります)。各プロバイダーのチェックイン API は冪等で、繰り返し実行しても二重取得にはなりません。", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;CodeArts 领当日的运营福利(领取 → 确认 → 回读核实,自动执行受每天 6 次 / 间隔 10 分钟的写请求限流);OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "時刻になると、チェックしたプロバイダーの利用可能なアカウントを自動でチェックインします(WorkBuddy 中国版はデイリーチェックイン API、国際版はデイリーアクティブタスク:イベントを検出して日活報酬を受け取り、無料モデルでキープアライブ。小浣熊はデスクトップ版のデイリー積分経路。AutoClaw は公式クライアントのデイリーチェックインタスク。Qoder 中国版はイベント受け取りで、イベントが配信されていないアカウントには中立的な案内が出ます。Qoder 国際版はデバイスリスク制御 ID(本機の Qoder クライアント / qodercli の UMID コンポーネントで生成)を付けて初めて「毎日 100 Credits」イベントが見えるようになり、コンポーネントが欠けている場合はエラーではなく明確な説明が出ます。Trae は SOLO のデイリーチェックイン積分を受け取り(自然日 0 時にリセット)、アップストリームがそのアカウントにイベントを開いていない場合や認証情報にデバイス ID がない場合は、エラーではなく「未受け取り + 具体的な理由」が返ります。Loomy は毎日アカウントの初回ログイン積分を 1 回付与します。KukuAI は「無料積分受け取り」のデイリータスクを消化します;CodeArts はその日の運営特典を受け取ります(受け取り → 確認 → 読み戻し検証。自動実行は 1 日 6 回・間隔 10 分の書き込み制限を受けます);OfficeAce はその日の報酬を一度の操作でまとめて受け取ります(毎日チェックイン+新規特典))。時刻を逃しても、起動後に自動で補完チェックインされ、当時電源が入っていなかったことを理由に漏れることはありません。各社のチェックイン API はすべて冪等なので、繰り返し実行しても二重に受け取ることはありません。", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "時刻になると、チェックしたプロバイダーの利用可能なアカウントを自動でチェックインします(WorkBuddy 中国版はデイリーチェックイン API、国際版はデイリーアクティブタスク:イベントを検出して日活報酬を受け取り、無料モデルでキープアライブ。小浣熊はデスクトップ版のデイリー積分経路。AutoClaw は公式クライアントのデイリーチェックインタスク。Qoder 中国版はイベント受け取りで、イベントが配信されていないアカウントには中立的な案内が出ます。Qoder 国際版はデバイスリスク制御 ID(本機の Qoder クライアント / qodercli の UMID コンポーネントで生成)を付けて初めて「毎日 100 Credits」イベントが見えるようになり、コンポーネントが欠けている場合はエラーではなく明確な説明が出ます。Trae は SOLO のデイリーチェックイン積分を受け取り(自然日 0 時にリセット)、アップストリームがそのアカウントにイベントを開いていない場合や認証情報にデバイス ID がない場合は、エラーではなく「未受け取り + 具体的な理由」が返ります。Loomy は毎日アカウントの初回ログイン積分を 1 回付与します。KukuAI は「無料積分受け取り」のデイリータスクを消化します;OfficeAce はその日の報酬を一度の操作でまとめて受け取ります(毎日チェックイン+新規特典))。時刻を逃しても、起動後に自動で補完チェックインされ、当時電源が入っていなかったことを理由に漏れることはありません。各社のチェックイン API はすべて冪等なので、繰り返し実行しても二重に受け取ることはありません。", "到点时逐个签到,已勾 {n} / {total} 家": "定刻に 1 社ずつチェックインします。選択 {n} / {total} 社", "北京时间 · 错过时点开机后会自动补签": "北京時間 · 起動時に自動で補完します", "去领取": "受け取りへ", "另有 {n} 个账号不参与每日签到": "ほかにデイリーチェックインの対象外のアカウントが {n} 件", "只领取已完成任务的奖励(幂等,重复点不会重复入账)": "完了済みタスクの報酬のみ受け取り(冪等・連打しても二重加算されません)", "可完成": "完了可能", "可派出": "出発可能", "可选 · 缺省显示时刻": "任意 · 未指定では時刻を表示", "可领奖": "受け取り可能", "后端未返回定时签到数据": "バックエンドがスケジュールデータを返しませんでした", "后端未返回签到中心数据": "バックエンドがチェックインセンターのデータを返しませんでした", "启动补签": "起動時キャッチアップ", "启动补签已关闭": "起動時キャッチアップを無効にしました", "启动补签已开启": "起動時キャッチアップを有効にしました", "国际版签到需要 UMID 组件生成设备风控身份(本机未检测到)。": "国際版のチェックインには、UMID コンポーネントで生成するデバイスリスク制御 ID が必要です(本機では検出されませんでした)。", "在途": "旅行中", "填入缺省链": "既定のチェーンを入力", "填好时刻与签到范围后点「保存」;名称可以留空(界面显示时刻)": "時刻と範囲を決めて「保存」を押してください。名前は空欄でも構いません(空欄なら時刻を表示)", "失败 {n}": "失敗 {n}", "套餐明细": "プラン明細", "安装 Qoder 客户端或 qodercli 后即可(无需重启网关)。": "Qoder クライアントまたは qodercli をインストールすれば利用できます(ゲートウェイの再起動は不要)。", "安装中…": "インストール中…", "官方客户端的每日签到任务": "公式クライアントのデイリーチェックインタスク", "定时签到": "定期チェックイン", "定时签到已关闭": "定期チェックインを無効にしました", "尚未查询": "未照会", "尚未查询任务状态": "タスク状態は未クエリ", "巡检一次": "1 回実行", "已保存:{label}": "保存しました:{label}", "已保存:保活模型链": "保存しました:キープアライブモデルチェーン", "已保存:定时条目": "保存しました:スケジュール", "已删除定时条目": "スケジュールを削除しました", "已完成活跃上报(连登已点亮),但活动未开启(本次没有可领的奖励)": "アクティビティを報告しました(連続ログイン達成)が、キャンペーンは未実施です(今回の報酬はなし)", "已抽 {n} 次": "{n} 回抽選しました", "已有结果 {checked} / 共 {total} 个账号": "結果あり {checked} / 全 {total} アカウント", "已签": "チェックイン済み", "已领 {claimed}/{total} · 累计 {earned} 积分": "受け取り済み {claimed}/{total} · 累計 {earned} 積分", "已领养": "飼い主になりました", "已领取": "受け取り済み", "带设备风控身份领取「每日 100 Credits」 · 需要 UMID 组件": "デバイスリスク制御 ID を付けて「毎日 100 Credits」を受け取り · UMID コンポーネントが必要", "开学季执行失败:{error}": "新学期の実行に失敗:{error}", "开学季执行完成:{message}": "新学期の実行が完了:{message}", "开学季活动": "新学期イベント", "开着:启用的条目按各自时刻执行": "オン:有効なスケジュールがそれぞれの時刻に実行されます", "开着:开机后今天没签过的条目立刻补签,不看随机窗口": "オン:起動後、本日未実行のスケジュールをランダムウィンドウを無視して即補完", "待签": "未チェックイン", "待领新手福利": "受け取り待ちの初心者ボーナス", "总开关": "マスタースイッチ", "总开关已关闭 · 在「定时签到」页打开": "マスタースイッチがオフです · 「定期チェックイン」タブで有効化してください", "成功 {n}": "成功 {n}", "成长任务": "成長タスク", "成长任务完成({done} 项成功、{failed} 项失败),积分 +{credit} 能量 +{energy}": "成長タスク完了(成功 {done} 件・失敗 {failed} 件):クレジット +{credit} エネルギー +{energy}", "成长任务执行失败:{error}": "成長タスクの実行に失敗:{error}", "执行失败:{error}": "実行に失敗しました:{error}", "执行并抽奖": "実行して抽選", "执行开学季任务并抽空抽奖机会(分享 / 对话 / 专家事件)": "新学期タスクを実行し、抽選回数を使い切る(シェア/会話/エキスパートイベント)", "把缺省链填进清单,再点「保存」生效": "既定のチェーンを一覧に入れます。「保存」で反映されます", "抽奖机会 {n} 次": "抽選チャンス {n} 回", "按住拖动调整顺序": "押したままドラッグで並べ替え", "按住拖动,调整这个模型在链里的顺序": "押したままドラッグして、チェーン内でのこのモデルの順序を変更します", "按序逐个尝试,共 {n} 个": "順番に試行、計 {n} 件", "按结果筛选": "結果で絞り込み", "探测 + 领取 + 保活 · 与定时签到同一套组合": "検出 + 受け取り + キープアライブ · 定期チェックインと同じ組み合わせ", "探测活动并领取日活奖励 · 不做保活": "イベントを検出して日活報酬を受け取り · キープアライブは行わない", "接单 + 点亮 + 领奖(只处理已实测沉淀的任务)": "受注+点灯+受け取り(実測で検証済みのタスクのみ処理)", "搜账号 / 收益 / 错误 / 触发原因": "アカウント / 収益 / エラー / トリガー理由を検索", "收起新建": "新規入力を閉じる", "新建定时条目": "新しい定時エントリ", "新手福利": "初心者ボーナス", "新手福利有 {n} 项领取失败,可重试": "初心者ボーナスで {n} 件の受け取りに失敗しました。再試行できます", "无": "なし", "无独立签到接口 · 每天替账号打一次登录信息(即当日魔粒)": "専用のチェックイン API なし · 1 日 1 回アカウントの代わりにログイン情報エンドポイントを叩く(それが当日の魔粒)", "无独立签到接口 · 每天替账号打一次首次登录积分": "専用のチェックイン API なし · 毎日アカウントの初回ログイン積分を 1 回付与", "无账号": "アカウントなし", "暂不可领": "受け取り不可", "暂不支持": "未対応", "暂无启用的条目 · 点此添加": "有効なスケジュールがありません · クリックして追加", "有未保存的改动": "未保存の変更があります", "未勾选提供商": "プロバイダー未選択", "未开启": "未有効", "未解锁": "未解禁", "未领养(领养需先完成当日对话量)": "未飼育(飼育には当日の会話量の達成が先に必要)", "未领取": "未受け取り", "本地台账里今天还没领过;活动期内每天发一份新套餐": "ローカルの記録では本日まだ受け取っていません。キャンペーン期間中は毎日新しいプランが 1 件配布されます", "本地台账里今天(北京时间)领过的套餐:{plans}": "ローカル記録で本日(北京時間)受け取ったプラン:{plans}", "条启用": "件有効", "查询于 {time}": "{time} にクエリ", "查询任务": "タスクをクエリ", "查询任务树并一键点亮 / 领奖(含开学季与猫猫旅行)": "タスクツリーを照会してワンクリックで点灯/受け取り(新学期・ねこ旅行を含む)", "查询失败:{error}": "クエリに失敗しました:{error}", "桌面端每日积分链路": "デスクトップ版のデイリー積分経路", "正在读取定时签到数据…": "定期チェックインデータを読み込み中…", "正在读取签到数据…": "チェックインデータを読み込み中…", "每天 {time}": "毎日 {time}", "每天 {time} · {scope}": "毎日 {time} · {scope}", "每天 {time} · 随机前后 {n} 分钟 · {scope}": "毎日 {time} 前後 {n} 分 · {scope}", "每天时刻": "毎日の時刻", "每执行一次签到 · 每个账号一条明细 · 结果与收益以后端落账为准": "チェックイン1回ごとに · アカウントごとに1行 · 結果と収益はバックエンドの記録が正", "每日活跃任务 · 网页会话保活点亮日活,领取才加积分 · 两者可分开执行": "毎日のアクティブタスク · Webチャネルの会話で日活を達成、ポイントは受け取りで加算 · 両方は別々に実行可能", "每日登录积分 · 顺带领取会员活动 · 访客账号无积分体系(跳过)": "毎日ログインポイント · あわせて会員アクティビティを受け取り · ゲストアカウントはポイント体系なし(スキップ)", "每日福利 · 领取 → 确认 → 回读核实 · 按北京时间自然日重置": "デイリー特典 · 受け取り → 確認 → 読み戻し検証 · 北京時間の自然日でリセット", "每日签到": "デイリーチェックイン", "每条条目各有时刻与范围 · 各自当天去重 · 错过时点开机自动补签": "スケジュールごとに時刻と範囲 · 当日はそれぞれ重複排除 · 起動時に自動補完", "每账号一条明细 · 点此查看「签到记录」": "アカウントごとに1行 · 「チェックイン記録」を開く", "没有可领套餐的账号(ZCode 未添加)。": "受け取れるプランのあるアカウントがありません(ZCode 未追加)。", "没有可领福利的账号(CodeArts / ZCode 未添加)。": "受け取れる特典のあるアカウントがありません(CodeArts / ZCode が未追加)。", "没有支持成长任务的账号(需要 WorkBuddy 国内版)。": "成長タスクに対応するアカウントがありません(WorkBuddy 中国版が必要)。", "没有支持新手福利的账号": "初心者ボーナスに対応するアカウントがありません", "没有支持新手福利的账号 —— 目前有 Loomy、小浣熊、CodeArts 三家。": "初心者ボーナスに対応するアカウントがありません —— 現在は Loomy、小浣熊、CodeArts の 3 社です。", "没有符合筛选条件的签到记录": "絞り込み条件に一致するチェックイン記録がありません", "没有需要执行的任务": "実行するタスクはありません", "活动福利": "イベント特典", "活动(campaign)领取 · 每天 10:00 刷新": "イベント(campaign)の受け取り · 毎日 10:00 に更新", "活跃上报与保活均未成功,且活动未开启": "アクティビティの報告とキープアライブの両方に失敗し、キャンペーンも未実施です", "活跃上报完成,但保活未成功且活动未开启": "アクティビティの報告は完了しましたが、キープアライブに失敗し、キャンペーンも未実施です", "活跃上报完成,但活动未开启": "アクティビティを報告しましたが、キャンペーンは未実施です", "活跃上报成功": "アクティビティの報告に成功しました", "活跃保活失败": "アクティブのキープアライブに失敗しました", "活跃保活完成": "アクティブのキープアライブが完了しました", "活跃保活完成,但活动未开启": "アクティブのキープアライブは完了しましたが、イベントが有効ではありません", "活跃保活完成,但活跃上报失败且活动未开启": "キープアライブは完了しましたが、アクティビティの報告に失敗し、キャンペーンも未実施です", "添加条目": "スケジュールを追加", "添加模型": "モデルを追加", "清单为空 —— 保存后恢复缺省链": "リストが空です — 保存すると既定のチェーンに戻ります", "清单里已经有「{name}」": "リストに「{name}」はすでにあります", "清空失败:{error}": "クリアに失敗しました:{error}", "清空签到记录": "チェックイン記録をクリア", "点「套餐明细」看领到了哪几份、什么时候生效;活动期内每天可再领": "「プラン明細」で受け取ったプランと有効になる時期を確認できます。キャンペーン期間中は毎日また受け取れます", "点击行展开账号明细 · 单账号签到不受范围限制": "行をクリックしてアカウントの詳細を展開 · 単一アカウントのチェックインは範囲の制限を受けません", "独立链路 · 只提供手动入口 · 不进自动签到": "独立した経路 · 手動入口のみ · 自動チェックインには含まれない", "猫猫旅行": "ねこ旅行", "猫猫旅行失败:{error}": "ねこ旅行に失敗:{error}", "猫猫旅行失败:{message}": "ねこ旅行に失敗:{message}", "猫猫旅行:{message}": "ねこ旅行:{message}", "用免费模型与网页会话维持账号活跃 · 不领取奖励": "無料モデルとWebチャネルの会話でアカウントのアクティブ状態を維持 · 報酬は受け取らない", "确定删除「{name}」?删除后到点不再执行。": "「{name}」を削除しますか?削除後は予定時刻に実行されません。", "确定清空全部签到记录?清空后无法恢复。": "すべてのチェックイン記録をクリアしますか?クリア後は復元できません。", "确定清空当前筛选出的签到记录?清空后无法恢复。": "現在の絞り込みに一致するチェックイン記録をクリアしますか?クリア後は復元できません。", "移除 {name}": "{name} を削除", "立即全部签到": "今すぐ一括チェックイン", "签到": "チェックイン", "签到中…": "チェックイン中…", "签到中心分区": "チェックインセンターのセクション", "签到失败:{error}": "チェックインに失敗しました:{error}", "签到完成:{succeeded}/{total} 成功{active},{failed} 个失败": "チェックイン完了:{succeeded}/{total} 成功{active}、{failed} 件失敗", "签到成功": "チェックインに成功しました", "签到提供商": "チェックインプロバイダー", "签到范围": "チェックイン範囲", "签到触发时刻": "チェックイン実行時刻", "签到记录": "チェックイン記録", "签到记录时间范围": "チェックイン記録の時間範囲", "签到记录表": "チェックイン記録テーブル", "累计签到记录": "累計チェックイン記録", "结算于 {time}": "{time} に確定", "能量 {n}": "エネルギー {n}", "腾讯每日签到接口 · 仅国内版": "Tencent のデイリーチェックイン API · 中国版のみ", "至少勾一家才能保存(不勾等于这条条目不签到)": "保存するには 1 社以上選択してください(未選択=このエントリは何もチェックインしません)", "读取定时签到数据失败:{error}": "定期チェックインデータの読み込みに失敗しました:{error}", "读取签到数据失败:{error}": "チェックインデータの読み込みに失敗しました:{error}", "读取签到记录失败:{error}": "チェックイン記録の読み込みに失敗しました:{error}", "跳过 {n}": "スキップ {n}", "运营活动交付(领取 → 确认 → 回读核实)· 领的是套餐赠送积分": "運営イベントの受け渡し(受け取り → 確認 → 読み戻しで検証)· 受け取るのはプラン特典積分", "还没执行过": "まだ実行されていません", "还没有定时条目 —— 点「添加条目」建一条,或到「签到中心」手动签到。": "スケジュールがまだありません —— 「スケジュールを追加」で作成するか、「チェックインセンター」で手動チェックインしてください。", "还没有签到记录 —— 手动签到或等定时条目执行后,明细会出现在这里。": "チェックイン記録はまだありません —— 手動チェックインまたは定期実行の後に、明細がここに表示されます。", "连登 {n} 天": "連続ログイン {n} 日", "部分": "一部", "重签": "再チェックイン", "重试": "再試行", "限时体验套餐 · 领取需滑块验证码 · 逐份查看与领取": "期間限定お試しプラン · 受け取りにはスライダー認証が必要 · 1 件ずつ確認して受け取り", "限时体验套餐(start-plan),活动期内每天一份 · 领取需滑块验证码": "期間限定体験プラン(start-plan)。開催期間中は毎日 1 件 · 受け取りにはスライダー認証が必要", "随机前后": "ランダム幅", "需真实操作": "実際の操作が必要", "非活动期": "イベント期間外", "项": "件", "领取": "受け取る", "领取中": "受け取り中", "领取中…": "受け取り中…", "领取失败": "受け取りに失敗", "领取失败:{error}": "受け取りに失敗しました:{error}", "(共 {n} 个账号)": "(全 {n} アカウント)", "(能量 / 连登读数本次未取到)": "(エネルギー/連続ログインの数値は今回取得できませんでした)", ",日活保活 {n} 个": "、日活キープアライブ {n} 件" });
diff --git a/desktop-tauri/ui/i18n/ko/add-account.js b/desktop-tauri/ui/i18n/ko/add-account.js
index ef34db34..e6b45d87 100644
--- a/desktop-tauri/ui/i18n/ko/add-account.js
+++ b/desktop-tauri/ui/i18n/ko/add-account.js
@@ -1,2 +1,2 @@
/* Agent2API 词典构建产物:ko/add-account —— 由 desktop-tauri/i18n/build.mjs 生成,请勿手改;源头是 i18n-src/*.json */
-window.wbI18nDict = window.wbI18nDict || {}; Object.assign(window.wbI18nDict, { " · 模型 {head}{rest}": " · 모델 {head}{rest}", " 等 {n} 个": " 등 {n}개", "1// 开头的 Google refresh token(也可直接粘贴 refresh_token=… 整行)": "1//로 시작하는 Google refresh token (refresh_token=… 줄 전체를 붙여넣어도 됨)", "11 位大陆手机号": "11자리 중국 본토 휴대폰 번호", "1~64 个字符,账号列表里按它分组显示": "1~64자, 계정 목록에서 이 값을 기준으로 그룹화되어 표시됩니다", "6 位数字": "6자리 숫자", "
没有可自动领的活动": "자동으로 수령할 수 있는 이벤트가 없습니다", "领到的是套餐赠送积分,不会增加福利模型的 token 池;": "
수령하는 것은 플랜 증정 포인트이며, 혜택 모델의 token 풀은 늘지 않습니다;", "Anthropic 兼容端点在 https://api.deepseek.com/anthropic(协议换 anthropic 时填它)": "Anthropic 호환 엔드포인트는 https://api.deepseek.com/anthropic입니다 (프로토콜을 anthropic으로 바꿀 때 입력합니다)", "Anthropic 协议填根地址,不要带 /v1": "Anthropic 프로토콜은 루트 주소를 입력하고 /v1은 붙이지 마세요", "Antigravity": "Antigravity", "AutoClaw 国内版": "AutoClaw 중국판", "AutoClaw 国际版": "AutoClaw 국제판", "BDUSS 必填;请粘贴**完整 Cookie**(Cookie 编辑器一键导出即可)—— 其中 **PTOKEN 必须保留**,网关要用它向百度换发 KukuAI 业务会话令牌,缺了它模型刷新会报「未登录」。支持整段 Cookie 头、Cookie 编辑器导出的 JSON 数组,或 {BDUSS, STOKEN} 对象。KukuAI 没有刷新机制,登录态过期后重新粘贴即可。": "BDUSS는 필수입니다; **전체 Cookie**를 붙여넣으세요 (Cookie 편집기에서 원클릭 내보내기 가능) — 이 중 **PTOKEN은 반드시 남겨 두세요**. 게이트웨이가 이것을 사용해 Baidu에서 KukuAI 비즈니스 세션 토큰을 교환 발급받으며, 없으면 모델 갱신 시 「미로그인」 오류가 발생합니다. 전체 Cookie 헤더, Cookie 편집기에서 내보낸 JSON 배열, 또는 {BDUSS, STOKEN} 객체를 지원합니다. KukuAI에는 갱신 메커니즘이 없으므로 로그인 상태가 만료되면 다시 붙여넣으면 됩니다.", "BDUSS=…; STOKEN=…(或 Cookie 编辑器导出的 JSON)": "BDUSS=…; STOKEN=… (또는 Cookie 편집기에서 내보낸 JSON)", "CatPaw 的 X-Passport-Token(登录态 Cookie)": "CatPaw의 X-Passport-Token (로그인 상태 Cookie)", "Cline Pass 的 API Key 在 app.cline.bot 获取(订阅制);端点为 OpenAI 兼容,模型清单以 Cline 控制台为准,模型名在模型管理里按裸名添加(如 glm-5.2 / kimi-k2.7-code / deepseek-v4-pro);上游按客户端形态校验,所需的客户端请求头已随卡预置": "Cline Pass의 API Key는 app.cline.bot에서 발급받습니다(구독제). 엔드포인트는 OpenAI 호환이며, 모델 목록은 Cline 콘솔을 기준으로 하고, 모델 이름은 모델 관리에서 접두사 없는 이름 그대로 추가합니다(예: glm-5.2 / kimi-k2.7-code / deepseek-v4-pro). 업스트림이 클라이언트 형태를 검증하므로 필요한 클라이언트 요청 헤더는 이 카드에 미리 설정되어 있습니다", "Cloud-IDE-JWT(三段点分)": "Cloud-IDE-JWT (3단 점 구분)", "Command Code": "Command Code", "JWT(三段点分;也可直接粘贴 Bearer 整行或 data.bin 内容)": "JWT(점 3개 구분. Bearer 전체 줄 또는 data.bin 내용을 붙여넣어도 됨)", "JWT(三段点分;也可直接粘贴 chatglm_token=… 整行)": "JWT(점 3개로 구분된 형식. chatglm_token=… 줄을 그대로 붙여도 됩니다)", "MonkeyCode": "MonkeyCode", "MonkeyCode 国际版": "MonkeyCode 국제판", "NVIDIA NIM 托管端点,Key 在 integrate.api.nvidia.com 申请": "NVIDIA NIM 관리형 엔드포인트, Key는 integrate.api.nvidia.com에서 신청합니다", "OfficeAce 果办": "OfficeAce", "accessToken 是 Accio 的登录凭证(一长串不透明 token,不是 JWT);refreshToken 可选,填了之后到期能自动续期。请填写 {label}账号的凭证 —— {siteNote}(最容易拿到的办法:直接用上方的「网页登录」,不需要手工找 token。)": "accessToken은 Accio의 로그인 자격 증명입니다 (길고 불투명한 token 문자열이며 JWT가 아닙니다); refreshToken은 선택이며, 입력하면 만료 시 자동 갱신됩니다. {label} 계정의 자격 증명을 입력하세요 — {siteNote} (가장 쉽게 얻는 방법: 위의 「웹 로그인」을 바로 사용하세요. token을 직접 찾을 필요가 없습니다.)", "accessToken 是 Trae 的 Cloud-IDE-JWT(三段点分),refreshToken 用于到期自动续期(本家 refreshToken 一次一换:换发一次旧的即作废,所以两份程序别同时刷同一个账号)。
手工粘贴时请连 machineId / deviceId 一起填:上游把它们与登录时上传的设备公钥绑在一起判设备,凭空换一对会撞 2xxxx 那族设备绑定拒绝。
没有这三样时的正路是用上方的「网页登录」;容器 / 远程部署形态按提示粘贴地址栏回调地址即可。": "accessToken은 Trae의 Cloud-IDE-JWT이며(3단 점 구분), refreshToken은 만료 시 자동 갱신에 사용됩니다 (이 제공자는 refreshToken이 교환할 때마다 바뀝니다: 한 번 교환하면 이전 것은 무효가 되므로 두 프로그램에서 같은 계정을 동시에 갱신하지 마세요).
수동으로 붙여넣을 때는 machineId / deviceId도 함께 입력하세요: 업스트림은 이를 로그인 시 업로드한 기기 공개 키와 묶어 기기를 판별하므로, 갑자기 새로운 값을 넣으면 2xxxx 계열 기기 바인딩 거부가 발생합니다.
이 세 가지가 없을 때의 올바른 방법은 위의 「웹 로그인」이며, 컨테이너 / 원격 배포 환경에서는 안내에 따라 주소 표시줄의 콜백 주소를 붙여넣으면 됩니다.", "monkeycode_ai_session 的值(也可直接粘贴整段 Cookie)": "monkeycode_ai_session의 값 (전체 Cookie를 붙여넣어도 됨)", "refreshToken 可选,填了到期可自动续期;两者都能从小浣熊客户端登录态文件里取到。": "refreshToken은 선택이며, 입력하면 만료 시 자동 갱신됩니다; 둘 다 小浣熊 클라이언트 로그인 상태 파일에서 얻을 수 있습니다.", "refreshToken 可选,填了可自动续期;两者都能从客户端登录态文件取到。同一个 Cline 账号两个池都能用,这里归入 {label}。": "refreshToken은 선택이며, 입력하면 자동 갱신됩니다; 둘 다 클라이언트 로그인 상태 파일에서 얻을 수 있습니다. 같은 Cline 계정은 두 풀 모두에서 사용할 수 있으며, 여기서는 {label}로 분류됩니다.", "token 支持 enc: 前缀(Windows 上自动解密)。未填 refreshToken 无法自动续期。": "token은 enc: 접두사를 지원합니다 (Windows에서는 자동 복호화). refreshToken을 입력하지 않으면 자동 갱신할 수 없습니다.", "token 是登录态 Cookie;CatPaw 没有刷新机制,过期后需在客户端重新登录。": "token은 로그인 상태 Cookie입니다; CatPaw에는 갱신 메커니즘이 없어 만료 후 클라이언트에서 다시 로그인해야 합니다.", "user_ 开头的 API Key(也可直接粘贴 Authorization: Bearer … 整行)": "user_로 시작하는 API Key (Authorization: Bearer … 줄 전체를 붙여넣어도 됨)", "{label} 网页登录的打开方式": "{label} 웹 로그인을 여는 방식", "{label} 账号地区": "{label} 계정 지역", "{label} 账号的添加方式": "{label} 계정 추가 방식", "{name} 不是合法 JSON:{reason}": "{name}은(는) 올바른 JSON이 아닙니다: {reason}", "{name}要粘一个 JSON 对象(形如 {sample})": "{name}에는 JSON 객체를 붙여넣어야 합니다 (예: {sample})", "{n} 个账号": "계정 {n}개", "{n} 个账号,点击添加": "계정 {n}개, 클릭하여 추가", "{seconds}s 后重发": "{seconds}초 후 재발송", "✅ {label}账号已添加": "✅ {label} 계정을 추가했습니다", "✅ {label}账号已添加{name}": "✅ {label} 계정을 추가했습니다{name}", "✅ 已从 cc-switch 导入 {n} 个供应商": "✅ cc-switch에서 제공자 {n}개를 가져왔습니다", "✅ 已创建自定义提供商「{name}」并添加账号": "✅ 커스텀 제공자 「{name}」을(를) 만들고 계정을 추가했습니다", "✅ 已删除自定义提供商「{name}」{accounts}{keys}": "✅ 커스텀 제공자 「{name}」을(를) 삭제했습니다{accounts}{keys}", "✅ 已更新已有账号{name}(同一把 API Key 只保留一条,重复添加会合并)": "✅ 기존 계정{name}을(를) 업데이트했습니다(동일한 API Key는 하나만 유지되며 다시 추가하면 병합됩니다)", "✅ 登录成功,{edition}账号已加入列表": "✅ 로그인 성공, {edition} 계정을 목록에 추가했습니다", "✅ 领取成功:{planId}{period}": "✅ 수령 성공: {planId}{period}", " 同一家可以放多把 key,按优先级轮换。": " 같은 제공자에 key를 여러 개 둘 수 있으며, 우선순위에 따라 로테이션됩니다.", "「{name}」的账号添加功能还在开发中,敬请期待。": "「{name}」의 계정 추가 기능은 아직 개발 중입니다. 기대해 주세요.", "一个 Key 用遍多家模型,模型名用「厂商/模型」全称(如 deepseek/deepseek-chat)": "하나의 Key로 여러 제공자의 모델을 사용할 수 있으며, 모델 이름은 「벤더/모델」 전체 이름을 씁니다 (예: deepseek/deepseek-chat)", "上游不要鉴权时留空,并勾选下面一项(留空又不勾会被当成未配置凭证)": "업스트림이 인증을 요구하지 않으면 비워 두고 아래 항목을 체크하세요 (비워 두고 체크하지 않으면 자격 증명 미설정으로 간주됩니다)", "上游信息": "업스트림 정보", "不可领({status})": "수령 불가 ({status})", "不支持导入": "가져오기 미지원", "不是有效的凭证文件:内容要是一个 JSON 对象": "유효한 자격 증명 파일이 아닙니다. 내용은 JSON 객체여야 합니다", "不是有效的凭证文件:需要包含 accessToken 与 uid": "유효한 자격 증명 파일이 아닙니다. accessToken과 uid가 필요합니다", "不是自定义提供商": "커스텀 제공자가 아닙니다", "不需要 Key:转发与拉取模型都不发送鉴权头": "Key 불필요: 포워딩과 모델 조회 모두 인증 헤더를 보내지 않습니다", "不需要登录:点下面的按钮,网关会直接在智谱清言换发一份访客凭证并加入账号列表(也可以先填个备注名)。访客凭证可以直接用来对话,免费额度由上游按设备发放。
注意:访客账号没有积分体系 —— 它与「会员积分」「每日登录积分」「活动领取」相关的接口一律需要登录,因此那些能力对访客会如实跳过(账号页的积分、签到中心都不显示读数)。想要积分就用「填写凭证」粘一个已登录账号的令牌,或「导入桌面端登录态」。": "로그인이 필요 없습니다. 아래 버튼을 누르면 게이트웨이가 智谱清言에서 게스트 자격 증명을 직접 발급받아 계정 목록에 추가합니다(먼저 메모 이름을 입력해도 됩니다). 게스트 자격 증명은 바로 대화에 쓸 수 있고, 무료 할당량은 업스트림이 기기 단위로 발급합니다.
주의: 게스트 계정에는 포인트 체계가 없습니다. 회원 포인트, 매일 로그인 포인트, 활동 수령 관련 인터페이스는 모두 로그인이 필요하므로 이러한 기능은 게스트에서 건너뜁니다(계정 페이지의 포인트와 签到 센터에 수치가 표시되지 않습니다). 포인트가 필요하면 \"자격 증명 입력\"으로 로그인된 계정 토큰을 붙여넣거나 \"데스크톱 로그인 상태 가져오기\"를 사용하세요.", "两版账号可同时保存,各自一份模型清单(国内版与国际版是两家提供商,可分别启用与映射)。": "두 판의 계정을 동시에 저장할 수 있으며 각각 별도의 모델 목록을 가집니다 (중국판과 국제판은 서로 다른 두 제공자로, 각각 활성화하고 매핑할 수 있습니다).", "中国版": "중국판", "今天没有需要领的活动(都已到账)": "오늘 수령할 이벤트가 없습니다 (모두 적립됨)", "今天(北京时间 {day})已试 {attempts} 次,还能试 {left} 次{next}
": "오늘(베이징 시간 {day}) {attempts}회 시도했고, {left}회 더 시도할 수 있습니다{next}
", "从别的机器(或 OfficeAce 桌面端 models.json)取三项贴进来:模型网关基址(baseUrl,形如 https://modelgw-…/v2)与 modelAppKey / modelAppSecret。这三项就能转发(网关凭据不过期);控制面临时凭据(accessKeyId 等)可选,留空则额度/自动续期不可用,但不影响转发。": "다른 컴퓨터(또는 OfficeAce 데스크톱 앱의 models.json)에서 다음 세 항목을 가져와 붙여넣으세요: 모델 게이트웨이 기본 주소(baseUrl, https://modelgw-…/v2 형태)와 modelAppKey / modelAppSecret. 이 세 항목만 있으면 전달할 수 있습니다(게이트웨이 자격 증명은 만료되지 않음). 제어 영역 임시 자격 증명(accessKeyId 등)은 선택이며, 비워 두면 잔액 조회와 자동 갱신을 쓸 수 없지만 전달에는 영향이 없습니다.", "从本机导入桌面端登录态": "이 컴퓨터에서 데스크톱 로그인 상태 가져오기", "任务镜像 id": "작업 이미지 id", "余额查询": "잔액 조회", "使用 Google 账号登录": "Google 계정으로 로그인", "使用 Zai 账号登录": "Zai 계정으로 로그인", "使用个人访问令牌(PAT)": "개인 액세스 토큰(PAT) 사용", "免费模型不用填 Key(默认勾上「该上游无需鉴权」,网关自动用匿名凭证);付费模型则填 Zen 的 API Key。免费档上游只认官方客户端形态,已默认开启「伪装 OpenCode 官方客户端」": "무료 모델은 Key를 입력하지 않아도 됩니다 (기본적으로 「이 업스트림은 인증이 필요하지 않음」이 체크되어 있고, 게이트웨이가 자동으로 익명 자격 증명을 사용합니다); 유료 모델은 Zen의 API Key를 입력하세요. 무료 등급 업스트림은 공식 클라이언트 형태만 허용하므로 「OpenCode 공식 클라이언트로 위장」이 기본으로 켜져 있습니다", "内嵌窗口": "내장 창", "内嵌窗口打开;关窗即取消等待(Google 账号被拒时改用系统浏览器)": "내장 창으로 엽니다; 창을 닫으면 대기가 취소됩니다 (Google 계정이 거부되면 시스템 브라우저를 사용하세요)", "内嵌窗口打开;完成后自动加入列表,关窗即取消等待": "내장 창으로 엽니다; 완료하면 자동으로 목록에 추가되고, 창을 닫으면 대기가 취소됩니다", "内嵌窗口打开;扫码完成后自动加入列表,关窗即取消等待": "내장 창으로 열립니다. 스캔이 끝나면 자동으로 목록에 추가되며, 창을 닫으면 대기가 취소됩니다", "内嵌窗口用全新环境,多账号互不影响;关窗即取消等待": "내장 창은 새 환경을 사용하므로 여러 계정이 서로 영향을 주지 않습니다; 창을 닫으면 대기가 취소됩니다", "内嵌窗口(推荐)": "내장 창(권장)", "准备验证…": "인증 준비 중…", "凭据 JSON": "자격 증명 JSON", "凭证文件在哪?": "자격 증명 파일 위치는?", "创建并添加账号": "생성하고 계정 추가", "创建这个提供商,并同时建立它的第一个账号。": "이 제공자를 만들고 동시에 첫 계정을 생성합니다.", "删除功能不可用(脚本未就绪)": "삭제 기능을 사용할 수 없습니다 (스크립트가 준비되지 않음)", "删除失败:{reason}": "삭제 실패: {reason}", "删除此提供商": "이 제공자 삭제", "及 {n} 个账号": " 및 계정 {n}개", "发送中…": "전송 중…", "发送失败:{message}": "전송 실패: {message}", "发送未确认:登录窗口已弹出,请在弹出的窗口中手动完成登录": "전송 미확인: 로그인 창이 열렸습니다. 열린 창에서 직접 로그인을 완료하세요", "取消失败:{message}": "취소 실패: {message}", "取消等待": "대기 취소", "只有「内嵌窗口」能恢复第三方入口:系统浏览器里我们无法改动登录页": "「내장 창」에서만 제3자 로그인 항목을 복원할 수 있습니다: 시스템 브라우저에서는 로그인 페이지를 수정할 수 없습니다", "可选": "선택", "可选(cloudaicompanionProject):留空由网关自动发现": "선택 (cloudaicompanionProject): 비워 두면 게이트웨이가 자동으로 찾습니다", "可选,展示用": "선택, 표시용", "可选,没有则无法自动续期": "선택, 없으면 자동 갱신 불가", "可选,留空使用凭据里的 user_name": "선택, 비워 두면 자격 증명의 user_name 사용", "可选,留空使用账号姓名、邮箱或令牌指纹": "선택, 비워 두면 계정 이름, 이메일 또는 토큰 지문 사용", "可选,留空使用账号昵称或邮箱": "선택, 비워 두면 계정 닉네임 또는 이메일 사용", "可选,留空则用 key 尾号": "선택, 비워 두면 key 끝자리 사용", "可选,留空则用 userId": "선택, 비워 두면 userId 사용", "可选,留空则用上游返回的账号名或账号 id": "선택, 비워 두면 업스트림이 반환한 계정 이름 또는 계정 id 사용", "可选,留空则用凭证里的账号名": "선택, 비워 두면 자격 증명의 계정 이름 사용", "可选,留空则用文件里的昵称": "선택 사항, 비워 두면 파일의 닉네임 사용", "可选,留空则用登录名或 uid": "선택, 비워 두면 로그인 이름 또는 uid 사용", "可选,留空则用脱敏手机号": "선택, 비워 두면 마스킹된 휴대폰 번호 사용", "可选,留空则用脱敏手机号或 userId": "선택, 비워 두면 마스킹된 휴대폰 번호 또는 userId 사용", "可选,留空则用账号 uk": "선택, 비워 두면 계정 uk 사용", "可选,留空则用账号昵称": "선택 사항. 비워 두면 계정 닉네임을 사용합니다", "可选,留空则用账号昵称或 userId": "선택 사항. 비워 두면 계정 닉네임 또는 userId 사용", "可选,留空则用邮箱或令牌尾号": "선택, 비워 두면 이메일 또는 토큰 끝자리 사용", "可选,留空用「OfficeAce 果办」": "선택, 비워 두면 「OfficeAce」 사용", "可选,留空自动生成": "선택, 비워 두면 자동 생성", "可选,留空自动用昵称": "선택, 비워 두면 닉네임 자동 사용", "可选,给这个访客账号起个备注名": "선택 사항. 이 게스트 계정의 메모 이름", "可选,续期时带上": "선택, 갱신 시 함께 전송", "可选,讯飞侧 userid": "선택, iFlytek 측 userid", "可选:发起对话必需,留空则由网关从该账号已有任务里自动发现,发现不到时之后手动补": "선택; 대화 시작에 필요합니다. 비워 두면 게이트웨이가 이 계정의 기존 작업에서 자동으로 찾습니다. 찾지 못하면 나중에 직접 입력하면 됩니다.", "可选:账号邮箱,用于展示与身份识别(换新令牌也能认回同一账号)": "선택; 계정 이메일로, 표시와 신원 식별에 사용됩니다 (새 토큰으로 바꿔도 같은 계정으로 인식됩니다)", "可选;UUID 形态,与凭据同生共死": "선택; UUID 형식이며 자격 증명과 함께 생성되고 함께 사라집니다", "可选;填了才能到期自动续期": "선택; 입력해야 만료 시 자동 갱신할 수 있습니다", "可选;用于去重与展示名(留空时网关会问一次上游)": "선택; 중복 제거와 표시 이름에 사용됩니다 (비워 두면 게이트웨이가 업스트림에 한 번 물어봅니다)", "可选;用于生成账号 id 与展示名": "선택; 계정 id와 표시 이름 생성에 사용됩니다", "可选;纯数字串(上游只收 8–24 位数字)": "선택; 숫자만 입력 (업스트림은 8–24자리 숫자만 허용)", "可领取": "수령 가능", "同一家可以混着放:有 Key 的账号与无鉴权账号各按各的规则走;无需鉴权的账号也能并存多条(各自可配不同的出网代理)": "한 제공사에 API Key 있는 계정과 인증 불필요 계정을 섞어 둘 수 있으며 각각의 규칙으로 라우팅됩니다. 인증 불필요 계정도 여러 개 둘 수 있고 각각 다른 아웃바운드 프록시를 설정할 수 있습니다", "同地址换 anthropic 协议即走它的 Claude 兼容端点。转发必须填 OpenCode Go 的 API Key(订阅制;获取模型清单不需要 Key,但发请求上游会回 401「Missing API key」)": "같은 주소에서 anthropic 프로토콜로 바꾸면 해당 Claude 호환 엔드포인트를 사용합니다. 포워딩에는 OpenCode Go의 API Key가 반드시 필요합니다 (구독제; 모델 목록 조회에는 Key가 필요 없지만, 요청을 보내면 업스트림이 401 「Missing API key」를 반환합니다)", "响应为空": "응답이 비어 있습니다", "商汤日日新的 OpenAI 兼容端点;余额查询走控制台账号密码(见下方「余额查询」一段)": "SenseNova 의 OpenAI 호환 엔드포인트. 잔액 조회는 콘솔 계정 / 비밀번호를 사용합니다 (아래 \"잔액 조회\" 단락 참조)", "国内版": "중국판", "国内版与**国际版是两套独立的账号与套餐**,凭证与领取的套餐都不通用。": "중국판과 **국제판은 서로 독립된 두 세트의 계정과 플랜**입니다. 자격 증명과 수령한 플랜은 서로 호환되지 않습니다.", "国内版登录页没有 Google / GitHub 入口(它用微信 / 手机号 / 邮箱登录)": "중국판 로그인 페이지에는 Google / GitHub 항목이 없습니다 (WeChat / 휴대폰 번호 / 이메일로 로그인합니다)", "国内版的登录站点是 www.accio-ai.com,与国际版不是同一站。": "중국판의 로그인 사이트는 www.accio-ai.com이며, 국제판과 같은 사이트가 아닙니다.", "国内版(WorkBuddy)": "중국판 (WorkBuddy)", "国内站为 https://api.siliconflow.cn/v1": "중국 사이트는 https://api.siliconflow.cn/v1입니다", "国内站(minimaxi.com);OpenAI 兼容地址为 https://api.minimaxi.com/v1": "중국 사이트 (minimaxi.com); OpenAI 호환 주소는 https://api.minimaxi.com/v1입니다", "国际版": "국제판", "国际版 z.ai 的 Coding 套餐;OpenAI 兼容地址为 https://api.z.ai/api/coding/paas/v4": "국제판 z.ai의 Coding 플랜; OpenAI 호환 주소는 https://api.z.ai/api/coding/paas/v4입니다", "国际版与国内版是**两套独立的账号**(同一账号体系的两个站点),凭证不通用。": "국제판과 중국판은 **서로 독립된 두 세트의 계정**입니다 (같은 계정 체계의 두 사이트). 자격 증명은 호환되지 않습니다.", "国际版与国内版账号体系独立,请填国际版的凭证。未填 refreshToken 无法自动续期。": "국제판과 중국판은 계정 체계가 독립적입니다. 국제판의 자격 증명을 입력하세요. refreshToken을 입력하지 않으면 자동 갱신할 수 없습니다.", "国际版登录页默认只显示邮箱登录,勾选后恢复 Google / GitHub / X 入口": "국제판 로그인 페이지는 기본적으로 이메일 로그인만 표시하며, 체크하면 Google / GitHub / X 항목이 복원됩니다", "国际版的推理站点是 api.z.ai,与国内版不是同一站;套餐也各自独立。": "국제판의 추론 사이트는 api.z.ai이며 중국판과 다른 사이트입니다; 플랜도 각각 독립적입니다.", "国际版(WorkBuddy AI)": "국제판 (WorkBuddy AI)", "国际站 Coding 套餐;OpenAI 兼容地址为 https://api.minimax.io/v1": "국제 사이트 Coding 플랜; OpenAI 호환 주소는 https://api.minimax.io/v1입니다", "在 cc-switch 里找到": "cc-switch에서 찾은", "在内嵌窗口里完成官方登录,成功后自动加入账号列表。": "내장 창에서 공식 로그인을 완료하면 성공 시 자동으로 계정 목록에 추가됩니다.", "在{label}的 Qoder 账号设置 → Integrations 生成 PAT(别填 Google / GitHub 的令牌)。两个地区的账号与凭证不通用。": "{label}의 Qoder 계정 설정 → Integrations에서 PAT를 생성하세요 (Google / GitHub 토큰을 입력하지 마세요). 두 지역의 계정과 자격 증명은 호환되지 않습니다.", "在打开的官方授权页里用微信扫码登录(页面会直接显示二维码)。扫码成功后自动加入账号列表。": "열린 공식 인증 페이지에서 위챗 QR 코드를 스캔하여 로그인하세요(페이지에 QR 코드가 바로 표시됩니다). 스캔에 성공하면 계정이 자동으로 목록에 추가됩니다.", "在打开的窗口里用百度账号登录 KukuAI 主站(手机验证码 / 扫码均可),登录成功后自动加入账号列表。网关会向百度换发 KukuAI 业务会话令牌(依赖本机已安装库库AI 客户端)。": "열린 창에서 Baidu 계정으로 KukuAI 메인 사이트에 로그인하세요 (SMS 인증 코드 / QR 스캔 모두 가능). 로그인에 성공하면 자동으로 계정 목록에 추가됩니다. 게이트웨이는 Baidu에서 KukuAI 비즈니스 세션 토큰을 교환 발급받습니다 (이 컴퓨터에 KukuAI 클라이언트가 설치되어 있어야 합니다).", "在打开的窗口里登录 Google 账号(Antigravity 的授权页),授权完成后自动加入账号列表。": "열린 창에서 Google 계정으로 로그인하세요(Antigravity의 인가 페이지). 인가가 완료되면 자동으로 계정 목록에 추가됩니다.", "在浏览器中打开登录页": "브라우저에서 로그인 페이지 열기", "地区": "지역", "填写凭证": "자격 증명 입력", "填写凭证添加": "자격 증명 입력 후 추가", "备注名": "라벨명", "套餐": "플랜", "如:智谱 GLM": "예: Zhipu GLM", "完成登录后自动加入账号列表,昵称取自上游。": "로그인을 완료하면 자동으로 계정 목록에 추가되며, 닉네임은 업스트림에서 가져옵니다.", "官方客户端凭证目录:Windows 是 C:\\Users\\<你的用户名>\\AppData\\Local\\CodeBuddyExtension\\Data\\Public\\auth,macOS 是 ~/Library/Application Support/CodeBuddyExtension/Data/Public/auth": "공식 클라이언트 자격 증명 디렉터리: Windows는 C:\\Users\\<사용자명>\\AppData\\Local\\CodeBuddyExtension\\Data\\Public\\auth, macOS는 ~/Library/Application Support/CodeBuddyExtension/Data/Public/auth", "官方已确认到账": "공식 적립 확인 완료", "导入": "가져오기", "导入中…": "가져오는 중…", "导入凭证文件": "자격 증명 파일 가져오기", "导入失败": "가져오기 실패", "导入失败:{reason}": "가져오기 실패: {reason}", "导入所选": "선택 항목 가져오기", "导入所选({n})": "선택 항목 가져오기({n})", "导入桌面端登录态": "데스크톱 로그인 상태 가져오기", "将打开内嵌窗口;授权完成后自动加入账号列表。关掉窗口即取消等待。授权页最后可能提示无法打开 zcode:// 链接,这是正常的 —— 结果已由服务端记下": "내장 창이 열립니다; 인가가 완료되면 자동으로 계정 목록에 추가됩니다. 창을 닫으면 대기가 취소됩니다. 인가 페이지 마지막에 zcode:// 링크를 열 수 없다는 안내가 나올 수 있는데, 정상입니다 — 결과는 이미 서버 측에 기록되었습니다", "将打开内嵌窗口;授权完成后自动加入账号列表。远程面板可粘贴回调地址。关掉窗口即取消等待。链接 5 分钟内有效,超时或未点就会作废(可重新发起)": "내장 창이 열립니다; 인가가 완료되면 자동으로 계정 목록에 추가됩니다. 원격 패널에서는 콜백 주소를 붙여넣을 수 있습니다. 창을 닫으면 대기가 취소됩니다. 링크는 5분간 유효하며, 시간이 초과되거나 클릭하지 않으면 무효가 됩니다 (다시 시작할 수 있습니다)", "将打开内嵌窗口;登录完成后自动加入账号列表。关掉窗口即取消等待": "내장 창이 열립니다; 로그인이 완료되면 자동으로 계정 목록에 추가됩니다. 창을 닫으면 대기가 취소됩니다", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的 Trae 账号);同机完成后自动加入,Docker / 远程面板按提示粘贴地址栏回调地址。": "시스템 기본 브라우저로 인가 페이지를 엽니다 (브라우저에 로그인된 Trae 계정을 재사용합니다); 같은 컴퓨터에서는 완료 시 자동으로 추가되며, Docker / 원격 패널에서는 안내에 따라 주소 표시줄의 콜백 주소를 붙여넣으세요.", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的 ZCode 账号);授权完成后自动加入账号列表。页面最后可能提示无法打开 zcode:// 链接,属正常现象": "시스템 기본 브라우저로 인가 페이지를 엽니다 (브라우저에 로그인된 ZCode 계정을 재사용합니다); 인가가 완료되면 자동으로 계정 목록에 추가됩니다. 페이지 마지막에 zcode:// 링크를 열 수 없다는 안내가 나올 수 있는데 정상입니다", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的华为云账号);授权码由网关轮询云端取回,与浏览器跑在哪台机器无关,完成后自动加入账号列表": "시스템 기본 브라우저로 인가 페이지를 엽니다 (브라우저에 로그인된 Huawei Cloud 계정을 재사용합니다); 인가 코드는 게이트웨이가 클라우드를 폴링해 가져오므로 브라우저가 어느 컴퓨터에서 실행되는지는 상관없습니다. 완료하면 자동으로 계정 목록에 추가됩니다", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的华为云账号);浏览器与网关不在同一台机器时,按上方说明把最终回调地址粘贴回面板": "시스템 기본 브라우저로 인가 페이지를 엽니다 (브라우저에 로그인된 Huawei Cloud 계정을 재사용합니다); 브라우저와 게이트웨이가 같은 컴퓨터에 있지 않다면 위 설명대로 최종 콜백 주소를 패널에 다시 붙여넣으세요", "将用系统默认浏览器打开登录页(会复用浏览器里已登录的 Accio 账号);完成登录后自动加入账号列表,关掉弹窗即取消等待": "시스템 기본 브라우저로 로그인 페이지를 엽니다 (브라우저에 로그인된 Accio 계정을 재사용합니다); 로그인을 완료하면 자동으로 계정 목록에 추가되며, 팝업을 닫으면 대기가 취소됩니다", "小米 MiMo Token Plan 套餐(新加坡站)": "小米 MiMo Token Plan 플랜 (싱가포르 사이트)", "已到账": "적립 완료", "已取消登录等待": "로그인 대기를 취소했습니다", "已取消领取": "수령을 취소했습니다", "已取消验证码": "인증 코드를 취소했습니다", "已填写手机号,正在发送验证码…": "휴대폰 번호 입력 완료, 인증 코드 전송 중…", "已声明无需鉴权:账号会被正常选路,出网时不带任何鉴权头": "인증 필요 없음으로 선언됨: 계정이 정상적으로 라우팅되며, 외부로 나갈 때 인증 헤더를 전혀 보내지 않습니다", "已导入 {ok} 个,失败 {fail} 个(失败项已标注在列表里)": "가져오기 성공 {ok}개, 실패 {fail}개 (실패 항목은 목록에 표시해 두었습니다)", "已建过 · {n} 个账号,点击继续添加": "이미 생성됨 · 계정 {n}개, 클릭하여 추가", "已建过,点击继续添加账号": "이미 생성됨, 클릭하여 계정 추가", "已打开官方登录页,请在窗口中完成登录…": "공식 로그인 페이지를 열었습니다. 창에서 로그인을 완료하세요…", "已点发送,等待短信…": "전송을 눌렀습니다. SMS 대기 중…", "已用系统默认浏览器打开登录页,请在浏览器中完成登录…": "시스템 기본 브라우저로 로그인 페이지를 열었습니다. 브라우저에서 로그인을 완료하세요…", "已领取,等官方确认": "수령 완료, 공식 확인 대기 중", "当前壳版本不支持 AutoClaw 网页登录,请更新应用": "현재 앱 버전에서는 AutoClaw 웹 로그인을 지원하지 않습니다. 앱을 업데이트하세요", "当前没有可领取的套餐(活动尚未开始)": "현재 수령 가능한 플랜이 없습니다 (이벤트가 아직 시작되지 않았습니다)", "当前环境不支持领取(桥接方法缺失)": "현재 환경에서는 수령을 지원하지 않습니다 (브리지 메서드 없음)", "必填,CatPaw 账号标识": "필수, CatPaw 계정 식별자", "恢复 Google / GitHub 入口": "Google / GitHub 항목 복원", "手机号": "휴대폰 번호", "手机验证码登录": "SMS 인증 코드 로그인", "打开 Trae SOLO 的官方授权页(trae.cn)并用你的 Trae 账号登录:授权完成后官方页面会跳回本机的一个临时端口;同机部署自动接收,Docker / 远程面板请按提示复制地址栏回调地址。": "Trae SOLO의 공식 인가 페이지(trae.cn)를 열고 Trae 계정으로 로그인하세요: 인가가 완료되면 공식 페이지가 이 컴퓨터의 임시 포트로 되돌아옵니다; 같은 컴퓨터 배포에서는 자동으로 수신하며, Docker / 원격 패널에서는 안내에 따라 주소 표시줄의 콜백 주소를 복사하세요.", "打开 Accio {label}的官方登录页({site})并用你的 Accio 账号登录:登录成功后官方页面会跳回本机;同机自动完成,Docker / 远程面板按提示粘贴回调地址即可(授权码只在本机传给网关,界面不显示明文 token)。": "Accio {label}의 공식 로그인 페이지({site})를 열고 Accio 계정으로 로그인하세요: 로그인에 성공하면 공식 페이지가 이 컴퓨터로 되돌아옵니다; 같은 컴퓨터에서는 자동으로 완료되며, Docker / 원격 패널에서는 안내에 따라 콜백 주소를 붙여넣으면 됩니다 (인가 코드는 이 컴퓨터에서만 게이트웨이에 전달되며, 화면에 평문 token이 표시되지 않습니다).", "打开 Accio {label}登录页": "Accio {label} 로그인 페이지 열기", "打开 Antigravity 网页登录": "Antigravity 웹 로그인 열기", "打开 CatPaw 网页登录": "CatPaw 웹 로그인 열기", "打开 Cline 授权页": "Cline 인가 페이지 열기", "打开 CodeArts 授权页": "CodeArts 인가 페이지 열기", "打开 Qoder 网页登录": "Qoder 웹 로그인 열기", "打开 Trae 授权页": "Trae 인가 페이지 열기", "打开 ZCode {label}的官方授权页并用你的账号登录。授权结果由 ZCode 服务端记录,网关在后台自动取回凭证并加入账号列表。": "ZCode {label}의 공식 인가 페이지를 열고 계정으로 로그인하세요. 인가 결과는 ZCode 서버에 기록되며, 게이트웨이가 백그라운드에서 자격 증명을 자동으로 가져와 계정 목록에 추가합니다.", "打开 ZCode {label}授权页": "ZCode {label} 인가 페이지 열기", "打开华为云 CodeArts 的官方授权页登录:登录完成后官方页面会把浏览器带回网关自己的 /oauth/callback,网关用一次性授权码换取临时凭据并加入账号列表。
网关跑在另一台机器上时,网页端会提示把地址栏中的最终回调地址直接粘贴回面板。": "Huawei Cloud CodeArts의 공식 인가 페이지를 열어 로그인하세요: 로그인이 완료되면 공식 페이지가 브라우저를 게이트웨이 자체의 /oauth/callback으로 되돌립니다. 게이트웨이는 일회성 인가 코드를 임시 자격 증명으로 교환하고 계정 목록에 추가합니다.
게이트웨이가 다른 컴퓨터에서 실행 중이면 웹 UI에서 주소 표시줄의 최종 콜백 주소를 패널에 그대로 붙여넣으라는 안내가 표시됩니다.", "打开华为云授权页登录:登录完成后网关会自动轮询云端取回授权码并加入账号列表(不需要装 OfficeAce 桌面端,也无需手工回填回调地址)。": "Huawei Cloud 인가 페이지를 열고 로그인하세요: 완료되면 게이트웨이가 클라우드를 폴링해 인가 코드를 가져와 계정 목록에 추가합니다 (OfficeAce 데스크톱 앱이 필요 없고, 콜백 URL을 수동으로 다시 붙여넣을 필요도 없습니다).", "打开官方授权页完成设备码授权,登录的是{label}({site})的账号。": "공식 인가 페이지를 열어 기기 코드 인가를 완료하세요. 로그인되는 계정은 {label} ({site}) 계정입니다.", "打开授权页": "인가 페이지 열기", "打开授权页完成确认,账号自动加入 {label}{note}": "인가 페이지를 열어 확인을 완료하면 계정이 {label}에 자동으로 추가됩니다{note}", "打开方式": "여는 방식", "打开网页登录": "웹 로그인 열기", "探测失败:{message}": "탐지 실패: {message}", "接入一个兼容上游": "호환 업스트림 연결", "提交中…": "제출 중…", "搜索提供商": "제공자 검색", "搜索提供商…": "제공자 검색…", "整份粘贴官方插件 / CLIProxyAPI 落盘的凭据 JSON(形如 {\"codearts_provider_credential\":{…}},铺平的也行)。
必填:access_key_id、secret_access_key、security_token。要能自动续期,必须连 refresh_token 与 oauth_context 一起粘 —— 临时凭据约一小时到期,缺这半块就续不回来,只能重新登录。": "공식 플러그인 / CLIProxyAPI가 디스크에 기록한 자격 증명 JSON을 통째로 붙여넣으세요 (형식: {\"codearts_provider_credential\":{…}}, 평탄화된 형태도 가능).
필수: access_key_id, secret_access_key, security_token.자동 갱신을 원하면 refresh_token과 oauth_context도 함께 붙여넣어야 합니다 — 임시 자격 증명은 약 1시간 후 만료되며, 이 부분이 없으면 갱신할 수 없어 다시 로그인해야 합니다.", "文件是{edition}凭证,已按该版本导入": "파일은 {edition} 자격 증명이며 해당 버전으로 가져왔습니다", "新建自定义提供商": "커스텀 제공자 새로 만들기", "方案:{label}": "방식: {label}", "明文 JWT 或 auth.json 里的 enc: 加密值(自动解密)": "평문 JWT 또는 auth.json의 enc: 암호화 값 (자동 복호화)", "明文 JWT(国际版账号的 access token)": "평문 JWT (국제판 계정의 access token)", "智谱 bigmodel.cn 的 Coding 套餐,Key 在 open.bigmodel.cn/usercenter/apikeys": "Zhipu bigmodel.cn의 Coding 플랜, Key는 open.bigmodel.cn/usercenter/apikeys에서 발급합니다", "未知错误": "알 수 없는 오류", "未能获取授权地址,请重试": "인가 주소를 가져오지 못했습니다. 다시 시도하세요", "未能读取 cc-switch 数据": "cc-switch 데이터를 읽지 못했습니다", "未领取成功": "수령하지 못했습니다", "本地 Ollama、OpenCode Zen 免费档这类上游要勾上,否则账号不可用": "로컬 Ollama, OpenCode Zen 무료 등급 같은 업스트림에는 체크해야 하며, 그렇지 않으면 계정을 사용할 수 없습니다", "本家有两个**互不替代**的凭证,按你要用的功能填,至少填一个:编码套餐 API Key 用于转发推理(打 {site})与查询窗口限额(每 N 小时 / 每周的剩余比例);jwt 用于领取套餐与查询余额(打 zcode.z.ai 的 billing 网关,官方叫 Coding Plan JWT,是一串三段点分的字符串)。余额两把都能查、但读到的东西不同:jwt 读到余额桶与套餐到期,API Key 读到窗口限额;而领取只认 jwt、转发只认 API Key。请填写 {label}账号的凭证 —— {plan}(最容易拿到的办法:直接用上方的「网页登录」—— 它会替你把这个 API Key 换好,两个凭证一起拿到。)": "이 제공자에는 **서로 대체할 수 없는** 자격 증명이 두 개 있습니다. 사용할 기능에 따라 입력하고 최소 하나는 입력하세요: 코딩 플랜 API Key는 추론 포워딩({site} 호출)과 윈도우 할당량 조회(N시간마다 / 주간 잔여 비율)에 사용하고, jwt는 플랜 수령과 잔액 조회에 사용합니다(zcode.z.ai의 billing 게이트웨이 호출, 공식 명칭 Coding Plan JWT, 3단 점 구분 문자열). 잔액은 둘 다 조회할 수 있지만 읽어 오는 내용이 다릅니다: jwt는 잔액 버킷과 플랜 만료를, API Key는 윈도우 할당량을 읽습니다. 수령은 jwt만, 포워딩은 API Key만 인정합니다. {label} 계정의 자격 증명을 입력하세요 — {plan} (가장 쉽게 얻는 방법: 위의 「웹 로그인」을 바로 사용하세요 — 이 API Key를 대신 교환해 두 자격 증명을 함께 받아 줍니다.)", "本机 Ollama 的 OpenAI 兼容端点,无需 API Key(默认已勾上「该上游无需鉴权」,鉴权头一个都不发)": "이 컴퓨터의 Ollama OpenAI 호환 엔드포인트, API Key 불필요 (기본적으로 「이 업스트림은 인증이 필요하지 않음」이 체크되어 있고, 인증 헤더를 전혀 보내지 않습니다)", "本次未确认到账": "이번에는 적립이 확인되지 않았습니다", "条可导入": "건을 가져올 수 있습니다", "条配置,其中": "건의 설정 중", "桌面运行时不可用(Tauri 未初始化)": "데스크톱 런타임을 사용할 수 없습니다 (Tauri 미초기화)", "模型网关基址": "모델 게이트웨이 기본 주소", "正在打开百度登录页…": "Baidu 로그인 페이지를 여는 중…", "正在扫描本机 cc-switch…": "이 컴퓨터의 cc-switch를 스캔하는 중…", "正在换发访客凭证…": "게스트 자격 증명을 발급하는 중…", "正在添加…": "추가하는 중…", "正在等待{name}登录完成;完成或取消后才能发起新的登录": "{name} 로그인 완료를 기다리는 중입니다; 완료하거나 취소한 후에 새로운 로그인을 시작할 수 있습니다", "每周": "매주", "每日": "매일", "每月": "매월", "没有则无法自动续期": "없으면 자동 갱신할 수 없습니다", "没有匹配「{keyword}」的提供商": "「{keyword}」와 일치하는 제공자가 없습니다", "添加 {name} 账号": "{name} 계정 추가", "添加中…": "추가 중…", "添加到 ": "추가 대상: ", "添加失败:{reason}": "추가 실패: {reason}", "添加小浣熊账号": "小浣熊 계정 추가", "添加方式": "추가 방식", "添加访客账号": "게스트 계정 추가", "添加账号": "계정 추가", "火山引擎 Coding 套餐;通用推理接入点为 https://ark.cn-beijing.volces.com/api/v3": "Volcano Engine Coding 플랜; 범용 추론 엔드포인트는 https://ark.cn-beijing.volces.com/api/v3입니다", "点击添加账号": "클릭하여 계정 추가", "点开即预填,填 Key 接入": "열면 값이 미리 채워져 있으며, Key를 입력하면 연결됩니다", "点按钮后先过一次滑块验证(官方风控),随后打开登录页,登录完成即自动添加账号。
这是国际版官方唯一的登录方式;已在客户端登录过的,用「导入桌面端登录态」更快。": "버튼을 누르면 먼저 슬라이더 인증을 한 번 통과하고(공식 리스크 관리), 이어서 로그인 페이지가 열리며 로그인이 완료되면 계정이 자동으로 추가됩니다.
이것이 국제판의 공식 유일한 로그인 방식입니다; 이미 클라이언트에 로그인한 적이 있다면 「데스크톱 로그인 상태 가져오기」가 더 빠릅니다.", "用 AutoClaw 账号绑定的手机号登录:点击「获取验证码」,收到短信后填入下方并登录。验证码由本机直接提交给官方接口,界面不显示 token。": "AutoClaw 계정에 연결된 휴대폰 번호로 로그인합니다: 「코드 받기」를 클릭하고 SMS를 받은 뒤 아래에 입력하여 로그인하세요. 인증 코드는 이 컴퓨터에서 공식 API로 직접 제출되며, 화면에 token이 표시되지 않습니다.", "用 CatPaw 账号完成登录(美团 passport),成功后自动加入账号列表。": "CatPaw 계정으로 로그인합니다 (Meituan passport), 성공하면 자동으로 계정 목록에 추가됩니다.", "用 Loomy 账号绑定的手机号登录:点「获取验证码」后填入即可。这是本家最省事的入口。": "Loomy 계정에 연결된 휴대폰 번호로 로그인합니다: 「코드 받기」를 클릭한 뒤 입력하면 됩니다. 이 제공자에서 가장 간편한 방법입니다.", "用于转发;形如 apiKey.secret 两段点分(不填则这个账号不能转发)": "포워딩에 사용합니다; apiKey.secret 형태의 2단 점 구분 (입력하지 않으면 이 계정은 포워딩할 수 없습니다)", "用于领取套餐与查询余额;不填则这个账号不能领取与查余额": "플랜 수령과 잔액 조회에 사용합니다; 입력하지 않으면 이 계정은 수령과 잔액 조회를 할 수 없습니다", "用户 ID": "사용자 ID", "用绑定的手机号登录:点「获取验证码」后填入即可。这是国内版官方唯一的登录方式。": "연결된 휴대폰 번호로 로그인합니다: 「코드 받기」를 클릭한 뒤 입력하면 됩니다. 이것이 중국판의 공식 유일한 로그인 방식입니다.", "留空则用提供商名称": "비워 두면 제공자 이름 사용", "登录 / 添加 {name} 账号": "로그인 / {name} 계정 추가", "登录 session(一长串)": "로그인 session (긴 문자열)", "登录中…": "로그인 중…", "登录失败:{message}": "로그인 실패: {message}", "登录已结束": "로그인이 종료되었습니다", "登录并添加": "로그인 후 추가", "登录态文件路径:~/.box-agent/config/auth.json(Windows:C:\\Users\\<你的用户名>\\.box-agent\\config\\auth.json)": "로그인 상태 파일 경로: ~/.box-agent/config/auth.json (Windows: C:\\Users\\<사용자 이름>\\.box-agent\\config\\auth.json)", "确定删除自定义提供商「{name}」?将同时删除该提供商下 {count} 个账号,删除后无法恢复。": "커스텀 제공자 「{name}」을(를) 삭제할까요? 이 제공자 아래의 계정 {count}개도 함께 삭제되며, 삭제 후에는 복구할 수 없습니다.", "等待 Accio {label}登录完成…": "Accio {label} 로그인 대기 중…", "等待 CatPaw 登录完成…": "CatPaw 로그인 대기 중…", "等待 Cline 授权确认…": "Cline 인가 확인 대기 중…", "等待 CodeArts 登录完成…": "CodeArts 로그인 대기 중…", "等待 Google 授权完成…": "Google 인가 대기 중…", "等待 KukuAI 登录完成…": "KukuAI 로그인 대기 중…", "等待 OfficeAce 登录完成…": "OfficeAce 로그인 대기 중…", "等待 OrcaTerm 登录完成…": "OrcaTerm 로그인 대기 중…", "等待 Qoder 授权完成…": "Qoder 인가 대기 중…", "等待 Trae 授权完成…": "Trae 인가 대기 중…", "等待 ZCode {label}授权完成…": "ZCode {label} 인가 대기 중…", "等待小浣熊登录完成…": "小浣熊 로그인 대기 중…", "等待登录完成…": "로그인 완료 대기 중…", "等待网页登录…": "웹 로그인 대기 중…", "粘贴 API Key": "API Key 붙여넣기", "粘贴 Accio 的 accessToken": "Accio의 accessToken 붙여넣기", "粘贴 Antigravity 的 Google refresh token(以 1// 开头;直接粘贴含 refresh_token= 的整行也行)。
这是网页登录之外的手工入口(例如从已登录的官方 IDE 里导出)。refresh token 不会过期,access token 到期由网关自动续期;令牌丢了只能重新走 Google 授权,请妥善保存。": "Antigravity의 Google refresh token을 붙여넣으세요 (1//로 시작; refresh_token=이 포함된 줄 전체를 붙여넣어도 됨).
웹 로그인 외의 수동 입구입니다(예: 로그인된 공식 IDE에서 내보내기). refresh token은 만료되지 않으며, access token 만료 시 게이트웨이가 자동으로 갱신합니다; 토큰을 잃어버리면 Google 인가를 다시 받아야 하므로 잘 보관하세요.", "粘贴 Command Code 的 API Key(user_ 开头;从官方 CLI 的 ~/.commandcode/auth.json 或网页 studio 获取)。整行 / 带引号 / 带 Bearer 前缀地粘都行,网关会自己剥成裸 key。key 不过期、也没有续期接口,失效后重新获取即可;添加时网关会做一次轻量探活,失败不影响添加。": "Command Code의 API Key를 붙여넣으세요 (user_로 시작; 공식 CLI의 ~/.commandcode/auth.json 또는 웹 studio에서 획득). 줄 전체 / 따옴표 포함 / Bearer 접두사 포함 그대로 붙여넣어도 됩니다. 게이트웨이가 알아서 순수한 key만 추출합니다. key는 만료되지 않고 갱신 인터페이스도 없으므로, 무효가 되면 다시 받으면 됩니다; 추가 시 게이트웨이가 가벼운 활성 확인을 한 번 수행하며, 실패해도 추가에는 영향을 주지 않습니다.", "粘贴 Cookie": "Cookie 붙여넣기", "粘贴 Google refresh token": "Google refresh token 붙여넣기", "粘贴 OrcaTerm 的 OAuth accessToken(JWT,三段点分;从桌面客户端 data.bin 或 Web 版 Cookie ot_session 获取)。直接粘贴含 Bearer / ot_session= 的整行也行,网关会自己剥成裸 token。添加后由网关自动续期(上游有续期接口),无需跟随 2 小时时效手动更换。": "OrcaTerm의 OAuth accessToken(점 3개로 구분된 JWT. 데스크톱 클라이언트의 data.bin 또는 웹 버전 Cookie ot_session에서 확인)을 붙여넣으세요. Bearer / ot_session=이 포함된 줄을 그대로 붙여넣어도 되며, 게이트웨이가 토큰만 추출합니다. 추가 후에는 게이트웨이가 자동으로 갱신하므로(업스트림에 갱신 API가 있음) 2시간 만료를 직접 따라갈 필요가 없습니다.", "粘贴 Qoder 个人访问令牌(pt-…)": "Qoder 개인 액세스 토큰(pt-…) 붙여넣기", "粘贴 accessToken": "accessToken 붙여넣기", "粘贴 access_token(一长串 JWT)": "access_token 붙여넣기 (긴 JWT)", "粘贴 session cookie": "session cookie 붙여넣기", "粘贴 token / refreshToken": "token / refreshToken 붙여넣기", "粘贴 workos:… 开头的令牌(不带前缀也会自动补上)": "workos:…로 시작하는 토큰 붙여넣기 (접두사가 없어도 자동으로 붙습니다)", "粘贴智谱清言的访问令牌(JWT,三段点分)。获取方式:浏览器打开 chatglm.cn 并登录后,在开发者工具的 Application → Cookies 里复制 chatglm_token 的值(也可以直接粘 chatglm_token=…; 整行)。粘贴后会先向上游校验一次,校验通过才落账号;登录账号的积分、签到能力都能用,之后由网关自动续期(上游有续期接口)。": "智谱清言 액세스 토큰(점 3개로 구분된 JWT)을 붙여넣으세요. 발급 방법: 브라우저에서 chatglm.cn을 열고 로그인한 뒤 개발자 도구의 Application → Cookies에서 chatglm_token 값을 복사합니다(chatglm_token=…; 줄을 그대로 붙여도 됩니다). 붙여넣은 뒤 업스트림에 한 번 검증하며, 통과한 경우에만 계정을 저장합니다. 로그인된 계정은 포인트와 签到 기능을 쓸 수 있고, 이후 게이트웨이가 자동으로 갱신합니다(업스트림에 갱신 인터페이스가 있습니다).", "粘贴登录凭据": "로그인 자격 증명 붙여넣기", "粘贴的是登录 session(同时是模型网关的 token)。Loomy 没有续期接口,session 有效期约 14 天,过期后重新登录即可。": "붙여넣는 것은 로그인 session입니다 (동시에 모델 게이트웨이의 token입니다). Loomy에는 갱신 인터페이스가 없으며 session 유효 기간은 약 14일이므로, 만료되면 다시 로그인하면 됩니다.", "粘贴网关凭据": "게이트웨이 자격 증명 붙여넣기", "粘贴网页登录态 cookie monkeycode_ai_session 的值(在浏览器里复制整段 Cookie 直接粘贴也行,网关会自己剥出值)。
{siteNote}
MonkeyCode 没有续期接口:session 有效期约 30 天(硬限制),过期后重新登录网页、再粘贴一次即可。": "웹 로그인 상태 cookie monkeycode_ai_session의 값을 붙여넣으세요 (브라우저에서 전체 Cookie를 복사해 그대로 붙여넣어도 됩니다. 게이트웨이가 값을 알아서 추출합니다).
{siteNote}
MonkeyCode에는 갱신 인터페이스가 없습니다: session 유효 기간은 약 30일(하드 제한)이며, 만료되면 웹에 다시 로그인해 한 번 더 붙여넣으면 됩니다.", "粘贴访问令牌": "액세스 토큰 붙여넣기", "系统浏览器": "시스템 브라우저", "系统浏览器可复用已有登录态(国际版推荐);内嵌窗口更干净。": "시스템 브라우저는 기존 로그인 상태를 재사용할 수 있습니다 (국제판 권장); 내장 창이 더 깔끔합니다.", "系统浏览器打开(复用已登录的 Cline 账号);完成后自动加入列表": "시스템 브라우저로 엽니다 (로그인된 Cline 계정 재사용); 완료하면 자동으로 목록에 추가됩니다", "系统浏览器打开(复用已登录的 Google 账号);完成后自动加入列表": "시스템 브라우저로 엽니다(로그인된 Google 계정 재사용); 완료하면 자동으로 목록에 추가됩니다", "系统浏览器打开(复用已登录的 Zai / Google 账号);完成后自动加入列表": "시스템 브라우저로 엽니다 (로그인된 Zai / Google 계정 재사용); 완료하면 자동으로 목록에 추가됩니다", "系统浏览器打开(复用已登录的美团账号);完成后自动加入列表": "시스템 브라우저로 엽니다 (로그인된 Meituan 계정 재사용); 완료하면 자동으로 목록에 추가됩니다", "系统浏览器打开(复用已登录账号);完成后自动加入列表": "시스템 브라우저로 엽니다 (로그인된 계정 재사용); 완료하면 자동으로 목록에 추가됩니다", "系统默认浏览器": "시스템 기본 브라우저", "编码套餐 API Key": "코딩 플랜 API Key", "网关 Secret": "게이트웨이 시크릿", "网页登录": "웹 로그인", "网页登录的打开方式": "웹 로그인을 여는 방식", "网页登录(Zai / Google)": "웹 로그인 (Zai / Google)", "自定义": "커스텀", "自建聚合面板:填你自己的站点地址。余额查询用该账号的 API Key 打 {base}/v1/usage,不需要额外配置": "자체 구축 어그리게이션 패널: 자신의 사이트 주소를 입력하세요. 잔액 조회는 이 계정의 API 키로 {base}/v1/usage 를 호출하며 추가 설정이 필요 없습니다", "自建聚合面板:填你自己的站点地址;余额查询要另填 NewAPI 的个人访问令牌(见下方「余额查询」一段)": "자체 구축 어그리게이션 패널: 자신의 사이트 주소를 입력하세요. 잔액 조회에는 별도로 NewAPI 개인 액세스 토큰이 필요합니다 (아래 \"잔액 조회\" 단락 참조)", "获取风控配置失败,将直接尝试领取:{message}": "리스크 관리 구성을 가져오지 못했습니다. 바로 수령을 시도합니다: {message}", "获取验证码": "코드 받기", "访客模式": "게스트 모드", "访客模式(免登录)": "게스트 모드(로그인 불필요)", "该上游无需鉴权(不发送鉴权头)": "이 업스트림은 인증이 필요하지 않음 (인증 헤더를 보내지 않음)", "该提供商": "이 제공자", "该提供商账号添加功能即将上线": "이 제공자의 계정 추가 기능이 곧 출시됩니다", "该自定义提供商已不存在(可能已被删除),请刷新后重试": "이 커스텀 제공자가 더 이상 존재하지 않습니다(삭제되었을 수 있습니다). 새로 고친 후 다시 시도하세요", "请先选择一个自定义提供商": "먼저 커스텀 제공자를 선택하세요", "请在弹出的滑块中完成验证(官方要求的风控步骤)": "표시된 슬라이더에서 인증을 완료하세요 (공식에서 요구하는 리스크 관리 단계)", "请填写 11 位大陆手机号": "11자리 중국 본토 휴대폰 번호를 입력하세요", "请填写 6 位数字验证码": "6자리 숫자 인증 코드를 입력하세요", "请填写 Base URL": "Base URL을 입력하세요", "请填写 {label}": "{label}을(를) 입력하세요", "请填写名称": "이름을 입력하세요", "请完成验证…": "인증을 완료하세요…", "读取 %APPDATA%/AutoClaw/auth.json 并解密,仅 Windows": "%APPDATA%/AutoClaw/auth.json을 읽어 복호화합니다. Windows 전용", "读取 ~/.cline/data/settings/providers.json,需已在 Cline 客户端登录": "~/.cline/data/settings/providers.json을 읽습니다. Cline 클라이언트에 로그인되어 있어야 합니다", "读取 ~/.meituan-catpaw/auth.json,需已在 CatPaw 客户端登录": "~/.meituan-catpaw/auth.json을 읽습니다. CatPaw 클라이언트에 로그인되어 있어야 합니다", "读取本机 KukuAI 客户端登录态(%APPDATA%\\baidugenflowpro\\Network\\Cookies),需已在 KukuAI 客户端登录": "이 컴퓨터의 KukuAI 클라이언트 로그인 상태를 읽습니다 (%APPDATA%\\baidugenflowpro\\Network\\Cookies). KukuAI 클라이언트에 로그인되어 있어야 합니다", "读取本机 OrcaTerm 客户端登录态(%APPDATA%\\com.orcaterm-desktop.app\\data.bin),需已在 OrcaTerm 客户端登录": "로컬 OrcaTerm 클라이언트 로그인 상태(%APPDATA%\\com.orcaterm-desktop.app\\data.bin)를 읽습니다. OrcaTerm 클라이언트에 로그인되어 있어야 합니다", "读取本机智谱清言客户端登录态(%APPDATA%\\chatglm\\Network\\Cookies),需已在客户端登录": "이 PC의 智谱清言 클라이언트 로그인 상태를 읽습니다(%APPDATA%\\chatglm\\Network\\Cookies). 클라이언트에 로그인되어 있어야 합니다", "读本机官方客户端(Tencent WorkBuddy / WorkBuddy AI)当前登录的账号:自动定位其凭证目录里最新的登录态文件(需已在本机官方客户端登录)。导入后由网关自动续期,无需跟随 2 小时时效手动换令牌。": "이 컴퓨터의 공식 클라이언트(Tencent WorkBuddy / WorkBuddy AI)에 현재 로그인된 계정을 읽습니다. 자격 증명 디렉터리에서 최신 로그인 상태 파일을 자동으로 찾습니다(이 컴퓨터의 공식 클라이언트에 로그인되어 있어야 함). 가져온 후에는 게이트웨이가 자동 갱신하므로 2시간 유효 기간에 맞춰 토큰을 수동으로 교체할 필요가 없습니다.", "读本机客户端当前登录态(明文 Cookie,无需解密)。客户端运行时 Cookies 文件被独占占用,导入前请先关闭 KukuAI 客户端。": "이 컴퓨터 클라이언트의 현재 로그인 상태를 읽습니다 (평문 Cookie, 복호화 불필요). 클라이언트 실행 중에는 Cookies 파일이 독점 점유되므로, 가져오기 전에 KukuAI 클라이언트를 먼저 종료하세요.", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。": "이 컴퓨터 클라이언트의 현재 로그인 상태를 매번 실시간으로 읽습니다 (이 기록을 삭제해도 클라이언트 로그인 상태에는 영향을 주지 않습니다).", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。客户端重新登录后点「刷新 Token」同步。": "이 컴퓨터 클라이언트의 현재 로그인 상태를 매번 실시간으로 읽습니다 (이 기록을 삭제해도 클라이언트 로그인 상태에는 영향을 주지 않습니다). 클라이언트에서 다시 로그인한 후 「Token 갱신」을 눌러 동기화하세요.", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。客户端重新登录后重新导入即可。": "이 컴퓨터 클라이언트의 현재 로그인 상태를 매번 실시간으로 읽습니다 (이 기록을 삭제해도 클라이언트 로그인 상태에는 영향을 주지 않습니다). 클라이언트에서 다시 로그인한 후 다시 가져오면 됩니다.", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。用 Zai / Google 登录客户端的用户走这一条。": "이 컴퓨터 클라이언트의 현재 로그인 상태를 매번 실시간으로 읽습니다 (이 기록을 삭제해도 클라이언트 로그인 상태에는 영향을 주지 않습니다). Zai / Google로 클라이언트에 로그인하는 사용자는 이 항목을 사용하세요.", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。这一条归入 {label}。": "이 컴퓨터 클라이언트의 현재 로그인 상태를 매번 실시간으로 읽습니다 (이 기록을 삭제해도 클라이언트 로그인 상태에는 영향을 주지 않습니다). 이 항목은 {label}로 분류됩니다.", "读本机客户端当前登录的 OAuth 令牌(明文 JSON,无需解密)。导入后由网关自动续期,无需跟随客户端的 2 小时时效手动换令牌。": "로컬 클라이언트가 현재 로그인한 OAuth 토큰을 읽습니다(평문 JSON, 복호화 불필요). 가져온 뒤에는 게이트웨이가 자동으로 갱신하므로 클라이언트의 2시간 만료에 맞춰 수동으로 교체할 필요가 없습니다.", "读本机客户端当前的登录态。客户端的 Cookies 是 DPAPI 加密的(Chromium os_crypt),因此仅 Windows 可用;客户端正在运行时可能读不到该文件,先退出客户端再试即可(也可改用「填写凭证」粘贴令牌)。": "이 PC 클라이언트의 현재 로그인 상태를 읽습니다. 클라이언트의 Cookies는 DPAPI로 암호화되어 있어(Chromium os_crypt) Windows에서만 사용할 수 있습니다. 클라이언트가 실행 중이면 이 파일을 읽지 못할 수 있으니 클라이언트를 종료한 뒤 다시 시도하세요(\"자격 증명 입력\"으로 토큰을 붙여넣어도 됩니다).", "账号信息": "계정 정보", "账号信息不完整,请刷新后重试": "계정 정보가 불완전합니다. 새로 고친 후 다시 시도하세요", "账号已添加,但请留意:{warning}": "계정은 추가되었지만 확인해 주세요: {warning}", "账号版本": "계정 버전", "账号类型": "계정 유형", "账号:{name}
": "계정: {name}
", "走 Inference Providers 路由,Key 在 hf.co/settings/tokens 创建": "Inference Providers 라우팅을 사용하며, Key는 hf.co/settings/tokens에서 만듭니다", "还没有账号": "아직 계정이 없습니다", "这一家当前不支持网页登录,请改用填写凭证": "이 제공자는 현재 웹 로그인을 지원하지 않습니다. 대신 자격 증명 입력을 사용하세요", "这个账号当前没有可自动领的活动(只自动领每日登录赠送积分)": "이 계정에는 현재 자동으로 수령할 수 있는 이벤트가 없습니다 (매일 로그인 보너스 포인트만 자동 수령합니다)", "这份额度走「活动套餐」通道:若转发时提示编码套餐已到期,": "이 할당량은 「이벤트 플랜」 채널을 사용합니다: 포워딩 시 코딩 플랜이 만료되었다는 안내가 나오면, ", "这里填国内站(monkeycode-ai.com)的账号:请粘贴国内站的 session。国际站(monkeycode-ai.net)是另一家 provider、另一套账号,两边的凭证不通用。": "여기에는 중국 사이트(monkeycode-ai.com)의 계정을 입력합니다: 중국 사이트의 session을 붙여넣으세요. 국제 사이트(monkeycode-ai.net)는 다른 제공자이며 별도의 계정입니다. 양쪽 자격 증명은 호환되지 않습니다.", "这里填国际站(monkeycode-ai.net)的账号:请粘贴国际站的 session。国内站(monkeycode-ai.com)是另一家 provider、另一套账号,两边的凭证不通用。": "여기에는 국제 사이트(monkeycode-ai.net)의 계정을 입력합니다: 국제 사이트의 session을 붙여넣으세요. 중국 사이트(monkeycode-ai.com)는 다른 제공자이며 별도의 계정입니다. 양쪽 자격 증명은 호환되지 않습니다.", "选择 CatPaw 客户端的登录态文件 auth.json(Windows:C:\\Users\\<你的用户名>\\.meituan-catpaw\\auth.json;macOS / Linux:~/.meituan-catpaw/auth.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端。": "CatPaw 클라이언트의 로그인 상태 파일 auth.json을 선택하세요 (Windows: C:\\Users\\<사용자 이름>\\.meituan-catpaw\\auth.json, macOS / Linux: ~/.meituan-catpaw/auth.json). 가져오기 후에는 자격 증명이 게이트웨이에 저장되어 독립적으로 전달할 수 있습니다 — 더 이상 이 컴퓨터의 클라이언트에 의존하지 않습니다.", "选择 Cline 客户端的登录态文件 providers.json(Windows:C:\\Users\\<你的用户名>\\.cline\\data\\settings\\providers.json;macOS / Linux:~/.cline/data/settings/providers.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端;这一条归入 {label}。": "Cline 클라이언트의 로그인 상태 파일 providers.json을 선택하세요 (Windows: C:\\Users\\<사용자 이름>\\.cline\\data\\settings\\providers.json, macOS / Linux: ~/.cline/data/settings/providers.json). 가져오기 후에는 자격 증명이 게이트웨이에 저장되어 독립적으로 전달할 수 있습니다 — 더 이상 이 컴퓨터의 클라이언트에 의존하지 않습니다. 이 항목은 {label}에 등록됩니다.", "选择 KukuAI 客户端的 Cookies 文件(%APPDATA%\\baidugenflowpro\\Network\\Cookies):它是**二进制** SQLite 数据库(无扩展名,不是 JSON)。导入时读的是你选中文件的副本、不和运行中的客户端抢占用,因此**无需先关闭客户端**。导入后凭证直接落在网关、可独立转发。": "KukuAI 클라이언트의 Cookies 파일을 선택하세요 (%APPDATA%\\baidugenflowpro\\Network\\Cookies): **바이너리** SQLite 데이터베이스입니다 (확장자 없음, JSON 아님). 가져오기는 선택한 파일의 복사본을 읽어 실행 중인 클라이언트와 점유를 다투지 않으므로 **클라이언트를 먼저 종료할 필요가 없습니다**. 가져오기 후에는 자격 증명이 게이트웨이에 저장되어 독립적으로 전달할 수 있습니다.", "选择凭证文件导入": "자격 증명 파일에서 가져오기", "选择官方客户端的登录态凭证文件(workbuddy-desktop.info / workbuddy-desktop-ai.info)或 wb2api 导出的账号 JSON(嵌套 / 扁平形均可)。": "공식 클라이언트의 로그인 자격 증명 파일(workbuddy-desktop.info / workbuddy-desktop-ai.info) 또는 wb2api에서 내보낸 계정 JSON(중첩/평면 형식 모두 가능)을 선택하세요.", "选择小浣熊客户端的登录态文件 auth.json(Windows:C:\\Users\\<你的用户名>\\.box-agent\\config\\auth.json;macOS / Linux:~/.box-agent/config/auth.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端。": "小浣熊 클라이언트의 로그인 상태 파일 auth.json을 선택하세요 (Windows: C:\\Users\\<사용자 이름>\\.box-agent\\config\\auth.json, macOS / Linux: ~/.box-agent/config/auth.json). 가져오기 후에는 자격 증명이 게이트웨이에 저장되어 독립적으로 전달할 수 있습니다 — 더 이상 이 컴퓨터의 클라이언트에 의존하지 않습니다.", "选择提供商": "제공자 선택", "选择的文件不是合法 JSON": "선택한 파일이 유효한 JSON이 아닙니다", "选择要添加账号的提供商": "계정을 추가할 제공자 선택", "重新扫描": "다시 스캔", "鉴权": "인증", "阿里云 Token Plan 套餐(国际站)": "Alibaba Cloud Token Plan (국제 사이트)", "阿里云百炼 Coding 套餐(国内站)": "Alibaba Cloud Model Studio Coding 플랜 (중국 사이트)", "阿里云百炼 Coding 套餐(国际站)": "Alibaba Cloud Model Studio Coding 플랜 (국제 사이트)", "阿里云百炼模型服务(国际站,OpenAI 兼容模式)": "Alibaba Cloud Model Studio 모델 서비스 (국제 사이트, OpenAI 호환 모드)", "需要图形验证码:登录窗口已弹出,请填写后继续": "그래픽 캡차가 필요합니다: 로그인 창이 열렸으니 입력한 후 계속하세요", "预置 API": "프리셋 API", "领取 CodeArts 每日福利": "CodeArts 일일 혜택 수령", "领取失败:{message}": "수령 실패: {message}", "领取并让官方确认": "수령하고 공식 확인 받기", "风控验证配置不完整,请稍后重试": "리스크 관리 인증 구성이 불완전합니다. 잠시 후 다시 시도하세요", "验证码": "인증 코드", "验证码已发送。收到后填入下方并点「登录并添加」": "인증 코드를 전송했습니다. 받은 후 아래에 입력하고 「로그인 후 추가」를 클릭하세요", "验证码已发送,请查看手机短信": "인증 코드를 전송했습니다. 휴대폰 SMS를 확인하세요", "验证码已发送,请查看手机短信。填入下方并点「登录并添加」即完成登录": "인증 코드를 전송했습니다. 휴대폰 SMS를 확인하세요. 아래에 입력하고 「로그인 후 추가」를 클릭하면 로그인이 완료됩니다", "验证码已发送,请查看短信": "인증 코드를 전송했습니다. 문자 메시지를 확인하세요", "验证码校验失败,请重试": "인증 코드 확인에 실패했습니다. 다시 시도하세요", "验证码校验超时,请重试": "인증 코드 확인 시간이 초과되었습니다. 다시 시도하세요", "验证码组件不可用,请重试": "캡차 컴포넌트를 사용할 수 없습니다. 다시 시도하세요", "验证码组件初始化超时,请重试": "캡차 컴포넌트 초기화 시간이 초과되었습니다. 다시 시도하세요", "验证码组件加载失败,请检查网络后重试": "캡차 컴포넌트 로드에 실패했습니다. 네트워크를 확인한 후 다시 시도하세요", "验证码组件加载异常,请重试": "캡차 컴포넌트 로드 중 오류가 발생했습니다. 다시 시도하세요", "验证码组件加载超时,请检查网络后重试": "캡차 컴포넌트 로드 시간이 초과되었습니다. 네트워크를 확인한 후 다시 시도하세요", "验证码组件未加载,请重启应用后重试": "캡차 컴포넌트가 로드되지 않았습니다. 앱을 다시 시작한 후 다시 시도하세요", "(免费额度池,模型名带 cline-free/ 前缀)。": " (무료 할당량 풀, 모델 이름에 cline-free/ 접두사 포함).", "(其中 {n} 把恢复为不限制)": " (이 중 {n}개는 제한 없음으로 복원)", "(必填)": " (필수)", "(有效期 {window})": "(유효 기간 {window})", "(订阅池,模型名带 cline-pass/ 前缀,需要账号有对应订阅)。": " (구독 풀, 모델 이름에 cline-pass/ 접두사 포함, 계정에 해당 구독이 있어야 합니다).", ",下一次最快 {minutes} 分钟后": ", 다음 시도는 최소 {minutes}분 후", ",并从 {n} 把 Key 的可用提供商里移除": ", Key {n}개의 사용 가능한 제공자 목록에서 이 제공자를 제거했습니다" });
+window.wbI18nDict = window.wbI18nDict || {}; Object.assign(window.wbI18nDict, { " · 模型 {head}{rest}": " · 모델 {head}{rest}", " 等 {n} 个": " 등 {n}개", "1// 开头的 Google refresh token(也可直接粘贴 refresh_token=… 整行)": "1//로 시작하는 Google refresh token (refresh_token=… 줄 전체를 붙여넣어도 됨)", "11 位大陆手机号": "11자리 중국 본토 휴대폰 번호", "1~64 个字符,账号列表里按它分组显示": "1~64자, 계정 목록에서 이 값을 기준으로 그룹화되어 표시됩니다", "6 位数字": "6자리 숫자", "
没有可自动领的活动": "자동으로 수령할 수 있는 이벤트가 없습니다", "领到的是套餐赠送积分,不会增加福利模型的 token 池;": "
수령하는 것은 플랜 증정 포인트이며, 혜택 모델의 token 풀은 늘지 않습니다;", "Anthropic 兼容端点在 https://api.deepseek.com/anthropic(协议换 anthropic 时填它)": "Anthropic 호환 엔드포인트는 https://api.deepseek.com/anthropic입니다 (프로토콜을 anthropic으로 바꿀 때 입력합니다)", "Anthropic 协议填根地址,不要带 /v1": "Anthropic 프로토콜은 루트 주소를 입력하고 /v1은 붙이지 마세요", "Antigravity": "Antigravity", "AutoClaw 国内版": "AutoClaw 중국판", "AutoClaw 国际版": "AutoClaw 국제판", "BDUSS 必填;请粘贴**完整 Cookie**(Cookie 编辑器一键导出即可)—— 其中 **PTOKEN 必须保留**,网关要用它向百度换发 KukuAI 业务会话令牌,缺了它模型刷新会报「未登录」。支持整段 Cookie 头、Cookie 编辑器导出的 JSON 数组,或 {BDUSS, STOKEN} 对象。KukuAI 没有刷新机制,登录态过期后重新粘贴即可。": "BDUSS는 필수입니다; **전체 Cookie**를 붙여넣으세요 (Cookie 편집기에서 원클릭 내보내기 가능) — 이 중 **PTOKEN은 반드시 남겨 두세요**. 게이트웨이가 이것을 사용해 Baidu에서 KukuAI 비즈니스 세션 토큰을 교환 발급받으며, 없으면 모델 갱신 시 「미로그인」 오류가 발생합니다. 전체 Cookie 헤더, Cookie 편집기에서 내보낸 JSON 배열, 또는 {BDUSS, STOKEN} 객체를 지원합니다. KukuAI에는 갱신 메커니즘이 없으므로 로그인 상태가 만료되면 다시 붙여넣으면 됩니다.", "BDUSS=…; STOKEN=…(或 Cookie 编辑器导出的 JSON)": "BDUSS=…; STOKEN=… (또는 Cookie 편집기에서 내보낸 JSON)", "CatPaw 的 X-Passport-Token(登录态 Cookie)": "CatPaw의 X-Passport-Token (로그인 상태 Cookie)", "Cline Pass 的 API Key 在 app.cline.bot 获取(订阅制);端点为 OpenAI 兼容,模型清单以 Cline 控制台为准,模型名在模型管理里按裸名添加(如 glm-5.2 / kimi-k2.7-code / deepseek-v4-pro);上游按客户端形态校验,所需的客户端请求头已随卡预置": "Cline Pass의 API Key는 app.cline.bot에서 발급받습니다(구독제). 엔드포인트는 OpenAI 호환이며, 모델 목록은 Cline 콘솔을 기준으로 하고, 모델 이름은 모델 관리에서 접두사 없는 이름 그대로 추가합니다(예: glm-5.2 / kimi-k2.7-code / deepseek-v4-pro). 업스트림이 클라이언트 형태를 검증하므로 필요한 클라이언트 요청 헤더는 이 카드에 미리 설정되어 있습니다", "Cloud-IDE-JWT(三段点分)": "Cloud-IDE-JWT (3단 점 구분)", "Command Code": "Command Code", "JWT(三段点分;也可直接粘贴 Bearer 整行或 data.bin 内容)": "JWT(점 3개 구분. Bearer 전체 줄 또는 data.bin 내용을 붙여넣어도 됨)", "JWT(三段点分;也可直接粘贴 chatglm_token=… 整行)": "JWT(점 3개로 구분된 형식. chatglm_token=… 줄을 그대로 붙여도 됩니다)", "MonkeyCode": "MonkeyCode", "MonkeyCode 国际版": "MonkeyCode 국제판", "NVIDIA NIM 托管端点,Key 在 integrate.api.nvidia.com 申请": "NVIDIA NIM 관리형 엔드포인트, Key는 integrate.api.nvidia.com에서 신청합니다", "OfficeAce 果办": "OfficeAce", "accessToken 是 Accio 的登录凭证(一长串不透明 token,不是 JWT);refreshToken 可选,填了之后到期能自动续期。请填写 {label}账号的凭证 —— {siteNote}(最容易拿到的办法:直接用上方的「网页登录」,不需要手工找 token。)": "accessToken은 Accio의 로그인 자격 증명입니다 (길고 불투명한 token 문자열이며 JWT가 아닙니다); refreshToken은 선택이며, 입력하면 만료 시 자동 갱신됩니다. {label} 계정의 자격 증명을 입력하세요 — {siteNote} (가장 쉽게 얻는 방법: 위의 「웹 로그인」을 바로 사용하세요. token을 직접 찾을 필요가 없습니다.)", "accessToken 是 Trae 的 Cloud-IDE-JWT(三段点分),refreshToken 用于到期自动续期(本家 refreshToken 一次一换:换发一次旧的即作废,所以两份程序别同时刷同一个账号)。
手工粘贴时请连 machineId / deviceId 一起填:上游把它们与登录时上传的设备公钥绑在一起判设备,凭空换一对会撞 2xxxx 那族设备绑定拒绝。
没有这三样时的正路是用上方的「网页登录」;容器 / 远程部署形态按提示粘贴地址栏回调地址即可。": "accessToken은 Trae의 Cloud-IDE-JWT이며(3단 점 구분), refreshToken은 만료 시 자동 갱신에 사용됩니다 (이 제공자는 refreshToken이 교환할 때마다 바뀝니다: 한 번 교환하면 이전 것은 무효가 되므로 두 프로그램에서 같은 계정을 동시에 갱신하지 마세요).
수동으로 붙여넣을 때는 machineId / deviceId도 함께 입력하세요: 업스트림은 이를 로그인 시 업로드한 기기 공개 키와 묶어 기기를 판별하므로, 갑자기 새로운 값을 넣으면 2xxxx 계열 기기 바인딩 거부가 발생합니다.
이 세 가지가 없을 때의 올바른 방법은 위의 「웹 로그인」이며, 컨테이너 / 원격 배포 환경에서는 안내에 따라 주소 표시줄의 콜백 주소를 붙여넣으면 됩니다.", "monkeycode_ai_session 的值(也可直接粘贴整段 Cookie)": "monkeycode_ai_session의 값 (전체 Cookie를 붙여넣어도 됨)", "ms- 开头的 API 令牌": "ms- 로 시작하는 API 토큰", "refreshToken 可选,填了到期可自动续期;两者都能从小浣熊客户端登录态文件里取到。": "refreshToken은 선택이며, 입력하면 만료 시 자동 갱신됩니다; 둘 다 小浣熊 클라이언트 로그인 상태 파일에서 얻을 수 있습니다.", "refreshToken 可选,填了可自动续期;两者都能从客户端登录态文件取到。同一个 Cline 账号两个池都能用,这里归入 {label}。": "refreshToken은 선택이며, 입력하면 자동 갱신됩니다; 둘 다 클라이언트 로그인 상태 파일에서 얻을 수 있습니다. 같은 Cline 계정은 두 풀 모두에서 사용할 수 있으며, 여기서는 {label}로 분류됩니다.", "token 支持 enc: 前缀(Windows 上自动解密)。未填 refreshToken 无法自动续期。": "token은 enc: 접두사를 지원합니다 (Windows에서는 자동 복호화). refreshToken을 입력하지 않으면 자동 갱신할 수 없습니다.", "token 是登录态 Cookie;CatPaw 没有刷新机制,过期后需在客户端重新登录。": "token은 로그인 상태 Cookie입니다; CatPaw에는 갱신 메커니즘이 없어 만료 후 클라이언트에서 다시 로그인해야 합니다.", "user_ 开头的 API Key(也可直接粘贴 Authorization: Bearer … 整行)": "user_로 시작하는 API Key (Authorization: Bearer … 줄 전체를 붙여넣어도 됨)", "{label} 网页登录的打开方式": "{label} 웹 로그인을 여는 방식", "{label} 账号地区": "{label} 계정 지역", "{label} 账号的添加方式": "{label} 계정 추가 방식", "{name} 不是合法 JSON:{reason}": "{name}은(는) 올바른 JSON이 아닙니다: {reason}", "{name}要粘一个 JSON 对象(形如 {sample})": "{name}에는 JSON 객체를 붙여넣어야 합니다 (예: {sample})", "{n} 个账号": "계정 {n}개", "{n} 个账号,点击添加": "계정 {n}개, 클릭하여 추가", "{seconds}s 后重发": "{seconds}초 후 재발송", "✅ {label}账号已添加": "✅ {label} 계정을 추가했습니다", "✅ {label}账号已添加{name}": "✅ {label} 계정을 추가했습니다{name}", "✅ 已从 cc-switch 导入 {n} 个供应商": "✅ cc-switch에서 제공자 {n}개를 가져왔습니다", "✅ 已创建自定义提供商「{name}」并添加账号": "✅ 커스텀 제공자 「{name}」을(를) 만들고 계정을 추가했습니다", "✅ 已删除自定义提供商「{name}」{accounts}{keys}": "✅ 커스텀 제공자 「{name}」을(를) 삭제했습니다{accounts}{keys}", "✅ 已更新已有账号{name}(同一把 API Key 只保留一条,重复添加会合并)": "✅ 기존 계정{name}을(를) 업데이트했습니다(동일한 API Key는 하나만 유지되며 다시 추가하면 병합됩니다)", "✅ 登录成功,{edition}账号已加入列表": "✅ 로그인 성공, {edition} 계정을 목록에 추가했습니다", "✅ 领取成功:{planId}{period}": "✅ 수령 성공: {planId}{period}", " 同一家可以放多把 key,按优先级轮换。": " 같은 제공자에 key를 여러 개 둘 수 있으며, 우선순위에 따라 로테이션됩니다.", "「{name}」的账号添加功能还在开发中,敬请期待。": "「{name}」의 계정 추가 기능은 아직 개발 중입니다. 기대해 주세요.", "一个 Key 用遍多家模型,模型名用「厂商/模型」全称(如 deepseek/deepseek-chat)": "하나의 Key로 여러 제공자의 모델을 사용할 수 있으며, 모델 이름은 「벤더/모델」 전체 이름을 씁니다 (예: deepseek/deepseek-chat)", "上游不要鉴权时留空,并勾选下面一项(留空又不勾会被当成未配置凭证)": "업스트림이 인증을 요구하지 않으면 비워 두고 아래 항목을 체크하세요 (비워 두고 체크하지 않으면 자격 증명 미설정으로 간주됩니다)", "上游信息": "업스트림 정보", "不可领({status})": "수령 불가 ({status})", "不支持导入": "가져오기 미지원", "不是有效的凭证文件:内容要是一个 JSON 对象": "유효한 자격 증명 파일이 아닙니다. 내용은 JSON 객체여야 합니다", "不是有效的凭证文件:需要包含 accessToken 与 uid": "유효한 자격 증명 파일이 아닙니다. accessToken과 uid가 필요합니다", "不是自定义提供商": "커스텀 제공자가 아닙니다", "不需要 Key:转发与拉取模型都不发送鉴权头": "Key 불필요: 포워딩과 모델 조회 모두 인증 헤더를 보내지 않습니다", "不需要登录:点下面的按钮,网关会直接在智谱清言换发一份访客凭证并加入账号列表(也可以先填个备注名)。访客凭证可以直接用来对话,免费额度由上游按设备发放。
注意:访客账号没有积分体系 —— 它与「会员积分」「每日登录积分」「活动领取」相关的接口一律需要登录,因此那些能力对访客会如实跳过(账号页的积分、签到中心都不显示读数)。想要积分就用「填写凭证」粘一个已登录账号的令牌,或「导入桌面端登录态」。": "로그인이 필요 없습니다. 아래 버튼을 누르면 게이트웨이가 智谱清言에서 게스트 자격 증명을 직접 발급받아 계정 목록에 추가합니다(먼저 메모 이름을 입력해도 됩니다). 게스트 자격 증명은 바로 대화에 쓸 수 있고, 무료 할당량은 업스트림이 기기 단위로 발급합니다.
주의: 게스트 계정에는 포인트 체계가 없습니다. 회원 포인트, 매일 로그인 포인트, 활동 수령 관련 인터페이스는 모두 로그인이 필요하므로 이러한 기능은 게스트에서 건너뜁니다(계정 페이지의 포인트와 签到 센터에 수치가 표시되지 않습니다). 포인트가 필요하면 \"자격 증명 입력\"으로 로그인된 계정 토큰을 붙여넣거나 \"데스크톱 로그인 상태 가져오기\"를 사용하세요.", "两版账号可同时保存,各自一份模型清单(国内版与国际版是两家提供商,可分别启用与映射)。": "두 판의 계정을 동시에 저장할 수 있으며 각각 별도의 모델 목록을 가집니다 (중국판과 국제판은 서로 다른 두 제공자로, 각각 활성화하고 매핑할 수 있습니다).", "中国版": "중국판", "今天没有需要领的活动(都已到账)": "오늘 수령할 이벤트가 없습니다 (모두 적립됨)", "今天(北京时间 {day})已试 {attempts} 次,还能试 {left} 次{next}
": "오늘(베이징 시간 {day}) {attempts}회 시도했고, {left}회 더 시도할 수 있습니다{next}
", "从别的机器(或 OfficeAce 桌面端 models.json)取三项贴进来:模型网关基址(baseUrl,形如 https://modelgw-…/v2)与 modelAppKey / modelAppSecret。这三项就能转发(网关凭据不过期);控制面临时凭据(accessKeyId 等)可选,留空则额度/自动续期不可用,但不影响转发。": "다른 컴퓨터(또는 OfficeAce 데스크톱 앱의 models.json)에서 다음 세 항목을 가져와 붙여넣으세요: 모델 게이트웨이 기본 주소(baseUrl, https://modelgw-…/v2 형태)와 modelAppKey / modelAppSecret. 이 세 항목만 있으면 전달할 수 있습니다(게이트웨이 자격 증명은 만료되지 않음). 제어 영역 임시 자격 증명(accessKeyId 등)은 선택이며, 비워 두면 잔액 조회와 자동 갱신을 쓸 수 없지만 전달에는 영향이 없습니다.", "从本机导入桌面端登录态": "이 컴퓨터에서 데스크톱 로그인 상태 가져오기", "任务镜像 id": "작업 이미지 id", "余额查询": "잔액 조회", "使用 Google 账号登录": "Google 계정으로 로그인", "使用 Zai 账号登录": "Zai 계정으로 로그인", "使用个人访问令牌(PAT)": "개인 액세스 토큰(PAT) 사용", "免费模型不用填 Key(默认勾上「该上游无需鉴权」,网关自动用匿名凭证);付费模型则填 Zen 的 API Key。免费档上游只认官方客户端形态,已默认开启「伪装 OpenCode 官方客户端」": "무료 모델은 Key를 입력하지 않아도 됩니다 (기본적으로 「이 업스트림은 인증이 필요하지 않음」이 체크되어 있고, 게이트웨이가 자동으로 익명 자격 증명을 사용합니다); 유료 모델은 Zen의 API Key를 입력하세요. 무료 등급 업스트림은 공식 클라이언트 형태만 허용하므로 「OpenCode 공식 클라이언트로 위장」이 기본으로 켜져 있습니다", "内嵌窗口": "내장 창", "内嵌窗口打开;关窗即取消等待(Google 账号被拒时改用系统浏览器)": "내장 창으로 엽니다; 창을 닫으면 대기가 취소됩니다 (Google 계정이 거부되면 시스템 브라우저를 사용하세요)", "内嵌窗口打开;完成后自动加入列表,关窗即取消等待": "내장 창으로 엽니다; 완료하면 자동으로 목록에 추가되고, 창을 닫으면 대기가 취소됩니다", "内嵌窗口打开;扫码完成后自动加入列表,关窗即取消等待": "내장 창으로 열립니다. 스캔이 끝나면 자동으로 목록에 추가되며, 창을 닫으면 대기가 취소됩니다", "内嵌窗口用全新环境,多账号互不影响;关窗即取消等待": "내장 창은 새 환경을 사용하므로 여러 계정이 서로 영향을 주지 않습니다; 창을 닫으면 대기가 취소됩니다", "内嵌窗口(推荐)": "내장 창(권장)", "准备验证…": "인증 준비 중…", "凭据 JSON": "자격 증명 JSON", "凭证文件在哪?": "자격 증명 파일 위치는?", "创建并添加账号": "생성하고 계정 추가", "创建这个提供商,并同时建立它的第一个账号。": "이 제공자를 만들고 동시에 첫 계정을 생성합니다.", "删除功能不可用(脚本未就绪)": "삭제 기능을 사용할 수 없습니다 (스크립트가 준비되지 않음)", "删除失败:{reason}": "삭제 실패: {reason}", "删除此提供商": "이 제공자 삭제", "及 {n} 个账号": " 및 계정 {n}개", "发送中…": "전송 중…", "发送失败:{message}": "전송 실패: {message}", "发送未确认:登录窗口已弹出,请在弹出的窗口中手动完成登录": "전송 미확인: 로그인 창이 열렸습니다. 열린 창에서 직접 로그인을 완료하세요", "取消失败:{message}": "취소 실패: {message}", "取消等待": "대기 취소", "只有「内嵌窗口」能恢复第三方入口:系统浏览器里我们无法改动登录页": "「내장 창」에서만 제3자 로그인 항목을 복원할 수 있습니다: 시스템 브라우저에서는 로그인 페이지를 수정할 수 없습니다", "可选": "선택", "可选(cloudaicompanionProject):留空由网关自动发现": "선택 (cloudaicompanionProject): 비워 두면 게이트웨이가 자동으로 찾습니다", "可选,展示用": "선택, 표시용", "可选,没有则无法自动续期": "선택, 없으면 자동 갱신 불가", "可选,留空使用凭据里的 user_name": "선택, 비워 두면 자격 증명의 user_name 사용", "可选,留空使用账号姓名、邮箱或令牌指纹": "선택, 비워 두면 계정 이름, 이메일 또는 토큰 지문 사용", "可选,留空使用账号昵称或邮箱": "선택, 비워 두면 계정 닉네임 또는 이메일 사용", "可选,留空则用 key 尾号": "선택, 비워 두면 key 끝자리 사용", "可选,留空则用 userId": "선택, 비워 두면 userId 사용", "可选,留空则用上游账号昵称": "선택 사항. 비워 두면 업스트림 계정 닉네임을 사용합니다", "可选,留空则用上游返回的账号名或账号 id": "선택, 비워 두면 업스트림이 반환한 계정 이름 또는 계정 id 사용", "可选,留空则用凭证里的账号名": "선택, 비워 두면 자격 증명의 계정 이름 사용", "可选,留空则用文件里的昵称": "선택 사항, 비워 두면 파일의 닉네임 사용", "可选,留空则用登录名或 uid": "선택, 비워 두면 로그인 이름 또는 uid 사용", "可选,留空则用脱敏手机号": "선택, 비워 두면 마스킹된 휴대폰 번호 사용", "可选,留空则用脱敏手机号或 userId": "선택, 비워 두면 마스킹된 휴대폰 번호 또는 userId 사용", "可选,留空则用账号 uk": "선택, 비워 두면 계정 uk 사용", "可选,留空则用账号昵称": "선택 사항. 비워 두면 계정 닉네임을 사용합니다", "可选,留空则用账号昵称或 userId": "선택 사항. 비워 두면 계정 닉네임 또는 userId 사용", "可选,留空则用邮箱或令牌尾号": "선택, 비워 두면 이메일 또는 토큰 끝자리 사용", "可选,留空用「OfficeAce 果办」": "선택, 비워 두면 「OfficeAce」 사용", "可选,留空自动生成": "선택, 비워 두면 자동 생성", "可选,留空自动用昵称": "선택, 비워 두면 닉네임 자동 사용", "可选,给这个访客账号起个备注名": "선택 사항. 이 게스트 계정의 메모 이름", "可选,续期时带上": "선택, 갱신 시 함께 전송", "可选,讯飞侧 userid": "선택, iFlytek 측 userid", "可选:发起对话必需,留空则由网关从该账号已有任务里自动发现,发现不到时之后手动补": "선택; 대화 시작에 필요합니다. 비워 두면 게이트웨이가 이 계정의 기존 작업에서 자동으로 찾습니다. 찾지 못하면 나중에 직접 입력하면 됩니다.", "可选:账号邮箱,用于展示与身份识别(换新令牌也能认回同一账号)": "선택; 계정 이메일로, 표시와 신원 식별에 사용됩니다 (새 토큰으로 바꿔도 같은 계정으로 인식됩니다)", "可选;UUID 形态,与凭据同生共死": "선택; UUID 형식이며 자격 증명과 함께 생성되고 함께 사라집니다", "可选;填了才能到期自动续期": "선택; 입력해야 만료 시 자동 갱신할 수 있습니다", "可选;用于去重与展示名(留空时网关会问一次上游)": "선택; 중복 제거와 표시 이름에 사용됩니다 (비워 두면 게이트웨이가 업스트림에 한 번 물어봅니다)", "可选;用于生成账号 id 与展示名": "선택; 계정 id와 표시 이름 생성에 사용됩니다", "可选;纯数字串(上游只收 8–24 位数字)": "선택; 숫자만 입력 (업스트림은 8–24자리 숫자만 허용)", "可领取": "수령 가능", "同一家可以混着放:有 Key 的账号与无鉴权账号各按各的规则走;无需鉴权的账号也能并存多条(各自可配不同的出网代理)": "한 제공사에 API Key 있는 계정과 인증 불필요 계정을 섞어 둘 수 있으며 각각의 규칙으로 라우팅됩니다. 인증 불필요 계정도 여러 개 둘 수 있고 각각 다른 아웃바운드 프록시를 설정할 수 있습니다", "同地址换 anthropic 协议即走它的 Claude 兼容端点。转发必须填 OpenCode Go 的 API Key(订阅制;获取模型清单不需要 Key,但发请求上游会回 401「Missing API key」)": "같은 주소에서 anthropic 프로토콜로 바꾸면 해당 Claude 호환 엔드포인트를 사용합니다. 포워딩에는 OpenCode Go의 API Key가 반드시 필요합니다 (구독제; 모델 목록 조회에는 Key가 필요 없지만, 요청을 보내면 업스트림이 401 「Missing API key」를 반환합니다)", "响应为空": "응답이 비어 있습니다", "商汤日日新的 OpenAI 兼容端点;余额查询走控制台账号密码(见下方「余额查询」一段)": "SenseNova 의 OpenAI 호환 엔드포인트. 잔액 조회는 콘솔 계정 / 비밀번호를 사용합니다 (아래 \"잔액 조회\" 단락 참조)", "国内版": "중국판", "国内版与**国际版是两套独立的账号与套餐**,凭证与领取的套餐都不通用。": "중국판과 **국제판은 서로 독립된 두 세트의 계정과 플랜**입니다. 자격 증명과 수령한 플랜은 서로 호환되지 않습니다.", "国内版登录页没有 Google / GitHub 入口(它用微信 / 手机号 / 邮箱登录)": "중국판 로그인 페이지에는 Google / GitHub 항목이 없습니다 (WeChat / 휴대폰 번호 / 이메일로 로그인합니다)", "国内版的登录站点是 www.accio-ai.com,与国际版不是同一站。": "중국판의 로그인 사이트는 www.accio-ai.com이며, 국제판과 같은 사이트가 아닙니다.", "国内版(WorkBuddy)": "중국판 (WorkBuddy)", "国内站为 https://api.siliconflow.cn/v1": "중국 사이트는 https://api.siliconflow.cn/v1입니다", "国内站(minimaxi.com);OpenAI 兼容地址为 https://api.minimaxi.com/v1": "중국 사이트 (minimaxi.com); OpenAI 호환 주소는 https://api.minimaxi.com/v1입니다", "国际版": "국제판", "国际版 z.ai 的 Coding 套餐;OpenAI 兼容地址为 https://api.z.ai/api/coding/paas/v4": "국제판 z.ai의 Coding 플랜; OpenAI 호환 주소는 https://api.z.ai/api/coding/paas/v4입니다", "国际版与国内版是**两套独立的账号**(同一账号体系的两个站点),凭证不通用。": "국제판과 중국판은 **서로 독립된 두 세트의 계정**입니다 (같은 계정 체계의 두 사이트). 자격 증명은 호환되지 않습니다.", "国际版与国内版账号体系独立,请填国际版的凭证。未填 refreshToken 无法自动续期。": "국제판과 중국판은 계정 체계가 독립적입니다. 국제판의 자격 증명을 입력하세요. refreshToken을 입력하지 않으면 자동 갱신할 수 없습니다.", "国际版登录页默认只显示邮箱登录,勾选后恢复 Google / GitHub / X 入口": "국제판 로그인 페이지는 기본적으로 이메일 로그인만 표시하며, 체크하면 Google / GitHub / X 항목이 복원됩니다", "国际版的推理站点是 api.z.ai,与国内版不是同一站;套餐也各自独立。": "국제판의 추론 사이트는 api.z.ai이며 중국판과 다른 사이트입니다; 플랜도 각각 독립적입니다.", "国际版(WorkBuddy AI)": "국제판 (WorkBuddy AI)", "国际站 Coding 套餐;OpenAI 兼容地址为 https://api.minimax.io/v1": "국제 사이트 Coding 플랜; OpenAI 호환 주소는 https://api.minimax.io/v1입니다", "在 cc-switch 里找到": "cc-switch에서 찾은", "在内嵌窗口里完成官方登录,成功后自动加入账号列表。": "내장 창에서 공식 로그인을 완료하면 성공 시 자동으로 계정 목록에 추가됩니다.", "在{label}的 Qoder 账号设置 → Integrations 生成 PAT(别填 Google / GitHub 的令牌)。两个地区的账号与凭证不通用。": "{label}의 Qoder 계정 설정 → Integrations에서 PAT를 생성하세요 (Google / GitHub 토큰을 입력하지 마세요). 두 지역의 계정과 자격 증명은 호환되지 않습니다.", "在打开的官方授权页里用微信扫码登录(页面会直接显示二维码)。扫码成功后自动加入账号列表。": "열린 공식 인증 페이지에서 위챗 QR 코드를 스캔하여 로그인하세요(페이지에 QR 코드가 바로 표시됩니다). 스캔에 성공하면 계정이 자동으로 목록에 추가됩니다.", "在打开的窗口里用百度账号登录 KukuAI 主站(手机验证码 / 扫码均可),登录成功后自动加入账号列表。网关会向百度换发 KukuAI 业务会话令牌(依赖本机已安装库库AI 客户端)。": "열린 창에서 Baidu 계정으로 KukuAI 메인 사이트에 로그인하세요 (SMS 인증 코드 / QR 스캔 모두 가능). 로그인에 성공하면 자동으로 계정 목록에 추가됩니다. 게이트웨이는 Baidu에서 KukuAI 비즈니스 세션 토큰을 교환 발급받습니다 (이 컴퓨터에 KukuAI 클라이언트가 설치되어 있어야 합니다).", "在打开的窗口里登录 Google 账号(Antigravity 的授权页),授权完成后自动加入账号列表。": "열린 창에서 Google 계정으로 로그인하세요(Antigravity의 인가 페이지). 인가가 완료되면 자동으로 계정 목록에 추가됩니다.", "在浏览器中打开登录页": "브라우저에서 로그인 페이지 열기", "地区": "지역", "填写凭证": "자격 증명 입력", "填写凭证添加": "자격 증명 입력 후 추가", "备注名": "라벨명", "套餐": "플랜", "如:智谱 GLM": "예: Zhipu GLM", "完成登录后自动加入账号列表,昵称取自上游。": "로그인을 완료하면 자동으로 계정 목록에 추가되며, 닉네임은 업스트림에서 가져옵니다.", "官方客户端凭证目录:Windows 是 C:\\Users\\<你的用户名>\\AppData\\Local\\CodeBuddyExtension\\Data\\Public\\auth,macOS 是 ~/Library/Application Support/CodeBuddyExtension/Data/Public/auth": "공식 클라이언트 자격 증명 디렉터리: Windows는 C:\\Users\\<사용자명>\\AppData\\Local\\CodeBuddyExtension\\Data\\Public\\auth, macOS는 ~/Library/Application Support/CodeBuddyExtension/Data/Public/auth", "官方已确认到账": "공식 적립 확인 완료", "导入": "가져오기", "导入中…": "가져오는 중…", "导入凭证文件": "자격 증명 파일 가져오기", "导入失败": "가져오기 실패", "导入失败:{reason}": "가져오기 실패: {reason}", "导入所选": "선택 항목 가져오기", "导入所选({n})": "선택 항목 가져오기({n})", "导入桌面端登录态": "데스크톱 로그인 상태 가져오기", "将打开内嵌窗口;授权完成后自动加入账号列表。关掉窗口即取消等待。授权页最后可能提示无法打开 zcode:// 链接,这是正常的 —— 结果已由服务端记下": "내장 창이 열립니다; 인가가 완료되면 자동으로 계정 목록에 추가됩니다. 창을 닫으면 대기가 취소됩니다. 인가 페이지 마지막에 zcode:// 링크를 열 수 없다는 안내가 나올 수 있는데, 정상입니다 — 결과는 이미 서버 측에 기록되었습니다", "将打开内嵌窗口;授权完成后自动加入账号列表。远程面板可粘贴回调地址。关掉窗口即取消等待。链接 5 分钟内有效,超时或未点就会作废(可重新发起)": "내장 창이 열립니다; 인가가 완료되면 자동으로 계정 목록에 추가됩니다. 원격 패널에서는 콜백 주소를 붙여넣을 수 있습니다. 창을 닫으면 대기가 취소됩니다. 링크는 5분간 유효하며, 시간이 초과되거나 클릭하지 않으면 무효가 됩니다 (다시 시작할 수 있습니다)", "将打开内嵌窗口;登录完成后自动加入账号列表。关掉窗口即取消等待": "내장 창이 열립니다; 로그인이 완료되면 자동으로 계정 목록에 추가됩니다. 창을 닫으면 대기가 취소됩니다", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的 Trae 账号);同机完成后自动加入,Docker / 远程面板按提示粘贴地址栏回调地址。": "시스템 기본 브라우저로 인가 페이지를 엽니다 (브라우저에 로그인된 Trae 계정을 재사용합니다); 같은 컴퓨터에서는 완료 시 자동으로 추가되며, Docker / 원격 패널에서는 안내에 따라 주소 표시줄의 콜백 주소를 붙여넣으세요.", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的 ZCode 账号);授权完成后自动加入账号列表。页面最后可能提示无法打开 zcode:// 链接,属正常现象": "시스템 기본 브라우저로 인가 페이지를 엽니다 (브라우저에 로그인된 ZCode 계정을 재사용합니다); 인가가 완료되면 자동으로 계정 목록에 추가됩니다. 페이지 마지막에 zcode:// 링크를 열 수 없다는 안내가 나올 수 있는데 정상입니다", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的华为云账号);授权码由网关轮询云端取回,与浏览器跑在哪台机器无关,完成后自动加入账号列表": "시스템 기본 브라우저로 인가 페이지를 엽니다 (브라우저에 로그인된 Huawei Cloud 계정을 재사용합니다); 인가 코드는 게이트웨이가 클라우드를 폴링해 가져오므로 브라우저가 어느 컴퓨터에서 실행되는지는 상관없습니다. 완료하면 자동으로 계정 목록에 추가됩니다", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的华为云账号);浏览器与网关不在同一台机器时,按上方说明把最终回调地址粘贴回面板": "시스템 기본 브라우저로 인가 페이지를 엽니다 (브라우저에 로그인된 Huawei Cloud 계정을 재사용합니다); 브라우저와 게이트웨이가 같은 컴퓨터에 있지 않다면 위 설명대로 최종 콜백 주소를 패널에 다시 붙여넣으세요", "将用系统默认浏览器打开登录页(会复用浏览器里已登录的 Accio 账号);完成登录后自动加入账号列表,关掉弹窗即取消等待": "시스템 기본 브라우저로 로그인 페이지를 엽니다 (브라우저에 로그인된 Accio 계정을 재사용합니다); 로그인을 완료하면 자동으로 계정 목록에 추가되며, 팝업을 닫으면 대기가 취소됩니다", "小米 MiMo Token Plan 套餐(新加坡站)": "小米 MiMo Token Plan 플랜 (싱가포르 사이트)", "已到账": "적립 완료", "已取消登录等待": "로그인 대기를 취소했습니다", "已取消领取": "수령을 취소했습니다", "已取消验证码": "인증 코드를 취소했습니다", "已填写手机号,正在发送验证码…": "휴대폰 번호 입력 완료, 인증 코드 전송 중…", "已声明无需鉴权:账号会被正常选路,出网时不带任何鉴权头": "인증 필요 없음으로 선언됨: 계정이 정상적으로 라우팅되며, 외부로 나갈 때 인증 헤더를 전혀 보내지 않습니다", "已导入 {ok} 个,失败 {fail} 个(失败项已标注在列表里)": "가져오기 성공 {ok}개, 실패 {fail}개 (실패 항목은 목록에 표시해 두었습니다)", "已建过 · {n} 个账号,点击继续添加": "이미 생성됨 · 계정 {n}개, 클릭하여 추가", "已建过,点击继续添加账号": "이미 생성됨, 클릭하여 계정 추가", "已打开官方登录页,请在窗口中完成登录…": "공식 로그인 페이지를 열었습니다. 창에서 로그인을 완료하세요…", "已点发送,等待短信…": "전송을 눌렀습니다. SMS 대기 중…", "已用系统默认浏览器打开登录页,请在浏览器中完成登录…": "시스템 기본 브라우저로 로그인 페이지를 열었습니다. 브라우저에서 로그인을 완료하세요…", "已领取,等官方确认": "수령 완료, 공식 확인 대기 중", "当前壳版本不支持 AutoClaw 网页登录,请更新应用": "현재 앱 버전에서는 AutoClaw 웹 로그인을 지원하지 않습니다. 앱을 업데이트하세요", "当前没有可领取的套餐(活动尚未开始)": "현재 수령 가능한 플랜이 없습니다 (이벤트가 아직 시작되지 않았습니다)", "当前环境不支持领取(桥接方法缺失)": "현재 환경에서는 수령을 지원하지 않습니다 (브리지 메서드 없음)", "必填,CatPaw 账号标识": "필수, CatPaw 계정 식별자", "恢复 Google / GitHub 入口": "Google / GitHub 항목 복원", "手机号": "휴대폰 번호", "手机验证码登录": "SMS 인증 코드 로그인", "打开 Trae SOLO 的官方授权页(trae.cn)并用你的 Trae 账号登录:授权完成后官方页面会跳回本机的一个临时端口;同机部署自动接收,Docker / 远程面板请按提示复制地址栏回调地址。": "Trae SOLO의 공식 인가 페이지(trae.cn)를 열고 Trae 계정으로 로그인하세요: 인가가 완료되면 공식 페이지가 이 컴퓨터의 임시 포트로 되돌아옵니다; 같은 컴퓨터 배포에서는 자동으로 수신하며, Docker / 원격 패널에서는 안내에 따라 주소 표시줄의 콜백 주소를 복사하세요.", "打开 Accio {label}的官方登录页({site})并用你的 Accio 账号登录:登录成功后官方页面会跳回本机;同机自动完成,Docker / 远程面板按提示粘贴回调地址即可(授权码只在本机传给网关,界面不显示明文 token)。": "Accio {label}의 공식 로그인 페이지({site})를 열고 Accio 계정으로 로그인하세요: 로그인에 성공하면 공식 페이지가 이 컴퓨터로 되돌아옵니다; 같은 컴퓨터에서는 자동으로 완료되며, Docker / 원격 패널에서는 안내에 따라 콜백 주소를 붙여넣으면 됩니다 (인가 코드는 이 컴퓨터에서만 게이트웨이에 전달되며, 화면에 평문 token이 표시되지 않습니다).", "打开 Accio {label}登录页": "Accio {label} 로그인 페이지 열기", "打开 Antigravity 网页登录": "Antigravity 웹 로그인 열기", "打开 CatPaw 网页登录": "CatPaw 웹 로그인 열기", "打开 Cline 授权页": "Cline 인가 페이지 열기", "打开 CodeArts 授权页": "CodeArts 인가 페이지 열기", "打开 Qoder 网页登录": "Qoder 웹 로그인 열기", "打开 Trae 授权页": "Trae 인가 페이지 열기", "打开 ZCode {label}的官方授权页并用你的账号登录。授权结果由 ZCode 服务端记录,网关在后台自动取回凭证并加入账号列表。": "ZCode {label}의 공식 인가 페이지를 열고 계정으로 로그인하세요. 인가 결과는 ZCode 서버에 기록되며, 게이트웨이가 백그라운드에서 자격 증명을 자동으로 가져와 계정 목록에 추가합니다.", "打开 ZCode {label}授权页": "ZCode {label} 인가 페이지 열기", "打开华为云 CodeArts 的官方授权页登录:登录完成后官方页面会把浏览器带回网关自己的 /oauth/callback,网关用一次性授权码换取临时凭据并加入账号列表。
网关跑在另一台机器上时,网页端会提示把地址栏中的最终回调地址直接粘贴回面板。": "Huawei Cloud CodeArts의 공식 인가 페이지를 열어 로그인하세요: 로그인이 완료되면 공식 페이지가 브라우저를 게이트웨이 자체의 /oauth/callback으로 되돌립니다. 게이트웨이는 일회성 인가 코드를 임시 자격 증명으로 교환하고 계정 목록에 추가합니다.
게이트웨이가 다른 컴퓨터에서 실행 중이면 웹 UI에서 주소 표시줄의 최종 콜백 주소를 패널에 그대로 붙여넣으라는 안내가 표시됩니다.", "打开华为云授权页登录:登录完成后网关会自动轮询云端取回授权码并加入账号列表(不需要装 OfficeAce 桌面端,也无需手工回填回调地址)。": "Huawei Cloud 인가 페이지를 열고 로그인하세요: 완료되면 게이트웨이가 클라우드를 폴링해 인가 코드를 가져와 계정 목록에 추가합니다 (OfficeAce 데스크톱 앱이 필요 없고, 콜백 URL을 수동으로 다시 붙여넣을 필요도 없습니다).", "打开官方授权页完成设备码授权,登录的是{label}({site})的账号。": "공식 인가 페이지를 열어 기기 코드 인가를 완료하세요. 로그인되는 계정은 {label} ({site}) 계정입니다.", "打开授权页": "인가 페이지 열기", "打开授权页完成确认,账号自动加入 {label}{note}": "인가 페이지를 열어 확인을 완료하면 계정이 {label}에 자동으로 추가됩니다{note}", "打开方式": "여는 방식", "打开网页登录": "웹 로그인 열기", "探测失败:{message}": "탐지 실패: {message}", "接入一个兼容上游": "호환 업스트림 연결", "提交中…": "제출 중…", "搜索提供商": "제공자 검색", "搜索提供商…": "제공자 검색…", "整份粘贴官方插件 / CLIProxyAPI 落盘的凭据 JSON(形如 {\"codearts_provider_credential\":{…}},铺平的也行)。
必填:access_key_id、secret_access_key、security_token。要能自动续期,必须连 refresh_token 与 oauth_context 一起粘 —— 临时凭据约一小时到期,缺这半块就续不回来,只能重新登录。": "공식 플러그인 / CLIProxyAPI가 디스크에 기록한 자격 증명 JSON을 통째로 붙여넣으세요 (형식: {\"codearts_provider_credential\":{…}}, 평탄화된 형태도 가능).
필수: access_key_id, secret_access_key, security_token.자동 갱신을 원하면 refresh_token과 oauth_context도 함께 붙여넣어야 합니다 — 임시 자격 증명은 약 1시간 후 만료되며, 이 부분이 없으면 갱신할 수 없어 다시 로그인해야 합니다.", "文件是{edition}凭证,已按该版本导入": "파일은 {edition} 자격 증명이며 해당 버전으로 가져왔습니다", "新建自定义提供商": "커스텀 제공자 새로 만들기", "方案:{label}": "방식: {label}", "明文 JWT 或 auth.json 里的 enc: 加密值(自动解密)": "평문 JWT 또는 auth.json의 enc: 암호화 값 (자동 복호화)", "明文 JWT(国际版账号的 access token)": "평문 JWT (국제판 계정의 access token)", "智谱 bigmodel.cn 的 Coding 套餐,Key 在 open.bigmodel.cn/usercenter/apikeys": "Zhipu bigmodel.cn의 Coding 플랜, Key는 open.bigmodel.cn/usercenter/apikeys에서 발급합니다", "未知错误": "알 수 없는 오류", "未能获取授权地址,请重试": "인가 주소를 가져오지 못했습니다. 다시 시도하세요", "未能读取 cc-switch 数据": "cc-switch 데이터를 읽지 못했습니다", "未领取成功": "수령하지 못했습니다", "本地 Ollama、OpenCode Zen 免费档这类上游要勾上,否则账号不可用": "로컬 Ollama, OpenCode Zen 무료 등급 같은 업스트림에는 체크해야 하며, 그렇지 않으면 계정을 사용할 수 없습니다", "本家有两个**互不替代**的凭证,按你要用的功能填,至少填一个:编码套餐 API Key 用于转发推理(打 {site})与查询窗口限额(每 N 小时 / 每周的剩余比例);jwt 用于领取套餐与查询余额(打 zcode.z.ai 的 billing 网关,官方叫 Coding Plan JWT,是一串三段点分的字符串)。余额两把都能查、但读到的东西不同:jwt 读到余额桶与套餐到期,API Key 读到窗口限额;而领取只认 jwt、转发只认 API Key。请填写 {label}账号的凭证 —— {plan}(最容易拿到的办法:直接用上方的「网页登录」—— 它会替你把这个 API Key 换好,两个凭证一起拿到。)": "이 제공자에는 **서로 대체할 수 없는** 자격 증명이 두 개 있습니다. 사용할 기능에 따라 입력하고 최소 하나는 입력하세요: 코딩 플랜 API Key는 추론 포워딩({site} 호출)과 윈도우 할당량 조회(N시간마다 / 주간 잔여 비율)에 사용하고, jwt는 플랜 수령과 잔액 조회에 사용합니다(zcode.z.ai의 billing 게이트웨이 호출, 공식 명칭 Coding Plan JWT, 3단 점 구분 문자열). 잔액은 둘 다 조회할 수 있지만 읽어 오는 내용이 다릅니다: jwt는 잔액 버킷과 플랜 만료를, API Key는 윈도우 할당량을 읽습니다. 수령은 jwt만, 포워딩은 API Key만 인정합니다. {label} 계정의 자격 증명을 입력하세요 — {plan} (가장 쉽게 얻는 방법: 위의 「웹 로그인」을 바로 사용하세요 — 이 API Key를 대신 교환해 두 자격 증명을 함께 받아 줍니다.)", "本机 Ollama 的 OpenAI 兼容端点,无需 API Key(默认已勾上「该上游无需鉴权」,鉴权头一个都不发)": "이 컴퓨터의 Ollama OpenAI 호환 엔드포인트, API Key 불필요 (기본적으로 「이 업스트림은 인증이 필요하지 않음」이 체크되어 있고, 인증 헤더를 전혀 보내지 않습니다)", "本次未确认到账": "이번에는 적립이 확인되지 않았습니다", "条可导入": "건을 가져올 수 있습니다", "条配置,其中": "건의 설정 중", "桌面运行时不可用(Tauri 未初始化)": "데스크톱 런타임을 사용할 수 없습니다 (Tauri 미초기화)", "模型网关基址": "모델 게이트웨이 기본 주소", "正在打开百度登录页…": "Baidu 로그인 페이지를 여는 중…", "正在扫描本机 cc-switch…": "이 컴퓨터의 cc-switch를 스캔하는 중…", "正在换发访客凭证…": "게스트 자격 증명을 발급하는 중…", "正在添加…": "추가하는 중…", "正在等待{name}登录完成;完成或取消后才能发起新的登录": "{name} 로그인 완료를 기다리는 중입니다; 완료하거나 취소한 후에 새로운 로그인을 시작할 수 있습니다", "每周": "매주", "每日": "매일", "每月": "매월", "没有则无法自动续期": "없으면 자동 갱신할 수 없습니다", "没有匹配「{keyword}」的提供商": "「{keyword}」와 일치하는 제공자가 없습니다", "添加 {name} 账号": "{name} 계정 추가", "添加中…": "추가 중…", "添加到 ": "추가 대상: ", "添加失败:{reason}": "추가 실패: {reason}", "添加小浣熊账号": "小浣熊 계정 추가", "添加方式": "추가 방식", "添加访客账号": "게스트 계정 추가", "添加账号": "계정 추가", "火山引擎 Coding 套餐;通用推理接入点为 https://ark.cn-beijing.volces.com/api/v3": "Volcano Engine Coding 플랜; 범용 추론 엔드포인트는 https://ark.cn-beijing.volces.com/api/v3입니다", "点击添加账号": "클릭하여 계정 추가", "点开即预填,填 Key 接入": "열면 값이 미리 채워져 있으며, Key를 입력하면 연결됩니다", "点按钮后先过一次滑块验证(官方风控),随后打开登录页,登录完成即自动添加账号。
这是国际版官方唯一的登录方式;已在客户端登录过的,用「导入桌面端登录态」更快。": "버튼을 누르면 먼저 슬라이더 인증을 한 번 통과하고(공식 리스크 관리), 이어서 로그인 페이지가 열리며 로그인이 완료되면 계정이 자동으로 추가됩니다.
이것이 국제판의 공식 유일한 로그인 방식입니다; 이미 클라이언트에 로그인한 적이 있다면 「데스크톱 로그인 상태 가져오기」가 더 빠릅니다.", "用 AutoClaw 账号绑定的手机号登录:点击「获取验证码」,收到短信后填入下方并登录。验证码由本机直接提交给官方接口,界面不显示 token。": "AutoClaw 계정에 연결된 휴대폰 번호로 로그인합니다: 「코드 받기」를 클릭하고 SMS를 받은 뒤 아래에 입력하여 로그인하세요. 인증 코드는 이 컴퓨터에서 공식 API로 직접 제출되며, 화면에 token이 표시되지 않습니다.", "用 CatPaw 账号完成登录(美团 passport),成功后自动加入账号列表。": "CatPaw 계정으로 로그인합니다 (Meituan passport), 성공하면 자동으로 계정 목록에 추가됩니다.", "用 Loomy 账号绑定的手机号登录:点「获取验证码」后填入即可。这是本家最省事的入口。": "Loomy 계정에 연결된 휴대폰 번호로 로그인합니다: 「코드 받기」를 클릭한 뒤 입력하면 됩니다. 이 제공자에서 가장 간편한 방법입니다.", "用于转发;形如 apiKey.secret 两段点分(不填则这个账号不能转发)": "포워딩에 사용합니다; apiKey.secret 형태의 2단 점 구분 (입력하지 않으면 이 계정은 포워딩할 수 없습니다)", "用于领取套餐与查询余额;不填则这个账号不能领取与查余额": "플랜 수령과 잔액 조회에 사용합니다; 입력하지 않으면 이 계정은 수령과 잔액 조회를 할 수 없습니다", "用户 ID": "사용자 ID", "用绑定的手机号登录:点「获取验证码」后填入即可。这是国内版官方唯一的登录方式。": "연결된 휴대폰 번호로 로그인합니다: 「코드 받기」를 클릭한 뒤 입력하면 됩니다. 이것이 중국판의 공식 유일한 로그인 방식입니다.", "留空则用提供商名称": "비워 두면 제공자 이름 사용", "登录 / 添加 {name} 账号": "로그인 / {name} 계정 추가", "登录 session(一长串)": "로그인 session (긴 문자열)", "登录中…": "로그인 중…", "登录失败:{message}": "로그인 실패: {message}", "登录已结束": "로그인이 종료되었습니다", "登录并添加": "로그인 후 추가", "登录态文件路径:~/.box-agent/config/auth.json(Windows:C:\\Users\\<你的用户名>\\.box-agent\\config\\auth.json)": "로그인 상태 파일 경로: ~/.box-agent/config/auth.json (Windows: C:\\Users\\<사용자 이름>\\.box-agent\\config\\auth.json)", "确定删除自定义提供商「{name}」?将同时删除该提供商下 {count} 个账号,删除后无法恢复。": "커스텀 제공자 「{name}」을(를) 삭제할까요? 이 제공자 아래의 계정 {count}개도 함께 삭제되며, 삭제 후에는 복구할 수 없습니다.", "等待 Accio {label}登录完成…": "Accio {label} 로그인 대기 중…", "等待 CatPaw 登录完成…": "CatPaw 로그인 대기 중…", "等待 Cline 授权确认…": "Cline 인가 확인 대기 중…", "等待 CodeArts 登录完成…": "CodeArts 로그인 대기 중…", "等待 Google 授权完成…": "Google 인가 대기 중…", "等待 KukuAI 登录完成…": "KukuAI 로그인 대기 중…", "等待 OfficeAce 登录完成…": "OfficeAce 로그인 대기 중…", "等待 OrcaTerm 登录完成…": "OrcaTerm 로그인 대기 중…", "等待 Qoder 授权完成…": "Qoder 인가 대기 중…", "等待 Trae 授权完成…": "Trae 인가 대기 중…", "等待 ZCode {label}授权完成…": "ZCode {label} 인가 대기 중…", "等待小浣熊登录完成…": "小浣熊 로그인 대기 중…", "等待登录完成…": "로그인 완료 대기 중…", "等待网页登录…": "웹 로그인 대기 중…", "粘贴 API Key": "API Key 붙여넣기", "粘贴 API 令牌": "API 토큰 붙여넣기", "粘贴 Accio 的 accessToken": "Accio의 accessToken 붙여넣기", "粘贴 Antigravity 的 Google refresh token(以 1// 开头;直接粘贴含 refresh_token= 的整行也行)。
这是网页登录之外的手工入口(例如从已登录的官方 IDE 里导出)。refresh token 不会过期,access token 到期由网关自动续期;令牌丢了只能重新走 Google 授权,请妥善保存。": "Antigravity의 Google refresh token을 붙여넣으세요 (1//로 시작; refresh_token=이 포함된 줄 전체를 붙여넣어도 됨).
웹 로그인 외의 수동 입구입니다(예: 로그인된 공식 IDE에서 내보내기). refresh token은 만료되지 않으며, access token 만료 시 게이트웨이가 자동으로 갱신합니다; 토큰을 잃어버리면 Google 인가를 다시 받아야 하므로 잘 보관하세요.", "粘贴 Command Code 的 API Key(user_ 开头;从官方 CLI 的 ~/.commandcode/auth.json 或网页 studio 获取)。整行 / 带引号 / 带 Bearer 前缀地粘都行,网关会自己剥成裸 key。key 不过期、也没有续期接口,失效后重新获取即可;添加时网关会做一次轻量探活,失败不影响添加。": "Command Code의 API Key를 붙여넣으세요 (user_로 시작; 공식 CLI의 ~/.commandcode/auth.json 또는 웹 studio에서 획득). 줄 전체 / 따옴표 포함 / Bearer 접두사 포함 그대로 붙여넣어도 됩니다. 게이트웨이가 알아서 순수한 key만 추출합니다. key는 만료되지 않고 갱신 인터페이스도 없으므로, 무효가 되면 다시 받으면 됩니다; 추가 시 게이트웨이가 가벼운 활성 확인을 한 번 수행하며, 실패해도 추가에는 영향을 주지 않습니다.", "粘贴 Cookie": "Cookie 붙여넣기", "粘贴 Google refresh token": "Google refresh token 붙여넣기", "粘贴 OrcaTerm 的 OAuth accessToken(JWT,三段点分;从桌面客户端 data.bin 或 Web 版 Cookie ot_session 获取)。直接粘贴含 Bearer / ot_session= 的整行也行,网关会自己剥成裸 token。添加后由网关自动续期(上游有续期接口),无需跟随 2 小时时效手动更换。": "OrcaTerm의 OAuth accessToken(점 3개로 구분된 JWT. 데스크톱 클라이언트의 data.bin 또는 웹 버전 Cookie ot_session에서 확인)을 붙여넣으세요. Bearer / ot_session=이 포함된 줄을 그대로 붙여넣어도 되며, 게이트웨이가 토큰만 추출합니다. 추가 후에는 게이트웨이가 자동으로 갱신하므로(업스트림에 갱신 API가 있음) 2시간 만료를 직접 따라갈 필요가 없습니다.", "粘贴 Qoder 个人访问令牌(pt-…)": "Qoder 개인 액세스 토큰(pt-…) 붙여넣기", "粘贴 accessToken": "accessToken 붙여넣기", "粘贴 access_token(一长串 JWT)": "access_token 붙여넣기 (긴 JWT)", "粘贴 session cookie": "session cookie 붙여넣기", "粘贴 token / refreshToken": "token / refreshToken 붙여넣기", "粘贴 workos:… 开头的令牌(不带前缀也会自动补上)": "workos:…로 시작하는 토큰 붙여넣기 (접두사가 없어도 자동으로 붙습니다)", "粘贴智谱清言的访问令牌(JWT,三段点分)。获取方式:浏览器打开 chatglm.cn 并登录后,在开发者工具的 Application → Cookies 里复制 chatglm_token 的值(也可以直接粘 chatglm_token=…; 整行)。粘贴后会先向上游校验一次,校验通过才落账号;登录账号的积分、签到能力都能用,之后由网关自动续期(上游有续期接口)。": "智谱清言 액세스 토큰(점 3개로 구분된 JWT)을 붙여넣으세요. 발급 방법: 브라우저에서 chatglm.cn을 열고 로그인한 뒤 개발자 도구의 Application → Cookies에서 chatglm_token 값을 복사합니다(chatglm_token=…; 줄을 그대로 붙여도 됩니다). 붙여넣은 뒤 업스트림에 한 번 검증하며, 통과한 경우에만 계정을 저장합니다. 로그인된 계정은 포인트와 签到 기능을 쓸 수 있고, 이후 게이트웨이가 자동으로 갱신합니다(업스트림에 갱신 인터페이스가 있습니다).", "粘贴登录凭据": "로그인 자격 증명 붙여넣기", "粘贴的是登录 session(同时是模型网关的 token)。Loomy 没有续期接口,session 有效期约 14 天,过期后重新登录即可。": "붙여넣는 것은 로그인 session입니다 (동시에 모델 게이트웨이의 token입니다). Loomy에는 갱신 인터페이스가 없으며 session 유효 기간은 약 14일이므로, 만료되면 다시 로그인하면 됩니다.", "粘贴网关凭据": "게이트웨이 자격 증명 붙여넣기", "粘贴网页登录态 cookie monkeycode_ai_session 的值(在浏览器里复制整段 Cookie 直接粘贴也行,网关会自己剥出值)。
{siteNote}
MonkeyCode 没有续期接口:session 有效期约 30 天(硬限制),过期后重新登录网页、再粘贴一次即可。": "웹 로그인 상태 cookie monkeycode_ai_session의 값을 붙여넣으세요 (브라우저에서 전체 Cookie를 복사해 그대로 붙여넣어도 됩니다. 게이트웨이가 값을 알아서 추출합니다).
{siteNote}
MonkeyCode에는 갱신 인터페이스가 없습니다: session 유효 기간은 약 30일(하드 제한)이며, 만료되면 웹에 다시 로그인해 한 번 더 붙여넣으면 됩니다.", "粘贴访问令牌": "액세스 토큰 붙여넣기", "系统浏览器": "시스템 브라우저", "系统浏览器可复用已有登录态(国际版推荐);内嵌窗口更干净。": "시스템 브라우저는 기존 로그인 상태를 재사용할 수 있습니다 (국제판 권장); 내장 창이 더 깔끔합니다.", "系统浏览器打开(复用已登录的 Cline 账号);完成后自动加入列表": "시스템 브라우저로 엽니다 (로그인된 Cline 계정 재사용); 완료하면 자동으로 목록에 추가됩니다", "系统浏览器打开(复用已登录的 Google 账号);完成后自动加入列表": "시스템 브라우저로 엽니다(로그인된 Google 계정 재사용); 완료하면 자동으로 목록에 추가됩니다", "系统浏览器打开(复用已登录的 Zai / Google 账号);完成后自动加入列表": "시스템 브라우저로 엽니다 (로그인된 Zai / Google 계정 재사용); 완료하면 자동으로 목록에 추가됩니다", "系统浏览器打开(复用已登录的美团账号);完成后自动加入列表": "시스템 브라우저로 엽니다 (로그인된 Meituan 계정 재사용); 완료하면 자동으로 목록에 추가됩니다", "系统浏览器打开(复用已登录账号);完成后自动加入列表": "시스템 브라우저로 엽니다 (로그인된 계정 재사용); 완료하면 자동으로 목록에 추가됩니다", "系统默认浏览器": "시스템 기본 브라우저", "编码套餐 API Key": "코딩 플랜 API Key", "网关 Secret": "게이트웨이 시크릿", "网页登录": "웹 로그인", "网页登录的打开方式": "웹 로그인을 여는 방식", "网页登录(Zai / Google)": "웹 로그인 (Zai / Google)", "自定义": "커스텀", "自建聚合面板:填你自己的站点地址。余额查询用该账号的 API Key 打 {base}/v1/usage,不需要额外配置": "자체 구축 어그리게이션 패널: 자신의 사이트 주소를 입력하세요. 잔액 조회는 이 계정의 API 키로 {base}/v1/usage 를 호출하며 추가 설정이 필요 없습니다", "自建聚合面板:填你自己的站点地址;余额查询要另填 NewAPI 的个人访问令牌(见下方「余额查询」一段)": "자체 구축 어그리게이션 패널: 자신의 사이트 주소를 입력하세요. 잔액 조회에는 별도로 NewAPI 개인 액세스 토큰이 필요합니다 (아래 \"잔액 조회\" 단락 참조)", "获取风控配置失败,将直接尝试领取:{message}": "리스크 관리 구성을 가져오지 못했습니다. 바로 수령을 시도합니다: {message}", "获取验证码": "코드 받기", "访客模式": "게스트 모드", "访客模式(免登录)": "게스트 모드(로그인 불필요)", "该上游无需鉴权(不发送鉴权头)": "이 업스트림은 인증이 필요하지 않음 (인증 헤더를 보내지 않음)", "该提供商": "이 제공자", "该提供商账号添加功能即将上线": "이 제공자의 계정 추가 기능이 곧 출시됩니다", "该自定义提供商已不存在(可能已被删除),请刷新后重试": "이 커스텀 제공자가 더 이상 존재하지 않습니다(삭제되었을 수 있습니다). 새로 고친 후 다시 시도하세요", "请先选择一个自定义提供商": "먼저 커스텀 제공자를 선택하세요", "请在弹出的滑块中完成验证(官方要求的风控步骤)": "표시된 슬라이더에서 인증을 완료하세요 (공식에서 요구하는 리스크 관리 단계)", "请填写 11 位大陆手机号": "11자리 중국 본토 휴대폰 번호를 입력하세요", "请填写 6 位数字验证码": "6자리 숫자 인증 코드를 입력하세요", "请填写 Base URL": "Base URL을 입력하세요", "请填写 {label}": "{label}을(를) 입력하세요", "请填写名称": "이름을 입력하세요", "请完成验证…": "인증을 완료하세요…", "读取 %APPDATA%/AutoClaw/auth.json 并解密,仅 Windows": "%APPDATA%/AutoClaw/auth.json을 읽어 복호화합니다. Windows 전용", "读取 ~/.cline/data/settings/providers.json,需已在 Cline 客户端登录": "~/.cline/data/settings/providers.json을 읽습니다. Cline 클라이언트에 로그인되어 있어야 합니다", "读取 ~/.meituan-catpaw/auth.json,需已在 CatPaw 客户端登录": "~/.meituan-catpaw/auth.json을 읽습니다. CatPaw 클라이언트에 로그인되어 있어야 합니다", "读取本机 KukuAI 客户端登录态(%APPDATA%\\baidugenflowpro\\Network\\Cookies),需已在 KukuAI 客户端登录": "이 컴퓨터의 KukuAI 클라이언트 로그인 상태를 읽습니다 (%APPDATA%\\baidugenflowpro\\Network\\Cookies). KukuAI 클라이언트에 로그인되어 있어야 합니다", "读取本机 OrcaTerm 客户端登录态(%APPDATA%\\com.orcaterm-desktop.app\\data.bin),需已在 OrcaTerm 客户端登录": "로컬 OrcaTerm 클라이언트 로그인 상태(%APPDATA%\\com.orcaterm-desktop.app\\data.bin)를 읽습니다. OrcaTerm 클라이언트에 로그인되어 있어야 합니다", "读取本机智谱清言客户端登录态(%APPDATA%\\chatglm\\Network\\Cookies),需已在客户端登录": "이 PC의 智谱清言 클라이언트 로그인 상태를 읽습니다(%APPDATA%\\chatglm\\Network\\Cookies). 클라이언트에 로그인되어 있어야 합니다", "读本机官方客户端(Tencent WorkBuddy / WorkBuddy AI)当前登录的账号:自动定位其凭证目录里最新的登录态文件(需已在本机官方客户端登录)。导入后由网关自动续期,无需跟随 2 小时时效手动换令牌。": "이 컴퓨터의 공식 클라이언트(Tencent WorkBuddy / WorkBuddy AI)에 현재 로그인된 계정을 읽습니다. 자격 증명 디렉터리에서 최신 로그인 상태 파일을 자동으로 찾습니다(이 컴퓨터의 공식 클라이언트에 로그인되어 있어야 함). 가져온 후에는 게이트웨이가 자동 갱신하므로 2시간 유효 기간에 맞춰 토큰을 수동으로 교체할 필요가 없습니다.", "读本机客户端当前登录态(明文 Cookie,无需解密)。客户端运行时 Cookies 文件被独占占用,导入前请先关闭 KukuAI 客户端。": "이 컴퓨터 클라이언트의 현재 로그인 상태를 읽습니다 (평문 Cookie, 복호화 불필요). 클라이언트 실행 중에는 Cookies 파일이 독점 점유되므로, 가져오기 전에 KukuAI 클라이언트를 먼저 종료하세요.", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。": "이 컴퓨터 클라이언트의 현재 로그인 상태를 매번 실시간으로 읽습니다 (이 기록을 삭제해도 클라이언트 로그인 상태에는 영향을 주지 않습니다).", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。客户端重新登录后点「刷新 Token」同步。": "이 컴퓨터 클라이언트의 현재 로그인 상태를 매번 실시간으로 읽습니다 (이 기록을 삭제해도 클라이언트 로그인 상태에는 영향을 주지 않습니다). 클라이언트에서 다시 로그인한 후 「Token 갱신」을 눌러 동기화하세요.", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。客户端重新登录后重新导入即可。": "이 컴퓨터 클라이언트의 현재 로그인 상태를 매번 실시간으로 읽습니다 (이 기록을 삭제해도 클라이언트 로그인 상태에는 영향을 주지 않습니다). 클라이언트에서 다시 로그인한 후 다시 가져오면 됩니다.", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。用 Zai / Google 登录客户端的用户走这一条。": "이 컴퓨터 클라이언트의 현재 로그인 상태를 매번 실시간으로 읽습니다 (이 기록을 삭제해도 클라이언트 로그인 상태에는 영향을 주지 않습니다). Zai / Google로 클라이언트에 로그인하는 사용자는 이 항목을 사용하세요.", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。这一条归入 {label}。": "이 컴퓨터 클라이언트의 현재 로그인 상태를 매번 실시간으로 읽습니다 (이 기록을 삭제해도 클라이언트 로그인 상태에는 영향을 주지 않습니다). 이 항목은 {label}로 분류됩니다.", "读本机客户端当前登录的 OAuth 令牌(明文 JSON,无需解密)。导入后由网关自动续期,无需跟随客户端的 2 小时时效手动换令牌。": "로컬 클라이언트가 현재 로그인한 OAuth 토큰을 읽습니다(평문 JSON, 복호화 불필요). 가져온 뒤에는 게이트웨이가 자동으로 갱신하므로 클라이언트의 2시간 만료에 맞춰 수동으로 교체할 필요가 없습니다.", "读本机客户端当前的登录态。客户端的 Cookies 是 DPAPI 加密的(Chromium os_crypt),因此仅 Windows 可用;客户端正在运行时可能读不到该文件,先退出客户端再试即可(也可改用「填写凭证」粘贴令牌)。": "이 PC 클라이언트의 현재 로그인 상태를 읽습니다. 클라이언트의 Cookies는 DPAPI로 암호화되어 있어(Chromium os_crypt) Windows에서만 사용할 수 있습니다. 클라이언트가 실행 중이면 이 파일을 읽지 못할 수 있으니 클라이언트를 종료한 뒤 다시 시도하세요(\"자격 증명 입력\"으로 토큰을 붙여넣어도 됩니다).", "账号信息": "계정 정보", "账号信息不完整,请刷新后重试": "계정 정보가 불완전합니다. 새로 고친 후 다시 시도하세요", "账号已添加,但请留意:{warning}": "계정은 추가되었지만 확인해 주세요: {warning}", "账号版本": "계정 버전", "账号类型": "계정 유형", "账号:{name}
": "계정: {name}
", "走 Inference Providers 路由,Key 在 hf.co/settings/tokens 创建": "Inference Providers 라우팅을 사용하며, Key는 hf.co/settings/tokens에서 만듭니다", "还没有账号": "아직 계정이 없습니다", "这一家当前不支持网页登录,请改用填写凭证": "이 제공자는 현재 웹 로그인을 지원하지 않습니다. 대신 자격 증명 입력을 사용하세요", "这个账号当前没有可自动领的活动(只自动领每日登录赠送积分)": "이 계정에는 현재 자동으로 수령할 수 있는 이벤트가 없습니다 (매일 로그인 보너스 포인트만 자동 수령합니다)", "这份额度走「活动套餐」通道:若转发时提示编码套餐已到期,": "이 할당량은 「이벤트 플랜」 채널을 사용합니다: 포워딩 시 코딩 플랜이 만료되었다는 안내가 나오면, ", "这里填国内站(modelscope.cn)的账号:请粘贴国内站的令牌。国际站(modelscope.ai)是另一家 provider、另一套账号,两边的令牌不通用。": "여기에는 중국 사이트(modelscope.cn) 계정을 입력합니다. 중국 사이트의 토큰을 붙여넣으세요. 인터내셔널 사이트(modelscope.ai)는 다른 provider·다른 계정이며, 양쪽 토큰은 호환되지 않습니다.", "这里填国内站(monkeycode-ai.com)的账号:请粘贴国内站的 session。国际站(monkeycode-ai.net)是另一家 provider、另一套账号,两边的凭证不通用。": "여기에는 중국 사이트(monkeycode-ai.com)의 계정을 입력합니다: 중국 사이트의 session을 붙여넣으세요. 국제 사이트(monkeycode-ai.net)는 다른 제공자이며 별도의 계정입니다. 양쪽 자격 증명은 호환되지 않습니다.", "这里填国际站(modelscope.ai)的账号:请粘贴国际站的令牌。国内站(modelscope.cn)是另一家 provider、另一套账号,两边的令牌不通用。": "여기에는 인터내셔널 사이트(modelscope.ai) 계정을 입력합니다. 인터내셔널 사이트의 토큰을 붙여넣으세요. 중국 사이트(modelscope.cn)는 다른 provider·다른 계정이며, 양쪽 토큰은 호환되지 않습니다.", "这里填国际站(monkeycode-ai.net)的账号:请粘贴国际站的 session。国内站(monkeycode-ai.com)是另一家 provider、另一套账号,两边的凭证不通用。": "여기에는 국제 사이트(monkeycode-ai.net)의 계정을 입력합니다: 국제 사이트의 session을 붙여넣으세요. 중국 사이트(monkeycode-ai.com)는 다른 제공자이며 별도의 계정입니다. 양쪽 자격 증명은 호환되지 않습니다.", "选择 CatPaw 客户端的登录态文件 auth.json(Windows:C:\\Users\\<你的用户名>\\.meituan-catpaw\\auth.json;macOS / Linux:~/.meituan-catpaw/auth.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端。": "CatPaw 클라이언트의 로그인 상태 파일 auth.json을 선택하세요 (Windows: C:\\Users\\<사용자 이름>\\.meituan-catpaw\\auth.json, macOS / Linux: ~/.meituan-catpaw/auth.json). 가져오기 후에는 자격 증명이 게이트웨이에 저장되어 독립적으로 전달할 수 있습니다 — 더 이상 이 컴퓨터의 클라이언트에 의존하지 않습니다.", "选择 Cline 客户端的登录态文件 providers.json(Windows:C:\\Users\\<你的用户名>\\.cline\\data\\settings\\providers.json;macOS / Linux:~/.cline/data/settings/providers.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端;这一条归入 {label}。": "Cline 클라이언트의 로그인 상태 파일 providers.json을 선택하세요 (Windows: C:\\Users\\<사용자 이름>\\.cline\\data\\settings\\providers.json, macOS / Linux: ~/.cline/data/settings/providers.json). 가져오기 후에는 자격 증명이 게이트웨이에 저장되어 독립적으로 전달할 수 있습니다 — 더 이상 이 컴퓨터의 클라이언트에 의존하지 않습니다. 이 항목은 {label}에 등록됩니다.", "选择 KukuAI 客户端的 Cookies 文件(%APPDATA%\\baidugenflowpro\\Network\\Cookies):它是**二进制** SQLite 数据库(无扩展名,不是 JSON)。导入时读的是你选中文件的副本、不和运行中的客户端抢占用,因此**无需先关闭客户端**。导入后凭证直接落在网关、可独立转发。": "KukuAI 클라이언트의 Cookies 파일을 선택하세요 (%APPDATA%\\baidugenflowpro\\Network\\Cookies): **바이너리** SQLite 데이터베이스입니다 (확장자 없음, JSON 아님). 가져오기는 선택한 파일의 복사본을 읽어 실행 중인 클라이언트와 점유를 다투지 않으므로 **클라이언트를 먼저 종료할 필요가 없습니다**. 가져오기 후에는 자격 증명이 게이트웨이에 저장되어 독립적으로 전달할 수 있습니다.", "选择凭证文件导入": "자격 증명 파일에서 가져오기", "选择官方客户端的登录态凭证文件(workbuddy-desktop.info / workbuddy-desktop-ai.info)或 wb2api 导出的账号 JSON(嵌套 / 扁平形均可)。": "공식 클라이언트의 로그인 자격 증명 파일(workbuddy-desktop.info / workbuddy-desktop-ai.info) 또는 wb2api에서 내보낸 계정 JSON(중첩/평면 형식 모두 가능)을 선택하세요.", "选择小浣熊客户端的登录态文件 auth.json(Windows:C:\\Users\\<你的用户名>\\.box-agent\\config\\auth.json;macOS / Linux:~/.box-agent/config/auth.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端。": "小浣熊 클라이언트의 로그인 상태 파일 auth.json을 선택하세요 (Windows: C:\\Users\\<사용자 이름>\\.box-agent\\config\\auth.json, macOS / Linux: ~/.box-agent/config/auth.json). 가져오기 후에는 자격 증명이 게이트웨이에 저장되어 독립적으로 전달할 수 있습니다 — 더 이상 이 컴퓨터의 클라이언트에 의존하지 않습니다.", "选择提供商": "제공자 선택", "选择的文件不是合法 JSON": "선택한 파일이 유효한 JSON이 아닙니다", "选择要添加账号的提供商": "계정을 추가할 제공자 선택", "重新扫描": "다시 스캔", "鉴权": "인증", "阿里云 Token Plan 套餐(国际站)": "Alibaba Cloud Token Plan (국제 사이트)", "阿里云百炼 Coding 套餐(国内站)": "Alibaba Cloud Model Studio Coding 플랜 (중국 사이트)", "阿里云百炼 Coding 套餐(国际站)": "Alibaba Cloud Model Studio Coding 플랜 (국제 사이트)", "阿里云百炼模型服务(国际站,OpenAI 兼容模式)": "Alibaba Cloud Model Studio 모델 서비스 (국제 사이트, OpenAI 호환 모드)", "需要图形验证码:登录窗口已弹出,请填写后继续": "그래픽 캡차가 필요합니다: 로그인 창이 열렸으니 입력한 후 계속하세요", "预置 API": "프리셋 API", "领取 CodeArts 每日福利": "CodeArts 일일 혜택 수령", "领取失败:{message}": "수령 실패: {message}", "领取并让官方确认": "수령하고 공식 확인 받기", "风控验证配置不完整,请稍后重试": "리스크 관리 인증 구성이 불완전합니다. 잠시 후 다시 시도하세요", "验证码": "인증 코드", "验证码已发送。收到后填入下方并点「登录并添加」": "인증 코드를 전송했습니다. 받은 후 아래에 입력하고 「로그인 후 추가」를 클릭하세요", "验证码已发送,请查看手机短信": "인증 코드를 전송했습니다. 휴대폰 SMS를 확인하세요", "验证码已发送,请查看手机短信。填入下方并点「登录并添加」即完成登录": "인증 코드를 전송했습니다. 휴대폰 SMS를 확인하세요. 아래에 입력하고 「로그인 후 추가」를 클릭하면 로그인이 완료됩니다", "验证码已发送,请查看短信": "인증 코드를 전송했습니다. 문자 메시지를 확인하세요", "验证码校验失败,请重试": "인증 코드 확인에 실패했습니다. 다시 시도하세요", "验证码校验超时,请重试": "인증 코드 확인 시간이 초과되었습니다. 다시 시도하세요", "验证码组件不可用,请重试": "캡차 컴포넌트를 사용할 수 없습니다. 다시 시도하세요", "验证码组件初始化超时,请重试": "캡차 컴포넌트 초기화 시간이 초과되었습니다. 다시 시도하세요", "验证码组件加载失败,请检查网络后重试": "캡차 컴포넌트 로드에 실패했습니다. 네트워크를 확인한 후 다시 시도하세요", "验证码组件加载异常,请重试": "캡차 컴포넌트 로드 중 오류가 발생했습니다. 다시 시도하세요", "验证码组件加载超时,请检查网络后重试": "캡차 컴포넌트 로드 시간이 초과되었습니다. 네트워크를 확인한 후 다시 시도하세요", "验证码组件未加载,请重启应用后重试": "캡차 컴포넌트가 로드되지 않았습니다. 앱을 다시 시작한 후 다시 시도하세요", "(免费额度池,模型名带 cline-free/ 前缀)。": " (무료 할당량 풀, 모델 이름에 cline-free/ 접두사 포함).", "(其中 {n} 把恢复为不限制)": " (이 중 {n}개는 제한 없음으로 복원)", "(必填)": " (필수)", "(有效期 {window})": "(유효 기간 {window})", "(订阅池,模型名带 cline-pass/ 前缀,需要账号有对应订阅)。": " (구독 풀, 모델 이름에 cline-pass/ 접두사 포함, 계정에 해당 구독이 있어야 합니다).", ",下一次最快 {minutes} 分钟后": ", 다음 시도는 최소 {minutes}분 후", ",并从 {n} 把 Key 的可用提供商里移除": ", Key {n}개의 사용 가능한 제공자 목록에서 이 제공자를 제거했습니다" });
diff --git a/desktop-tauri/ui/i18n/ko/checkin.js b/desktop-tauri/ui/i18n/ko/checkin.js
index 1a3f2ee1..06b41b83 100644
--- a/desktop-tauri/ui/i18n/ko/checkin.js
+++ b/desktop-tauri/ui/i18n/ko/checkin.js
@@ -1,2 +1,2 @@
/* Agent2API 词典构建产物:ko/checkin —— 由 desktop-tauri/i18n/build.mjs 生成,请勿手改;源头是 i18n-src/*.json */
-window.wbI18nDict = window.wbI18nDict || {}; Object.assign(window.wbI18nDict, { " · ": " · ", "SOLO 的 checkin_credits 领取 · 按自然日 0 点刷新": "SOLO의 checkin_credits 수령 · 자연일 0시 기준 새로고침", "UMID 组件安装失败:{error}": "UMID 컴포넌트 설치 실패: {error}", "WorkBuddy 国内版 · 查询任务树后一键点亮 / 领奖 · 含开学季与猫猫旅行 · 点击行展开明细": "WorkBuddy 중국판 · 작업 트리를 조회한 뒤 한 번에 점등/수령 · 개학 시즌 이벤트와 고양이 여행 포함 · 행을 클릭하면 상세", "WorkBuddy 国际版保活模型,按顺序回退": "WorkBuddy 국제판 키핑 모델, 순서대로 폴백", "WorkBuddy 国际版日活任务的免费模型 · 全局一份,与条目无关": "WorkBuddy 국제판 일일 활동용 무료 모델 · 전역 단일 설정, 항목과 무관", "{date}(每天 {time})": "{date} (매일 {time})", "{label} ×{count}({reason})": "{label} ×{count}({reason})", "{n} 项可完成": "{n}개 완료 가능", "{n} 项待领": "수령 대기 {n}건", "{total} 账号 · {done} 已签": "계정 {total}개 · 출석 완료 {done}개", "{total} 项任务 · {pending} 项可完成": "작업 {total}개 · 완료 가능 {pending}개", "✅ UMID 组件已安装,下轮签到即可领取国际版积分": "✅ UMID 컴포넌트를 설치했습니다. 다음 출석부터 국제판 포인트를 수령할 수 있습니다", "✅ {message}": "✅ {message}", "✅ 定时签到已开启": "✅ 예약 출석이 켜졌습니다", "✅ 开学季任务执行完成": "✅ 개학 시즌 작업 실행 완료", "✅ 成长任务执行完成:积分 +{credit} 能量 +{energy}": "✅ 성장 과제 완료: 크레딧 +{credit} 에너지 +{energy}", "✅ 新手福利领取完成,累计 {n} 积分": "✅ 입문 혜택 수령 완료, 누적 {n} 포인트", "✅ 签到完成:{succeeded}/{total} 个账号成功领取{active}": "✅ 출석 완료: {succeeded}/{total}개 계정 수령 성공{active}", "「保活模型链」是 WorkBuddy 国际版领日活时用来保活的免费模型,按顺序逐个尝试、 第一个成功即止;清空提交恢复缺省({defaults})。 当天去重 + 幂等领取:重复执行只会拿到「已领取」,不会重复加分。": "\"키핑 모델 체인\"은 WorkBuddy 국제판 일일 활동에서 계정을 활성 상태로 유지하는 무료 모델입니다. 순서대로 시도하며 첫 성공에서 멈춥니다. 비운 채로 제출하면 기본값({defaults})으로 복원됩니다. 당일 중복 제거 + 멱등한 수령: 반복 실행해도 \"이미 수령됨\"만 반환되며 포인트가 이중으로 적립되지 않습니다.", "「保活模型链」是 WorkBuddy 国际版领日活时用来保活的免费模型,按顺序逐个尝试、 第一个成功即止;清空清单并保存 = 恢复缺省链(当前缺省:{defaults})。 当天去重 + 幂等领取:重复执行只会拿到「已领取」,不会重复加分。": "\"키핑 모델 체인\"은 WorkBuddy 국제판 일일 활동에서 계정을 활성 상태로 유지하는 무료 모델입니다. 순서대로 시도하며 첫 성공에서 멈춥니다. 목록을 비우고 저장하면 기본 체인(현재 기본값: {defaults})으로 복원됩니다. 당일 중복 제거 + 멱등한 수령: 반복 실행해도 \"이미 수령됨\"만 반환되며 포인트가 이중으로 적립되지 않습니다.", "「免费领积分」的每日任务 · 逐个领取": "「무료 포인트 받기」 일일 작업 · 하나씩 수령", "一次性福利 · 签到后自动查询并领取,领完记在本机不再查上游 · 点击行展开任务清单": "일회성 혜택 · 출석 후 자동으로 조회하고 수령하며, 수령을 마치면 로컬에 기록해 업스트림을 더 조회하지 않음 · 행을 클릭해 작업 목록 펼치기", "一次领当天全部奖励(每日签到 + 新人礼) · 幂等由上游保证": "그날의 보상을 한 번에 일괄 수령합니다(매일 출석 + 신규 혜택) · 멱등성은 업스트림이 보장", "一键安装组件": "컴포넌트 한 번에 설치", "一键完成": "한 번에 완료", "一键领取({n})": "전체 수령({n})", "上次执行:{line}": "마지막 실행: {line}", "上次签到时间": "최근 출석 시간", "上次领取 {time} · 领取需通过滑块验证码": "최근 수령 {time} · 수령 시 슬라이더 캡차 필요", "下次 {date}": "다음 {date}", "下次 {date} · 点此管理条目": "다음 {date} · 클릭하여 항목 관리", "不参与每日签到:{list}。CodeArts 的一次性奖励在下方「新手福利」,它与 ZCode 的每日/套餐福利领取见「活动福利」。": "일일 출석 제외: {list}. CodeArts의 일회성 보상은 아래 \"입문 혜택\"에 있으며, CodeArts와 ZCode의 일일/플랜 혜택 수령은 \"활동 혜택\"에서 볼 수 있습니다.", "不参与每日签到:{list}。CodeArts 的一次性奖励在下方「新手福利」,它的每日福利就在上方「每日签到」里;ZCode 的套餐领取见「活动福利」。": "일일 출석 제외: {list}. CodeArts의 일회성 보상은 아래 \"입문 혜택\"에, CodeArts의 일일 혜택은 바로 위 \"일일 출석\"에 있습니다. ZCode의 플랜 수령은 \"활동 혜택\"에서 볼 수 있습니다.", "与国内版同一套任务接口 · 站点不同": "중국판과 동일한 작업 인터페이스 · 사이트만 다름", "今天已领 {n} 份": "오늘 {n}건 받음", "今天未领": "오늘 미수령", "今天(北京时间 {day})已领取 · 官方确认到账 {n} 项 · 明天可再领": "오늘(베이징 시간 {day}) 수령 완료 · 공식 확인 반영 {n}건 · 내일 다시 수령 가능", "今日已执行": "오늘 실행됨", "今日已派出": "오늘 이미 출발", "今日已领取": "오늘 수령 완료", "今日签到": "오늘 출석", "今日签到进度": "오늘 출석 진행률", "从清单里移除": "목록에서 제거", "保活": "키핑", "保活 {n}": "키핑 {n}", "保活+领取": "키핑+수령", "保活中…": "키핑 중…", "保活模型链": "키핑 모델 체인", "全选": "전체 선택", "全部 {n} 家": "전체 {n}곳", "全部完成": "모두 완료", "全部查询": "전체 조회", "全部结果": "모든 결과", "全部账号均可签到": "모든 계정이 출석할 수 있습니다", "全部领取": "전체 수령 완료", "关着:所有条目都不执行": "꺼짐: 어떤 항목도 실행되지 않습니다", "删除失败:{error}": "삭제 실패: {error}", "删除定时条目": "예약 항목 삭제", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活并在网页通道建会话点亮日活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;CodeArts 领当日的运营福利(领取 → 确认 → 回读核实,自动执行受每天 6 次 / 间隔 10 分钟的写请求限流);OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "예정 시각에 체크한 제공자의 사용 가능한 계정을 자동으로 출석 체크합니다 (WorkBuddy 국내판은 매일 출석 API, 국제판은 데일리 액티비티 퀘스트: 이벤트 탐색 → 데일리 액티브 보상 수령 → 무료 모델로 킵얼라이브하고 웹 채널로 세션을 열어 일일 활성 점등. 소浣熊(샤오환슝)은 데스크톱 일일 포인트 경로, AutoClaw 는 공식 클라이언트의 매일 출석 작업. Qoder 중국판은 이벤트 수령 방식이며 이벤트를 배정받지 못한 계정은 중립적 안내를 받습니다. Qoder 국제판은 기기 리스크 관리 신원(로컬 Qoder 클라이언트 / qodercli 의 UMID 컴포넌트가 생성)을 먼저 갖춰야 \"매일 100 Credits\" 이벤트가 보이며, 컴포넌트가 없으면 오류 대신 명확한 설명을 받습니다. Trae 는 SOLO 의 매일 출석 포인트를 수령하고(자정 리셋), 업스트림이 이벤트를 열지 않았거나 자격 증명에 기기 번호가 없으면 오류 대신 \"미수령 + 사유\"를 받습니다. Loomy 는 매일 계정별 첫 로그인 포인트를 한 번 채우고, KukuAI 는 \"무료 포인트\" 일일 작업을 수령하며, CodeArts 는 당일 운영 혜택을 수령합니다(수령 → 확인 → 재조회 검증. 자동 실행은 하루 6 회 / 10 분 간격 쓰기 요청 제한 내). OfficeAce 는 당일 모든 보상을 한 번에 수령합니다 (매일 출석 + 신규 혜택)). 예정 시각을 놓쳐도 부팅 후 자동으로 보충하므로 전원이 꺼져 있어도 누락되지 않습니다. 각사 출석 API 는 멱등하여 반복 실행해도 중복 수령되지 않습니다.", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;CodeArts 领当日的运营福利(领取 → 确认 → 回读核实,自动执行受每天 6 次 / 间隔 10 分钟的写请求限流);OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "정해진 시각이 되면 선택한 제공자의 사용 가능한 계정으로 자동 출석합니다 (WorkBuddy 중국판은 매일 출석 체크 인터페이스, 국제판은 일일 활성 작업으로 진행합니다: 이벤트 탐지, 일일 활성 보상 수령, 무료 모델로 키핑; 小浣熊은 데스크톱 앱 일일 포인트 경로를 사용하고; AutoClaw는 공식 클라이언트의 매일 출석 작업을 사용합니다; Qoder 중국판은 이벤트 수령으로 진행하며, 이벤트가 배정되지 않은 계정은 중립적인 안내를 받습니다; Qoder 국제판은 기기 리스크 관리 신원(로컬 Qoder 클라이언트 / qodercli의 UMID 컴포넌트로 생성)을 먼저 갖춰야 「매일 100 Credits」 이벤트가 보이며, 컴포넌트가 없으면 오류 대신 명확한 설명이 표시됩니다; Trae는 SOLO의 매일 출석 포인트를 수령하며(자연일 0시 기준 초기화), 업스트림이 해당 계정에 이벤트를 열지 않았거나 자격 증명에 기기 번호가 없으면 오류 대신 「미수령 + 구체적 사유」가 표시됩니다; Loomy는 매일 계정당 최초 로그인 포인트를 한 번 적립합니다; KukuAI는 「무료 포인트 받기」 일일 작업을 수령합니다; CodeArts는 당일 운영 혜택을 수령합니다(수령 → 확인 → 재조회 검증, 자동 실행은 하루 6회 / 간격 10분의 쓰기 요청 제한이 적용됩니다); OfficeAce 는 그날의 보상을 한 번의 동작으로 일괄 수령합니다(매일 출석 + 신규 혜택)). 시각을 놓치면 부팅 후 자동으로 보충 출석하며, 당시 컴퓨터가 꺼져 있었다고 해서 빠지지 않습니다. 각 사의 출석 인터페이스는 멱등이므로 반복 실행해도 중복 수령되지 않습니다.", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "정해진 시각이 되면 선택한 제공자의 사용 가능한 계정으로 자동 출석합니다 (WorkBuddy 중국판은 매일 출석 체크 인터페이스, 국제판은 일일 활성 작업으로 진행합니다: 이벤트 탐지, 일일 활성 보상 수령, 무료 모델로 키핑; 小浣熊은 데스크톱 앱 일일 포인트 경로를 사용하고; AutoClaw는 공식 클라이언트의 매일 출석 작업을 사용합니다; Qoder 중국판은 이벤트 수령으로 진행하며, 이벤트가 배정되지 않은 계정은 중립적인 안내를 받습니다; Qoder 국제판은 기기 리스크 관리 신원(로컬 Qoder 클라이언트 / qodercli의 UMID 컴포넌트로 생성)을 먼저 갖춰야 「매일 100 Credits」 이벤트가 보이며, 컴포넌트가 없으면 오류 대신 명확한 설명이 표시됩니다; Trae는 SOLO의 매일 출석 포인트를 수령하며(자연일 0시 기준 초기화), 업스트림이 해당 계정에 이벤트를 열지 않았거나 자격 증명에 기기 번호가 없으면 오류 대신 「미수령 + 구체적 사유」가 표시됩니다; Loomy는 매일 계정당 최초 로그인 포인트를 한 번 적립합니다; KukuAI는 「무료 포인트 받기」 일일 작업을 수령합니다; OfficeAce 는 그날의 보상을 한 번의 동작으로 일괄 수령합니다(매일 출석 + 신규 혜택)). 시각을 놓치면 부팅 후 자동으로 보충 출석하며, 당시 컴퓨터가 꺼져 있었다고 해서 빠지지 않습니다. 각 사의 출석 인터페이스는 멱등이므로 반복 실행해도 중복 수령되지 않습니다.", "到点时逐个签到,已勾 {n} / {total} 家": "정해진 시각에 하나씩 출석합니다. 선택 {n} / {total}개", "北京时间 · 错过时点开机后会自动补签": "베이징 시간 · 시간을 놓쳐도 시작 후 자동으로 보완됩니다", "去领取": "수령하러 가기", "另有 {n} 个账号不参与每日签到": "그 외 {n}개 계정은 매일 출석 체크에 참여하지 않습니다", "只领取已完成任务的奖励(幂等,重复点不会重复入账)": "완료된 작업의 보상만 수령(멱등, 반복 클릭해도 중복 적립되지 않음)", "可完成": "완료 가능", "可派出": "출발 가능", "可选 · 缺省显示时刻": "선택 · 기본값은 시간 표시", "可领奖": "수령 가능", "后端未返回定时签到数据": "백엔드가 예약 데이터를 반환하지 않았습니다", "后端未返回签到中心数据": "백엔드가 출석 체크 센터 데이터를 반환하지 않았습니다", "国际版签到需要 UMID 组件生成设备风控身份(本机未检测到)。": "국제판 출석에는 기기 리스크 관리 신원을 생성할 UMID 컴포넌트가 필요합니다 (이 기기에서 감지되지 않음).", "在途": "여행 중", "填入缺省链": "기본 체인 채우기", "填好时刻与签到范围后点「保存」;名称可以留空(界面显示时刻)": "시각과 출석 범위를 정한 뒤 「저장」을 누르세요. 이름은 비워도 됩니다(비우면 시각이 표시됩니다)", "失败 {n}": "실패 {n}", "套餐明细": "플랜 상세", "安装 Qoder 客户端或 qodercli 后即可(无需重启网关)。": "Qoder 클라이언트 또는 qodercli를 설치하면 됩니다 (게이트웨이 재시작 불필요).", "安装中…": "설치 중…", "官方客户端的每日签到任务": "공식 클라이언트의 매일 출석 작업", "定时签到": "예약 출석", "定时签到已关闭": "예약 출석이 꺼졌습니다", "尚未查询": "아직 조회하지 않음", "尚未查询任务状态": "작업 상태를 아직 조회하지 않았습니다", "巡检一次": "한 번 점검", "已保存:{label}": "저장됨: {label}", "已保存:保活模型链": "저장됨: 키핑 모델 체인", "已保存:定时条目": "저장됨: 예약 항목", "已删除定时条目": "예약 항목이 삭제되었습니다", "已完成活跃上报(连登已点亮),但活动未开启(本次没有可领的奖励)": "활동 보고 완료(연속 출석 점등), but 캠페인이 진행 중이 아닙니다(이번에 받을 보상 없음)", "已抽 {n} 次": "{n}회 추첨함", "已有结果 {checked} / 共 {total} 个账号": "결과 있음 {checked} / 전체 {total}개 계정", "已签": "출석 완료", "已领 {claimed}/{total} · 累计 {earned} 积分": "수령 {claimed}/{total} · 누적 {earned} 포인트", "已领养": "입양 완료", "已领取": "수령 완료", "带设备风控身份领取「每日 100 Credits」 · 需要 UMID 组件": "기기 리스크 관리 신원을 갖춰 「매일 100 Credits」 수령 · UMID 컴포넌트 필요", "开学季执行失败:{error}": "개학 시즌 실행 실패: {error}", "开学季执行完成:{message}": "개학 시즌 실행 완료: {message}", "开学季活动": "개학 시즌 이벤트", "开着:启用的条目按各自时刻执行": "켜짐: 활성화된 항목이 각자의 시간에 실행됩니다", "待签": "출석 대기", "待领新手福利": "수령 대기 입문 혜택", "总开关": "메인 스위치", "总开关已关闭 · 在「定时签到」页打开": "메인 스위치가 꺼져 있습니다 · \"예약 출석\" 탭에서 켜세요", "成功 {n}": "성공 {n}", "成长任务": "성장 과제", "成长任务完成({done} 项成功、{failed} 项失败),积分 +{credit} 能量 +{energy}": "성장 과제 완료(성공 {done}개, 실패 {failed}개): 크레딧 +{credit} 에너지 +{energy}", "成长任务执行失败:{error}": "성장 과제 실행 실패: {error}", "执行失败:{error}": "실행 실패: {error}", "执行并抽奖": "실행 및 추첨", "执行开学季任务并抽空抽奖机会(分享 / 对话 / 专家事件)": "개학 시즌 작업을 실행하고 추첨 기회를 모두 사용(공유/대화/전문가 이벤트)", "把缺省链填进清单,再点「保存」生效": "기본 체인을 목록에 채웁니다. 「저장」을 눌러야 반영됩니다", "抽奖机会 {n} 次": "추첨 기회 {n}회", "按住拖动调整顺序": "길게 눌러 드래그해 순서 변경", "按住拖动,调整这个模型在链里的顺序": "길게 눌러 드래그해 체인에서 이 모델의 순서를 조정합니다", "按序逐个尝试,共 {n} 个": "순서대로 시도, 총 {n}개", "按结果筛选": "결과로 필터", "探测 + 领取 + 保活 · 与定时签到同一套组合": "탐지 + 수령 + 키핑 · 예약 출석과 동일한 조합", "探测活动并领取日活奖励 · 不做保活": "이벤트를 탐지해 일일 활성 보상을 수령 · 키핑은 하지 않음", "接单 + 点亮 + 领奖(只处理已实测沉淀的任务)": "수락 + 점등 + 수령(실측으로 검증된 작업만 처리)", "搜账号 / 收益 / 错误 / 触发原因": "계정 / 수익 / 오류 / 트리거 사유 검색", "收起新建": "새 항목 닫기", "新建定时条目": "새 예약 항목", "新手福利": "입문 혜택", "新手福利有 {n} 项领取失败,可重试": "입문 혜택 {n}건의 수령에 실패했습니다. 재시도할 수 있습니다", "无": "없음", "无独立签到接口 · 每天替账号打一次首次登录积分": "독립 출석 인터페이스 없음 · 매일 계정당 최초 로그인 포인트를 한 번 적립", "无账号": "계정 없음", "暂不可领": "지금은 수령 불가", "暂不支持": "아직 미지원", "暂无启用的条目 · 点此添加": "활성화된 항목이 없습니다 · 클릭하여 추가", "有未保存的改动": "저장되지 않은 변경 사항이 있습니다", "未勾选提供商": "공급자 미선택", "未开启": "꺼짐", "未解锁": "잠김", "未领养(领养需先完成当日对话量)": "미입양(입양하려면 먼저 당일 대화량을 채워야 함)", "未领取": "미수령", "本地台账里今天还没领过;活动期内每天发一份新套餐": "로컬 기록상 오늘은 아직 받지 않았습니다. 이벤트 기간에는 매일 새 플랜이 한 건씩 지급됩니다", "本地台账里今天(北京时间)领过的套餐:{plans}": "로컬 기록상 오늘(베이징 시간) 받은 플랜: {plans}", "条启用": "개 활성화", "查询于 {time}": "조회 시각 {time}", "查询任务": "작업 조회", "查询任务树并一键点亮 / 领奖(含开学季与猫猫旅行)": "작업 트리를 조회하고 한 번에 점등/수령(개학 시즌과 고양이 여행 포함)", "查询失败:{error}": "조회 실패: {error}", "桌面端每日积分链路": "데스크톱 앱 일일 포인트 경로", "正在读取定时签到数据…": "예약 출석 데이터를 읽는 중…", "正在读取签到数据…": "출석 데이터를 읽는 중…", "每天 {time}": "매일 {time}", "每天 {time} · {scope}": "매일 {time} · {scope}", "每天时刻": "매일 시각", "每执行一次签到 · 每个账号一条明细 · 结果与收益以后端落账为准": "출석 실행마다 · 계정별 한 행 · 결과와 수익은 백엔드 기록 기준", "每日活跃任务 · 网页会话保活点亮日活,领取才加积分 · 两者可分开执行": "매일 활성 작업 · 웹 채널 세션으로 일일 활성 달성, 포인트는 수령 시 적립 · 두 가지는 따로 실행 가능", "每日登录积分 · 顺带领取会员活动 · 访客账号无积分体系(跳过)": "매일 로그인 포인트 · 회원 활동 함께 수령 · 게스트 계정은 포인트 체계 없음(건너뜀)", "每日福利 · 领取 → 确认 → 回读核实 · 按北京时间自然日重置": "일일 혜택 · 수령 → 확인 → 재조회 검증 · 베이징 시간 자연일 기준 초기화", "每日签到": "매일 출석 체크", "每条条目各有时刻与范围 · 各自当天去重 · 错过时点开机自动补签": "항목별 시간과 범위 · 항목별 당일 중복 제거 · 시작 시 자동 보완", "每账号一条明细 · 点此查看「签到记录」": "계정별 한 행 · \"출석 기록\" 열기", "没有可领套餐的账号(ZCode 未添加)。": "수령할 플랜이 있는 계정이 없습니다 (ZCode 미추가).", "没有可领福利的账号(CodeArts / ZCode 未添加)。": "혜택을 수령할 수 있는 계정이 없습니다 (CodeArts / ZCode 미추가).", "没有支持成长任务的账号(需要 WorkBuddy 国内版)。": "성장 과제를 지원하는 계정이 없습니다(WorkBuddy 중국판 필요).", "没有支持新手福利的账号": "입문 혜택을 지원하는 계정이 없습니다", "没有支持新手福利的账号 —— 目前有 Loomy、小浣熊、CodeArts 三家。": "입문 혜택을 지원하는 계정이 없습니다 — 현재 Loomy, 小浣熊, CodeArts 세 곳입니다.", "没有符合筛选条件的签到记录": "필터 조건에 맞는 출석 기록이 없습니다", "没有需要执行的任务": "실행할 작업이 없습니다", "活动福利": "이벤트 혜택", "活动(campaign)领取 · 每天 10:00 刷新": "캠페인(campaign) 수령 · 매일 10:00 새로고침", "活跃上报与保活均未成功,且活动未开启": "활동 보고와 keep-alive 모두 실패했고 캠페인도 진행 중이 아닙니다", "活跃上报完成,但保活未成功且活动未开启": "활동 보고는 완료되었지만 keep-alive에 실패했고 캠페인도 진행 중이 아닙니다", "活跃上报完成,但活动未开启": "활동 보고 완료, but 캠페인이 진행 중이 아닙니다", "活跃上报成功": "활동 보고 성공", "活跃保活失败": "활성 키핑 실패", "活跃保活完成": "활성 키핑 완료", "活跃保活完成,但活动未开启": "활성 키핑 완료, 다만 이벤트는 열리지 않았습니다", "活跃保活完成,但活跃上报失败且活动未开启": "keep-alive는 완료되었지만 활동 보고에 실패했고 캠페인도 진행 중이 아닙니다", "添加条目": "항목 추가", "添加模型": "모델 추가", "清单为空 —— 保存后恢复缺省链": "목록이 비어 있습니다 — 저장하면 기본 체인으로 복원됩니다", "清单里已经有「{name}」": "목록에 \"{name}\"이(가) 이미 있습니다", "清空失败:{error}": "비우기 실패: {error}", "清空签到记录": "출석 기록 비우기", "点「套餐明细」看领到了哪几份、什么时候生效;活动期内每天可再领": "\"플랜 상세\"에서 어떤 플랜을 받았고 언제 적용되는지 확인하세요. 이벤트 기간에는 매일 다시 받을 수 있습니다", "点击行展开账号明细 · 单账号签到不受范围限制": "행을 클릭해 계정 상세 펼치기 · 개별 계정 출석은 범위 제한을 받지 않습니다", "独立链路 · 只提供手动入口 · 不进自动签到": "독립 경로 · 수동 진입점만 제공 · 자동 출석에는 포함되지 않음", "猫猫旅行": "고양이 여행", "猫猫旅行失败:{error}": "고양이 여행 실패: {error}", "猫猫旅行失败:{message}": "고양이 여행 실패: {message}", "猫猫旅行:{message}": "고양이 여행: {message}", "用免费模型与网页会话维持账号活跃 · 不领取奖励": "무료 모델과 웹 채널 세션으로 계정 활성 유지 · 보상은 수령하지 않음", "确定删除「{name}」?删除后到点不再执行。": "\"{name}\"을(를) 삭제할까요? 삭제 후 예약 시간에 실행되지 않습니다.", "确定清空全部签到记录?清空后无法恢复。": "모든 출석 기록을 비울까요? 비운 후에는 복구할 수 없습니다.", "确定清空当前筛选出的签到记录?清空后无法恢复。": "현재 필터된 출석 기록을 비울까요? 비운 후에는 복구할 수 없습니다.", "移除 {name}": "{name} 제거", "立即全部签到": "지금 전체 출석", "签到": "출석", "签到中…": "출석 중…", "签到中心分区": "출석 센터 구역", "签到失败:{error}": "출석 실패: {error}", "签到完成:{succeeded}/{total} 成功{active},{failed} 个失败": "출석 완료: {succeeded}/{total} 성공{active}, {failed}개 실패", "签到成功": "출석 성공", "签到提供商": "출석 제공자", "签到范围": "출석 범위", "签到触发时刻": "출석 실행 시각", "签到记录": "출석 기록", "签到记录时间范围": "출석 기록 시간 범위", "签到记录表": "출석 기록 표", "累计签到记录": "누적 출석 기록", "结算于 {time}": "결산 시각 {time}", "能量 {n}": "에너지 {n}", "腾讯每日签到接口 · 仅国内版": "텐센트 매일 출석 인터페이스 · 중국판 전용", "至少勾一家才能保存(不勾等于这条条目不签到)": "저장하려면 최소 한 곳을 선택하세요(선택하지 않으면 이 항목은 아무것도 출석하지 않습니다)", "读取定时签到数据失败:{error}": "예약 출석 데이터 로드 실패: {error}", "读取签到数据失败:{error}": "출석 데이터 읽기 실패: {error}", "读取签到记录失败:{error}": "출석 기록 로드 실패: {error}", "跳过 {n}": "건너뜀 {n}", "运营活动交付(领取 → 确认 → 回读核实)· 领的是套餐赠送积分": "운영 이벤트 전달 (수령 → 확인 → 재조회 검증) · 플랜 증정 포인트를 수령합니다", "还没执行过": "아직 실행된 적 없음", "还没有定时条目 —— 点「添加条目」建一条,或到「签到中心」手动签到。": "예약 항목이 아직 없습니다 — \"항목 추가\"로 만들거나 \"출석 센터\"에서 수동으로 출석하세요.", "还没有签到记录 —— 手动签到或等定时条目执行后,明细会出现在这里。": "출석 기록이 아직 없습니다 — 수동 출석 또는 예약 실행 후 여기에 상세 내역이 표시됩니다.", "连登 {n} 天": "연속 로그인 {n}일", "部分": "일부", "重签": "재출석", "重试": "다시 시도", "限时体验套餐 · 领取需滑块验证码 · 逐份查看与领取": "기간 한정 체험 플랜 · 수령 시 슬라이더 인증 필요 · 항목별로 확인하고 수령", "限时体验套餐(start-plan),活动期内每天一份 · 领取需滑块验证码": "기간 한정 체험 플랜(start-plan), 이벤트 기간 내 매일 1회 · 수령 시 슬라이더 캡차 필요", "需真实操作": "실제 조작 필요", "非活动期": "이벤트 기간 아님", "项": "건", "领取": "수령", "领取中": "수령 중", "领取中…": "수령 중…", "领取失败": "수령 실패", "领取失败:{error}": "수령 실패: {error}", "(共 {n} 个账号)": "(전체 {n}개 계정)", "(能量 / 连登读数本次未取到)": "(에너지/연속 로그인 수치는 이번에 가져오지 못했습니다)", ",日活保活 {n} 个": ", 일일 활성 키핑 {n}개" });
+window.wbI18nDict = window.wbI18nDict || {}; Object.assign(window.wbI18nDict, { " · ": " · ", "SOLO 的 checkin_credits 领取 · 按自然日 0 点刷新": "SOLO의 checkin_credits 수령 · 자연일 0시 기준 새로고침", "UMID 组件安装失败:{error}": "UMID 컴포넌트 설치 실패: {error}", "WorkBuddy 国内版 · 查询任务树后一键点亮 / 领奖 · 含开学季与猫猫旅行 · 点击行展开明细": "WorkBuddy 중국판 · 작업 트리를 조회한 뒤 한 번에 점등/수령 · 개학 시즌 이벤트와 고양이 여행 포함 · 행을 클릭하면 상세", "WorkBuddy 国际版保活模型,按顺序回退": "WorkBuddy 국제판 키핑 모델, 순서대로 폴백", "WorkBuddy 国际版日活任务的免费模型 · 全局一份,与条目无关": "WorkBuddy 국제판 일일 활동용 무료 모델 · 전역 단일 설정, 항목과 무관", "{date}(每天 {time})": "{date} (매일 {time})", "{label} ×{count}({reason})": "{label} ×{count}({reason})", "{n} 项可完成": "{n}개 완료 가능", "{n} 项待领": "수령 대기 {n}건", "{total} 账号 · {done} 已签": "계정 {total}개 · 출석 완료 {done}개", "{total} 项任务 · {pending} 项可完成": "작업 {total}개 · 완료 가능 {pending}개", "✅ UMID 组件已安装,下轮签到即可领取国际版积分": "✅ UMID 컴포넌트를 설치했습니다. 다음 출석부터 국제판 포인트를 수령할 수 있습니다", "✅ {message}": "✅ {message}", "✅ 定时签到已开启": "✅ 예약 출석이 켜졌습니다", "✅ 开学季任务执行完成": "✅ 개학 시즌 작업 실행 완료", "✅ 成长任务执行完成:积分 +{credit} 能量 +{energy}": "✅ 성장 과제 완료: 크레딧 +{credit} 에너지 +{energy}", "✅ 新手福利领取完成,累计 {n} 积分": "✅ 입문 혜택 수령 완료, 누적 {n} 포인트", "✅ 签到完成:{succeeded}/{total} 个账号成功领取{active}": "✅ 출석 완료: {succeeded}/{total}개 계정 수령 성공{active}", "「保活模型链」是 WorkBuddy 国际版领日活时用来保活的免费模型,按顺序逐个尝试、 第一个成功即止;清空提交恢复缺省({defaults})。 当天去重 + 幂等领取:重复执行只会拿到「已领取」,不会重复加分。": "\"키핑 모델 체인\"은 WorkBuddy 국제판 일일 활동에서 계정을 활성 상태로 유지하는 무료 모델입니다. 순서대로 시도하며 첫 성공에서 멈춥니다. 비운 채로 제출하면 기본값({defaults})으로 복원됩니다. 당일 중복 제거 + 멱등한 수령: 반복 실행해도 \"이미 수령됨\"만 반환되며 포인트가 이중으로 적립되지 않습니다.", "「保活模型链」是 WorkBuddy 国际版领日活时用来保活的免费模型,按顺序逐个尝试、 第一个成功即止;清空清单并保存 = 恢复缺省链(当前缺省:{defaults})。 当天去重 + 幂等领取:重复执行只会拿到「已领取」,不会重复加分。": "\"키핑 모델 체인\"은 WorkBuddy 국제판 일일 활동에서 계정을 활성 상태로 유지하는 무료 모델입니다. 순서대로 시도하며 첫 성공에서 멈춥니다. 목록을 비우고 저장하면 기본 체인(현재 기본값: {defaults})으로 복원됩니다. 당일 중복 제거 + 멱등한 수령: 반복 실행해도 \"이미 수령됨\"만 반환되며 포인트가 이중으로 적립되지 않습니다.", "「免费领积分」的每日任务 · 逐个领取": "「무료 포인트 받기」 일일 작업 · 하나씩 수령", "一次性福利 · 签到后自动查询并领取,领完记在本机不再查上游 · 点击行展开任务清单": "일회성 혜택 · 출석 후 자동으로 조회하고 수령하며, 수령을 마치면 로컬에 기록해 업스트림을 더 조회하지 않음 · 행을 클릭해 작업 목록 펼치기", "一次领当天全部奖励(每日签到 + 新人礼) · 幂等由上游保证": "그날의 보상을 한 번에 일괄 수령합니다(매일 출석 + 신규 혜택) · 멱등성은 업스트림이 보장", "一键安装组件": "컴포넌트 한 번에 설치", "一键完成": "한 번에 완료", "一键领取({n})": "전체 수령({n})", "上次执行:{line}": "마지막 실행: {line}", "上次签到时间": "최근 출석 시간", "上次领取 {time} · 领取需通过滑块验证码": "최근 수령 {time} · 수령 시 슬라이더 캡차 필요", "下次 {date}": "다음 {date}", "下次 {date} · 点此管理条目": "다음 {date} · 클릭하여 항목 관리", "不参与每日签到:{list}。CodeArts 的一次性奖励在下方「新手福利」,它与 ZCode 的每日/套餐福利领取见「活动福利」。": "일일 출석 제외: {list}. CodeArts의 일회성 보상은 아래 \"입문 혜택\"에 있으며, CodeArts와 ZCode의 일일/플랜 혜택 수령은 \"활동 혜택\"에서 볼 수 있습니다.", "不参与每日签到:{list}。CodeArts 的一次性奖励在下方「新手福利」,它的每日福利就在上方「每日签到」里;ZCode 的套餐领取见「活动福利」。": "일일 출석 제외: {list}. CodeArts의 일회성 보상은 아래 \"입문 혜택\"에, CodeArts의 일일 혜택은 바로 위 \"일일 출석\"에 있습니다. ZCode의 플랜 수령은 \"활동 혜택\"에서 볼 수 있습니다.", "与国内版同一套任务接口 · 站点不同": "중국판과 동일한 작업 인터페이스 · 사이트만 다름", "与国内版同一套链路 · 站点不同、令牌不通用": "중국판과 동일한 흐름 · 사이트가 다르고 토큰은 호환되지 않음", "今天已领 {n} 份": "오늘 {n}건 받음", "今天未领": "오늘 미수령", "今天(北京时间 {day})已领取 · 官方确认到账 {n} 项 · 明天可再领": "오늘(베이징 시간 {day}) 수령 완료 · 공식 확인 반영 {n}건 · 내일 다시 수령 가능", "今日已执行": "오늘 실행됨", "今日已派出": "오늘 이미 출발", "今日已领取": "오늘 수령 완료", "今日签到": "오늘 출석", "今日签到进度": "오늘 출석 진행률", "从清单里移除": "목록에서 제거", "保活": "키핑", "保活 {n}": "키핑 {n}", "保活+领取": "키핑+수령", "保活中…": "키핑 중…", "保活模型链": "키핑 모델 체인", "全选": "전체 선택", "全部 {n} 家": "전체 {n}곳", "全部完成": "모두 완료", "全部查询": "전체 조회", "全部结果": "모든 결과", "全部账号均可签到": "모든 계정이 출석할 수 있습니다", "全部领取": "전체 수령 완료", "关着:开机后等到窗口起点再签,随机窗口当天生效": "꺼짐: 시작 후 윈도 시작까지 기다리며, 당일부터 랜덤 윈도가 적용", "关着:所有条目都不执行": "꺼짐: 어떤 항목도 실행되지 않습니다", "分钟 · 窗口内逐个账号随机执行,0 = 到点立即执行": "분 · 윈도 내에서 계정별로 무작위 시각에 실행, 0 = 정시에 즉시 실행", "删除失败:{error}": "삭제 실패: {error}", "删除定时条目": "예약 항목 삭제", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活并在网页通道建会话点亮日活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;CodeArts 领当日的运营福利(领取 → 确认 → 回读核实,自动执行受每天 6 次 / 间隔 10 分钟的写请求限流);OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。设了「随机前后 N 分钟」时,本轮账号在各自窗口内分散执行(窗口夹在当天 0 点到 23:59 之间),不再全部挤在同一分钟;窗口已过则立即全部执行。错过时点开机后会自动补签,不会因为当时没开机而漏掉(可在「启动补签」关掉,改为等到窗口起点)。各家签到接口都是幂等的,重复执行不会重复领取。": "시간이 되면 선택한 제공자의 사용 가능한 계정으로 출석합니다(WorkBuddy 중국판은 일일 출석 API, 국제판은 데일리 액티브 작업: 액티비티 탐지·일일 보상 수령·무료 모델로 키프얼라이브와 웹 세션으로 연속일 점등. 라쿤은 데스크톱 일일 포인트 경로, AutoClaw는 공식 클라이언트의 일일 출석 작업, Qoder 중국판은 캠페인 수령이며 캠페인이 없는 계정에는 중립 안내를 표시, Qoder 국제판은 기기 리스크 신원(로컬 Qoder 클라이언트 / qodercli의 UMID 컴포넌트 생성)이 필요하며 컴포넌트가 없으면 오류 대신 명확한 설명을 표시합니다. Trae는 SOLO의 일일 출석 크레딧(현지 0시 리셋)을 받고, 업스트림이 계정에 캠페인을 내려주지 않았거나 자격 증명에 기기 ID가 없으면 오류 대신 \"미수령 + 사유\"를 반환합니다. Loomy는 매일 최초 로그인 포인트를 한 번 호출하고, KukuAI는 \"무료 포인트\" 일일 작업을 받고, CodeArts는 당일 운영 혜택(수령 → 확인 → 재조회, 자동 실행은 하루 6회·10분 간격 쓰기 제한)을 받고, OfficeAce는 그날의 모든 보상(일일 출석 + 신규 혜택)을 한 번에 받습니다). \"랜덤 폭 N분\"을 설정하면 해당 회차의 계정은 각자의 윈도 내(당일 0:00-23:59로 클램프)에 분산 실행되어 같은 1분에 몰리지 않습니다. 윈도가 이미 지났다면 전부 즉시 실행합니다. 놓친 회차는 시작 후 보충되므로 전원이 꺼져 있었다고 해서 사라지지 않습니다(\"시작 시 보충\"을 끄면 윈도 시작까지 기다립니다). 각 제공자의 출석 API는 멱등이며 반복 실행해도 이중 수령되지 않습니다.", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;CodeArts 领当日的运营福利(领取 → 确认 → 回读核实,自动执行受每天 6 次 / 间隔 10 分钟的写请求限流);OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "정해진 시각이 되면 선택한 제공자의 사용 가능한 계정으로 자동 출석합니다 (WorkBuddy 중국판은 매일 출석 체크 인터페이스, 국제판은 일일 활성 작업으로 진행합니다: 이벤트 탐지, 일일 활성 보상 수령, 무료 모델로 키핑; 小浣熊은 데스크톱 앱 일일 포인트 경로를 사용하고; AutoClaw는 공식 클라이언트의 매일 출석 작업을 사용합니다; Qoder 중국판은 이벤트 수령으로 진행하며, 이벤트가 배정되지 않은 계정은 중립적인 안내를 받습니다; Qoder 국제판은 기기 리스크 관리 신원(로컬 Qoder 클라이언트 / qodercli의 UMID 컴포넌트로 생성)을 먼저 갖춰야 「매일 100 Credits」 이벤트가 보이며, 컴포넌트가 없으면 오류 대신 명확한 설명이 표시됩니다; Trae는 SOLO의 매일 출석 포인트를 수령하며(자연일 0시 기준 초기화), 업스트림이 해당 계정에 이벤트를 열지 않았거나 자격 증명에 기기 번호가 없으면 오류 대신 「미수령 + 구체적 사유」가 표시됩니다; Loomy는 매일 계정당 최초 로그인 포인트를 한 번 적립합니다; KukuAI는 「무료 포인트 받기」 일일 작업을 수령합니다; CodeArts는 당일 운영 혜택을 수령합니다(수령 → 확인 → 재조회 검증, 자동 실행은 하루 6회 / 간격 10분의 쓰기 요청 제한이 적용됩니다); OfficeAce 는 그날의 보상을 한 번의 동작으로 일괄 수령합니다(매일 출석 + 신규 혜택)). 시각을 놓치면 부팅 후 자동으로 보충 출석하며, 당시 컴퓨터가 꺼져 있었다고 해서 빠지지 않습니다. 각 사의 출석 인터페이스는 멱등이므로 반복 실행해도 중복 수령되지 않습니다.", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "정해진 시각이 되면 선택한 제공자의 사용 가능한 계정으로 자동 출석합니다 (WorkBuddy 중국판은 매일 출석 체크 인터페이스, 국제판은 일일 활성 작업으로 진행합니다: 이벤트 탐지, 일일 활성 보상 수령, 무료 모델로 키핑; 小浣熊은 데스크톱 앱 일일 포인트 경로를 사용하고; AutoClaw는 공식 클라이언트의 매일 출석 작업을 사용합니다; Qoder 중국판은 이벤트 수령으로 진행하며, 이벤트가 배정되지 않은 계정은 중립적인 안내를 받습니다; Qoder 국제판은 기기 리스크 관리 신원(로컬 Qoder 클라이언트 / qodercli의 UMID 컴포넌트로 생성)을 먼저 갖춰야 「매일 100 Credits」 이벤트가 보이며, 컴포넌트가 없으면 오류 대신 명확한 설명이 표시됩니다; Trae는 SOLO의 매일 출석 포인트를 수령하며(자연일 0시 기준 초기화), 업스트림이 해당 계정에 이벤트를 열지 않았거나 자격 증명에 기기 번호가 없으면 오류 대신 「미수령 + 구체적 사유」가 표시됩니다; Loomy는 매일 계정당 최초 로그인 포인트를 한 번 적립합니다; KukuAI는 「무료 포인트 받기」 일일 작업을 수령합니다; OfficeAce 는 그날의 보상을 한 번의 동작으로 일괄 수령합니다(매일 출석 + 신규 혜택)). 시각을 놓치면 부팅 후 자동으로 보충 출석하며, 당시 컴퓨터가 꺼져 있었다고 해서 빠지지 않습니다. 각 사의 출석 인터페이스는 멱등이므로 반복 실행해도 중복 수령되지 않습니다.", "到点时逐个签到,已勾 {n} / {total} 家": "정해진 시각에 하나씩 출석합니다. 선택 {n} / {total}개", "北京时间 · 错过时点开机后会自动补签": "베이징 시간 · 시간을 놓쳐도 시작 후 자동으로 보완됩니다", "去领取": "수령하러 가기", "另有 {n} 个账号不参与每日签到": "그 외 {n}개 계정은 매일 출석 체크에 참여하지 않습니다", "只领取已完成任务的奖励(幂等,重复点不会重复入账)": "완료된 작업의 보상만 수령(멱등, 반복 클릭해도 중복 적립되지 않음)", "可完成": "완료 가능", "可派出": "출발 가능", "可选 · 缺省显示时刻": "선택 · 기본값은 시간 표시", "可领奖": "수령 가능", "后端未返回定时签到数据": "백엔드가 예약 데이터를 반환하지 않았습니다", "后端未返回签到中心数据": "백엔드가 출석 체크 센터 데이터를 반환하지 않았습니다", "启动补签": "시작 시 보충", "启动补签已关闭": "시작 시 보충을 껐습니다", "启动补签已开启": "시작 시 보충을 켰습니다", "国际版签到需要 UMID 组件生成设备风控身份(本机未检测到)。": "국제판 출석에는 기기 리스크 관리 신원을 생성할 UMID 컴포넌트가 필요합니다 (이 기기에서 감지되지 않음).", "在途": "여행 중", "填入缺省链": "기본 체인 채우기", "填好时刻与签到范围后点「保存」;名称可以留空(界面显示时刻)": "시각과 출석 범위를 정한 뒤 「저장」을 누르세요. 이름은 비워도 됩니다(비우면 시각이 표시됩니다)", "失败 {n}": "실패 {n}", "套餐明细": "플랜 상세", "安装 Qoder 客户端或 qodercli 后即可(无需重启网关)。": "Qoder 클라이언트 또는 qodercli를 설치하면 됩니다 (게이트웨이 재시작 불필요).", "安装中…": "설치 중…", "官方客户端的每日签到任务": "공식 클라이언트의 매일 출석 작업", "定时签到": "예약 출석", "定时签到已关闭": "예약 출석이 꺼졌습니다", "尚未查询": "아직 조회하지 않음", "尚未查询任务状态": "작업 상태를 아직 조회하지 않았습니다", "巡检一次": "한 번 점검", "已保存:{label}": "저장됨: {label}", "已保存:保活模型链": "저장됨: 키핑 모델 체인", "已保存:定时条目": "저장됨: 예약 항목", "已删除定时条目": "예약 항목이 삭제되었습니다", "已完成活跃上报(连登已点亮),但活动未开启(本次没有可领的奖励)": "활동 보고 완료(연속 출석 점등), but 캠페인이 진행 중이 아닙니다(이번에 받을 보상 없음)", "已抽 {n} 次": "{n}회 추첨함", "已有结果 {checked} / 共 {total} 个账号": "결과 있음 {checked} / 전체 {total}개 계정", "已签": "출석 완료", "已领 {claimed}/{total} · 累计 {earned} 积分": "수령 {claimed}/{total} · 누적 {earned} 포인트", "已领养": "입양 완료", "已领取": "수령 완료", "带设备风控身份领取「每日 100 Credits」 · 需要 UMID 组件": "기기 리스크 관리 신원을 갖춰 「매일 100 Credits」 수령 · UMID 컴포넌트 필요", "开学季执行失败:{error}": "개학 시즌 실행 실패: {error}", "开学季执行完成:{message}": "개학 시즌 실행 완료: {message}", "开学季活动": "개학 시즌 이벤트", "开着:启用的条目按各自时刻执行": "켜짐: 활성화된 항목이 각자의 시간에 실행됩니다", "开着:开机后今天没签过的条目立刻补签,不看随机窗口": "켜짐: 시작 직후 오늘 아직 실행하지 않은 스케줄을 랜덤 윈도를 무시하고 즉시 보충", "待签": "출석 대기", "待领新手福利": "수령 대기 입문 혜택", "总开关": "메인 스위치", "总开关已关闭 · 在「定时签到」页打开": "메인 스위치가 꺼져 있습니다 · \"예약 출석\" 탭에서 켜세요", "成功 {n}": "성공 {n}", "成长任务": "성장 과제", "成长任务完成({done} 项成功、{failed} 项失败),积分 +{credit} 能量 +{energy}": "성장 과제 완료(성공 {done}개, 실패 {failed}개): 크레딧 +{credit} 에너지 +{energy}", "成长任务执行失败:{error}": "성장 과제 실행 실패: {error}", "执行失败:{error}": "실행 실패: {error}", "执行并抽奖": "실행 및 추첨", "执行开学季任务并抽空抽奖机会(分享 / 对话 / 专家事件)": "개학 시즌 작업을 실행하고 추첨 기회를 모두 사용(공유/대화/전문가 이벤트)", "把缺省链填进清单,再点「保存」生效": "기본 체인을 목록에 채웁니다. 「저장」을 눌러야 반영됩니다", "抽奖机会 {n} 次": "추첨 기회 {n}회", "按住拖动调整顺序": "길게 눌러 드래그해 순서 변경", "按住拖动,调整这个模型在链里的顺序": "길게 눌러 드래그해 체인에서 이 모델의 순서를 조정합니다", "按序逐个尝试,共 {n} 个": "순서대로 시도, 총 {n}개", "按结果筛选": "결과로 필터", "探测 + 领取 + 保活 · 与定时签到同一套组合": "탐지 + 수령 + 키핑 · 예약 출석과 동일한 조합", "探测活动并领取日活奖励 · 不做保活": "이벤트를 탐지해 일일 활성 보상을 수령 · 키핑은 하지 않음", "接单 + 点亮 + 领奖(只处理已实测沉淀的任务)": "수락 + 점등 + 수령(실측으로 검증된 작업만 처리)", "搜账号 / 收益 / 错误 / 触发原因": "계정 / 수익 / 오류 / 트리거 사유 검색", "收起新建": "새 항목 닫기", "新建定时条目": "새 예약 항목", "新手福利": "입문 혜택", "新手福利有 {n} 项领取失败,可重试": "입문 혜택 {n}건의 수령에 실패했습니다. 재시도할 수 있습니다", "无": "없음", "无独立签到接口 · 每天替账号打一次登录信息(即当日魔粒)": "전용 체크인 API 없음 · 하루에 한 번 계정 대신 로그인 정보 엔드포인트를 호출(그것이 당일 마립)", "无独立签到接口 · 每天替账号打一次首次登录积分": "독립 출석 인터페이스 없음 · 매일 계정당 최초 로그인 포인트를 한 번 적립", "无账号": "계정 없음", "暂不可领": "지금은 수령 불가", "暂不支持": "아직 미지원", "暂无启用的条目 · 点此添加": "활성화된 항목이 없습니다 · 클릭하여 추가", "有未保存的改动": "저장되지 않은 변경 사항이 있습니다", "未勾选提供商": "공급자 미선택", "未开启": "꺼짐", "未解锁": "잠김", "未领养(领养需先完成当日对话量)": "미입양(입양하려면 먼저 당일 대화량을 채워야 함)", "未领取": "미수령", "本地台账里今天还没领过;活动期内每天发一份新套餐": "로컬 기록상 오늘은 아직 받지 않았습니다. 이벤트 기간에는 매일 새 플랜이 한 건씩 지급됩니다", "本地台账里今天(北京时间)领过的套餐:{plans}": "로컬 기록상 오늘(베이징 시간) 받은 플랜: {plans}", "条启用": "개 활성화", "查询于 {time}": "조회 시각 {time}", "查询任务": "작업 조회", "查询任务树并一键点亮 / 领奖(含开学季与猫猫旅行)": "작업 트리를 조회하고 한 번에 점등/수령(개학 시즌과 고양이 여행 포함)", "查询失败:{error}": "조회 실패: {error}", "桌面端每日积分链路": "데스크톱 앱 일일 포인트 경로", "正在读取定时签到数据…": "예약 출석 데이터를 읽는 중…", "正在读取签到数据…": "출석 데이터를 읽는 중…", "每天 {time}": "매일 {time}", "每天 {time} · {scope}": "매일 {time} · {scope}", "每天 {time} · 随机前后 {n} 分钟 · {scope}": "매일 {time} ± {n}분 · {scope}", "每天时刻": "매일 시각", "每执行一次签到 · 每个账号一条明细 · 结果与收益以后端落账为准": "출석 실행마다 · 계정별 한 행 · 결과와 수익은 백엔드 기록 기준", "每日活跃任务 · 网页会话保活点亮日活,领取才加积分 · 两者可分开执行": "매일 활성 작업 · 웹 채널 세션으로 일일 활성 달성, 포인트는 수령 시 적립 · 두 가지는 따로 실행 가능", "每日登录积分 · 顺带领取会员活动 · 访客账号无积分体系(跳过)": "매일 로그인 포인트 · 회원 활동 함께 수령 · 게스트 계정은 포인트 체계 없음(건너뜀)", "每日福利 · 领取 → 确认 → 回读核实 · 按北京时间自然日重置": "일일 혜택 · 수령 → 확인 → 재조회 검증 · 베이징 시간 자연일 기준 초기화", "每日签到": "매일 출석 체크", "每条条目各有时刻与范围 · 各自当天去重 · 错过时点开机自动补签": "항목별 시간과 범위 · 항목별 당일 중복 제거 · 시작 시 자동 보완", "每账号一条明细 · 点此查看「签到记录」": "계정별 한 행 · \"출석 기록\" 열기", "没有可领套餐的账号(ZCode 未添加)。": "수령할 플랜이 있는 계정이 없습니다 (ZCode 미추가).", "没有可领福利的账号(CodeArts / ZCode 未添加)。": "혜택을 수령할 수 있는 계정이 없습니다 (CodeArts / ZCode 미추가).", "没有支持成长任务的账号(需要 WorkBuddy 国内版)。": "성장 과제를 지원하는 계정이 없습니다(WorkBuddy 중국판 필요).", "没有支持新手福利的账号": "입문 혜택을 지원하는 계정이 없습니다", "没有支持新手福利的账号 —— 目前有 Loomy、小浣熊、CodeArts 三家。": "입문 혜택을 지원하는 계정이 없습니다 — 현재 Loomy, 小浣熊, CodeArts 세 곳입니다.", "没有符合筛选条件的签到记录": "필터 조건에 맞는 출석 기록이 없습니다", "没有需要执行的任务": "실행할 작업이 없습니다", "活动福利": "이벤트 혜택", "活动(campaign)领取 · 每天 10:00 刷新": "캠페인(campaign) 수령 · 매일 10:00 새로고침", "活跃上报与保活均未成功,且活动未开启": "활동 보고와 keep-alive 모두 실패했고 캠페인도 진행 중이 아닙니다", "活跃上报完成,但保活未成功且活动未开启": "활동 보고는 완료되었지만 keep-alive에 실패했고 캠페인도 진행 중이 아닙니다", "活跃上报完成,但活动未开启": "활동 보고 완료, but 캠페인이 진행 중이 아닙니다", "活跃上报成功": "활동 보고 성공", "活跃保活失败": "활성 키핑 실패", "活跃保活完成": "활성 키핑 완료", "活跃保活完成,但活动未开启": "활성 키핑 완료, 다만 이벤트는 열리지 않았습니다", "活跃保活完成,但活跃上报失败且活动未开启": "keep-alive는 완료되었지만 활동 보고에 실패했고 캠페인도 진행 중이 아닙니다", "添加条目": "항목 추가", "添加模型": "모델 추가", "清单为空 —— 保存后恢复缺省链": "목록이 비어 있습니다 — 저장하면 기본 체인으로 복원됩니다", "清单里已经有「{name}」": "목록에 \"{name}\"이(가) 이미 있습니다", "清空失败:{error}": "비우기 실패: {error}", "清空签到记录": "출석 기록 비우기", "点「套餐明细」看领到了哪几份、什么时候生效;活动期内每天可再领": "\"플랜 상세\"에서 어떤 플랜을 받았고 언제 적용되는지 확인하세요. 이벤트 기간에는 매일 다시 받을 수 있습니다", "点击行展开账号明细 · 单账号签到不受范围限制": "행을 클릭해 계정 상세 펼치기 · 개별 계정 출석은 범위 제한을 받지 않습니다", "独立链路 · 只提供手动入口 · 不进自动签到": "독립 경로 · 수동 진입점만 제공 · 자동 출석에는 포함되지 않음", "猫猫旅行": "고양이 여행", "猫猫旅行失败:{error}": "고양이 여행 실패: {error}", "猫猫旅行失败:{message}": "고양이 여행 실패: {message}", "猫猫旅行:{message}": "고양이 여행: {message}", "用免费模型与网页会话维持账号活跃 · 不领取奖励": "무료 모델과 웹 채널 세션으로 계정 활성 유지 · 보상은 수령하지 않음", "确定删除「{name}」?删除后到点不再执行。": "\"{name}\"을(를) 삭제할까요? 삭제 후 예약 시간에 실행되지 않습니다.", "确定清空全部签到记录?清空后无法恢复。": "모든 출석 기록을 비울까요? 비운 후에는 복구할 수 없습니다.", "确定清空当前筛选出的签到记录?清空后无法恢复。": "현재 필터된 출석 기록을 비울까요? 비운 후에는 복구할 수 없습니다.", "移除 {name}": "{name} 제거", "立即全部签到": "지금 전체 출석", "签到": "출석", "签到中…": "출석 중…", "签到中心分区": "출석 센터 구역", "签到失败:{error}": "출석 실패: {error}", "签到完成:{succeeded}/{total} 成功{active},{failed} 个失败": "출석 완료: {succeeded}/{total} 성공{active}, {failed}개 실패", "签到成功": "출석 성공", "签到提供商": "출석 제공자", "签到范围": "출석 범위", "签到触发时刻": "출석 실행 시각", "签到记录": "출석 기록", "签到记录时间范围": "출석 기록 시간 범위", "签到记录表": "출석 기록 표", "累计签到记录": "누적 출석 기록", "结算于 {time}": "결산 시각 {time}", "能量 {n}": "에너지 {n}", "腾讯每日签到接口 · 仅国内版": "텐센트 매일 출석 인터페이스 · 중국판 전용", "至少勾一家才能保存(不勾等于这条条目不签到)": "저장하려면 최소 한 곳을 선택하세요(선택하지 않으면 이 항목은 아무것도 출석하지 않습니다)", "读取定时签到数据失败:{error}": "예약 출석 데이터 로드 실패: {error}", "读取签到数据失败:{error}": "출석 데이터 읽기 실패: {error}", "读取签到记录失败:{error}": "출석 기록 로드 실패: {error}", "跳过 {n}": "건너뜀 {n}", "运营活动交付(领取 → 确认 → 回读核实)· 领的是套餐赠送积分": "운영 이벤트 전달 (수령 → 확인 → 재조회 검증) · 플랜 증정 포인트를 수령합니다", "还没执行过": "아직 실행된 적 없음", "还没有定时条目 —— 点「添加条目」建一条,或到「签到中心」手动签到。": "예약 항목이 아직 없습니다 — \"항목 추가\"로 만들거나 \"출석 센터\"에서 수동으로 출석하세요.", "还没有签到记录 —— 手动签到或等定时条目执行后,明细会出现在这里。": "출석 기록이 아직 없습니다 — 수동 출석 또는 예약 실행 후 여기에 상세 내역이 표시됩니다.", "连登 {n} 天": "연속 로그인 {n}일", "部分": "일부", "重签": "재출석", "重试": "다시 시도", "限时体验套餐 · 领取需滑块验证码 · 逐份查看与领取": "기간 한정 체험 플랜 · 수령 시 슬라이더 인증 필요 · 항목별로 확인하고 수령", "限时体验套餐(start-plan),活动期内每天一份 · 领取需滑块验证码": "기간 한정 체험 플랜(start-plan), 이벤트 기간 내 매일 1회 · 수령 시 슬라이더 캡차 필요", "随机前后": "랜덤 폭", "需真实操作": "실제 조작 필요", "非活动期": "이벤트 기간 아님", "项": "건", "领取": "수령", "领取中": "수령 중", "领取中…": "수령 중…", "领取失败": "수령 실패", "领取失败:{error}": "수령 실패: {error}", "(共 {n} 个账号)": "(전체 {n}개 계정)", "(能量 / 连登读数本次未取到)": "(에너지/연속 로그인 수치는 이번에 가져오지 못했습니다)", ",日活保活 {n} 个": ", 일일 활성 키핑 {n}개" });
diff --git a/desktop-tauri/ui/i18n/pt-BR/add-account.js b/desktop-tauri/ui/i18n/pt-BR/add-account.js
index e1a4972c..da9d29e4 100644
--- a/desktop-tauri/ui/i18n/pt-BR/add-account.js
+++ b/desktop-tauri/ui/i18n/pt-BR/add-account.js
@@ -1,2 +1,2 @@
/* Agent2API 词典构建产物:pt-BR/add-account —— 由 desktop-tauri/i18n/build.mjs 生成,请勿手改;源头是 i18n-src/*.json */
-window.wbI18nDict = window.wbI18nDict || {}; Object.assign(window.wbI18nDict, { " · 模型 {head}{rest}": " · Modelos: {head}{rest}", " 等 {n} 个": " ({n} no total)", "1// 开头的 Google refresh token(也可直接粘贴 refresh_token=… 整行)": "Google refresh token começando com 1// (também pode colar a linha refresh_token=… inteira)", "11 位大陆手机号": "Celular da China continental (11 dígitos)", "1~64 个字符,账号列表里按它分组显示": "1 a 64 caracteres; na lista de contas, as contas são agrupadas por ele", "6 位数字": "6 dígitos", "
没有可自动领的活动": "Nenhuma campanha pode ser resgatada automaticamente", "领到的是套餐赠送积分,不会增加福利模型的 token 池;": "
O que você recebe são pontos de brinde do plano, que não aumentam o pool de tokens dos modelos de benefício; ", "Anthropic 兼容端点在 https://api.deepseek.com/anthropic(协议换 anthropic 时填它)": "O endpoint compatível com Anthropic é https://api.deepseek.com/anthropic (preencha-o ao trocar o protocolo para anthropic)", "Anthropic 协议填根地址,不要带 /v1": "No protocolo Anthropic, preencha o endereço raiz, sem /v1", "Antigravity": "Antigravity", "AutoClaw 国内版": "AutoClaw edição da China", "AutoClaw 国际版": "AutoClaw edição internacional", "BDUSS 必填;请粘贴**完整 Cookie**(Cookie 编辑器一键导出即可)—— 其中 **PTOKEN 必须保留**,网关要用它向百度换发 KukuAI 业务会话令牌,缺了它模型刷新会报「未登录」。支持整段 Cookie 头、Cookie 编辑器导出的 JSON 数组,或 {BDUSS, STOKEN} 对象。KukuAI 没有刷新机制,登录态过期后重新粘贴即可。": "BDUSS é obrigatório; cole o **Cookie completo** (um editor de Cookie exporta com um clique) — o **PTOKEN deve ser mantido**, pois o gateway o usa para trocar com o Baidu por um token de sessão de negócio do KukuAI; sem ele, a atualização de modelos reporta \"não conectado\". São aceitos o cabeçalho Cookie inteiro, um array JSON exportado por um editor de Cookie, ou um objeto {BDUSS, STOKEN}. O KukuAI não tem mecanismo de atualização; quando a sessão de login expirar, basta colar de novo.", "BDUSS=…; STOKEN=…(或 Cookie 编辑器导出的 JSON)": "BDUSS=…; STOKEN=… (ou o JSON exportado por um editor de Cookie)", "CatPaw 的 X-Passport-Token(登录态 Cookie)": "X-Passport-Token do CatPaw (Cookie da sessão de login)", "Cline Pass 的 API Key 在 app.cline.bot 获取(订阅制);端点为 OpenAI 兼容,模型清单以 Cline 控制台为准,模型名在模型管理里按裸名添加(如 glm-5.2 / kimi-k2.7-code / deepseek-v4-pro);上游按客户端形态校验,所需的客户端请求头已随卡预置": "Obtenha a API Key do Cline Pass em app.cline.bot (por assinatura); o endpoint é compatível com OpenAI, o catálogo de modelos segue o console da Cline e os nomes dos modelos são adicionados no gerenciamento de modelos como nomes simples, sem prefixo (ex.: glm-5.2 / kimi-k2.7-code / deepseek-v4-pro); o upstream valida o formato do cliente, e os cabeçalhos de requisição do cliente necessários já vêm predefinidos neste cartão", "Cloud-IDE-JWT(三段点分)": "Cloud-IDE-JWT (três segmentos separados por ponto)", "Command Code": "Command Code", "JWT(三段点分;也可直接粘贴 Bearer 整行或 data.bin 内容)": "JWT (três partes separadas por pontos; também pode colar a linha Bearer inteira ou o conteúdo do data.bin)", "JWT(三段点分;也可直接粘贴 chatglm_token=… 整行)": "JWT (três partes separadas por ponto; colar a linha chatglm_token=… inteira também funciona)", "MonkeyCode": "MonkeyCode", "MonkeyCode 国际版": "MonkeyCode edição internacional", "NVIDIA NIM 托管端点,Key 在 integrate.api.nvidia.com 申请": "Endpoint gerenciado do NVIDIA NIM; solicite a Key em integrate.api.nvidia.com", "OfficeAce 果办": "OfficeAce", "accessToken 是 Accio 的登录凭证(一长串不透明 token,不是 JWT);refreshToken 可选,填了之后到期能自动续期。请填写 {label}账号的凭证 —— {siteNote}(最容易拿到的办法:直接用上方的「网页登录」,不需要手工找 token。)": "accessToken é a credencial de login do Accio (um token opaco bem longo, não é JWT); refreshToken é opcional e, se preenchido, permite renovação automática ao expirar. Preencha a credencial da conta {label} — {siteNote} (a forma mais fácil de obter: use o \"Login web\" acima; não é preciso procurar o token manualmente.)", "accessToken 是 Trae 的 Cloud-IDE-JWT(三段点分),refreshToken 用于到期自动续期(本家 refreshToken 一次一换:换发一次旧的即作废,所以两份程序别同时刷同一个账号)。
手工粘贴时请连 machineId / deviceId 一起填:上游把它们与登录时上传的设备公钥绑在一起判设备,凭空换一对会撞 2xxxx 那族设备绑定拒绝。
没有这三样时的正路是用上方的「网页登录」;容器 / 远程部署形态按提示粘贴地址栏回调地址即可。": "accessToken é o Cloud-IDE-JWT do Trae (três segmentos separados por ponto) e o refreshToken serve para renovação automática ao expirar (este provedor troca o refreshToken a cada uso: assim que é trocado, o antigo é invalidado, então não atualize a mesma conta em dois programas ao mesmo tempo).
Ao colar manualmente, preencha também machineId / deviceId: o upstream os vincula à chave pública do dispositivo enviada no login para identificar o dispositivo, e inventar um novo par dispara a família de rejeições de vínculo de dispositivo 2xxxx.
Sem esses três itens, o caminho correto é o \"Login web\" acima; em contêiner / implantação remota, basta colar o endereço de callback da barra de endereços conforme as instruções.", "monkeycode_ai_session 的值(也可直接粘贴整段 Cookie)": "O valor de monkeycode_ai_session (também pode colar o Cookie inteiro)", "refreshToken 可选,填了到期可自动续期;两者都能从小浣熊客户端登录态文件里取到。": "refreshToken é opcional e, se preenchido, permite renovação automática ao expirar; ambos podem ser obtidos do arquivo de sessão de login do cliente Raccoon.", "refreshToken 可选,填了可自动续期;两者都能从客户端登录态文件取到。同一个 Cline 账号两个池都能用,这里归入 {label}。": "refreshToken é opcional e, se preenchido, permite renovação automática; ambos podem ser obtidos do arquivo de sessão de login do cliente. A mesma conta Cline funciona nos dois pools; aqui ela entra em {label}.", "token 支持 enc: 前缀(Windows 上自动解密)。未填 refreshToken 无法自动续期。": "O token aceita o prefixo enc: (descriptografado automaticamente no Windows). Sem preencher o refreshToken, não é possível renovar automaticamente.", "token 是登录态 Cookie;CatPaw 没有刷新机制,过期后需在客户端重新登录。": "O token é o Cookie da sessão de login; o CatPaw não tem mecanismo de atualização, então faça login novamente no cliente após expirar.", "user_ 开头的 API Key(也可直接粘贴 Authorization: Bearer … 整行)": "API Key começando com user_ (também pode colar a linha Authorization: Bearer … inteira)", "{label} 网页登录的打开方式": "Como abrir o login web de {label}", "{label} 账号地区": "Região da conta {label}", "{label} 账号的添加方式": "Como adicionar uma conta {label}", "{name} 不是合法 JSON:{reason}": "{name} não é um JSON válido: {reason}", "{name}要粘一个 JSON 对象(形如 {sample})": "{name}: cole um objeto JSON (no formato {sample})", "{n} 个账号": "{n} contas", "{n} 个账号,点击添加": "{n} contas, clique para adicionar", "{seconds}s 后重发": "Reenviar em {seconds}s", "✅ {label}账号已添加": "✅ Conta {label} adicionada", "✅ {label}账号已添加{name}": "✅ Conta {label} adicionada{name}", "✅ 已从 cc-switch 导入 {n} 个供应商": "✅ {n} provedores importados do cc-switch", "✅ 已创建自定义提供商「{name}」并添加账号": "✅ Provedor personalizado \"{name}\" criado e conta adicionada", "✅ 已删除自定义提供商「{name}」{accounts}{keys}": "✅ Provedor personalizado \"{name}\" excluído{accounts}{keys}", "✅ 已更新已有账号{name}(同一把 API Key 只保留一条,重复添加会合并)": "✅ Conta existente{name} atualizada (apenas uma conta por chave de API; adições repetidas são mescladas)", "✅ 登录成功,{edition}账号已加入列表": "✅ Login concluído; conta {edition} adicionada à lista", "✅ 领取成功:{planId}{period}": "✅ Resgate concluído: {planId}{period}", " 同一家可以放多把 key,按优先级轮换。": " Um mesmo provedor pode ter várias keys, rotacionadas por prioridade.", "「{name}」的账号添加功能还在开发中,敬请期待。": "A adição de contas para \"{name}\" ainda está em desenvolvimento; aguarde novidades.", "一个 Key 用遍多家模型,模型名用「厂商/模型」全称(如 deepseek/deepseek-chat)": "Uma única Key serve para vários fornecedores; use o nome completo \"fornecedor/modelo\" (ex.: deepseek/deepseek-chat)", "上游不要鉴权时留空,并勾选下面一项(留空又不勾会被当成未配置凭证)": "Deixe em branco quando o upstream não exigir autenticação e marque a opção abaixo (em branco e sem marcar é tratado como credencial não configurada)", "上游信息": "Informações do upstream", "不可领({status})": "Não resgatável ({status})", "不支持导入": "Importação não suportada", "不是有效的凭证文件:内容要是一个 JSON 对象": "Não é um arquivo de credenciais válido: o conteúdo deve ser um objeto JSON", "不是有效的凭证文件:需要包含 accessToken 与 uid": "Não é um arquivo de credenciais válido: accessToken e uid são obrigatórios", "不是自定义提供商": "Não é um provedor personalizado", "不需要 Key:转发与拉取模型都不发送鉴权头": "Não precisa de Key: nem o encaminhamento nem a busca de modelos enviam cabeçalhos de autenticação", "不需要登录:点下面的按钮,网关会直接在智谱清言换发一份访客凭证并加入账号列表(也可以先填个备注名)。访客凭证可以直接用来对话,免费额度由上游按设备发放。
注意:访客账号没有积分体系 —— 它与「会员积分」「每日登录积分」「活动领取」相关的接口一律需要登录,因此那些能力对访客会如实跳过(账号页的积分、签到中心都不显示读数)。想要积分就用「填写凭证」粘一个已登录账号的令牌,或「导入桌面端登录态」。": "Não é preciso fazer login: clique no botão abaixo e o gateway vai obter uma credencial de visitante diretamente do Zhipu Qingyan e adicioná-la à lista de contas (você pode preencher um nome de observação antes). A credencial de visitante pode ser usada para conversar imediatamente; a cota gratuita é emitida pela origem por dispositivo.
Atenção: uma conta de visitante não tem sistema de pontos — as interfaces de pontos de membro, pontos de login diário e resgate de atividades exigem login, então esses recursos são ignorados para visitantes (nenhuma leitura aparece na página de contas nem na central de check-in). Para obter pontos, use \"Preencher credenciais\" para colar o token de uma conta conectada, ou \"Importar estado de login do desktop\".", "两版账号可同时保存,各自一份模型清单(国内版与国际版是两家提供商,可分别启用与映射)。": "As contas das duas edições podem ser salvas ao mesmo tempo, cada uma com sua própria lista de modelos (as edições da China e internacional são dois provedores, que podem ser ativados e mapeados separadamente).", "中国版": "Edição da China", "今天没有需要领的活动(都已到账)": "Hoje não há campanhas para resgatar (todas já creditadas)", "今天(北京时间 {day})已试 {attempts} 次,还能试 {left} 次{next}
": "Hoje (horário de Pequim, {day}) você já tentou {attempts} vezes; restam {left} tentativas{next}
", "从别的机器(或 OfficeAce 桌面端 models.json)取三项贴进来:模型网关基址(baseUrl,形如 https://modelgw-…/v2)与 modelAppKey / modelAppSecret。这三项就能转发(网关凭据不过期);控制面临时凭据(accessKeyId 等)可选,留空则额度/自动续期不可用,但不影响转发。": "Pegue três itens de outra máquina (ou do models.json do aplicativo de desktop do OfficeAce) e cole aqui: o endereço base do gateway de modelos (baseUrl, no formato https://modelgw-…/v2) e modelAppKey / modelAppSecret. Esses três já bastam para encaminhar requisições (a credencial do gateway não expira); as credenciais temporárias do plano de controle (accessKeyId etc.) são opcionais — se ficarem em branco, a consulta de saldo e a renovação automática ficam indisponíveis, mas o encaminhamento não é afetado.", "从本机导入桌面端登录态": "Importar sessão de login do desktop desta máquina", "任务镜像 id": "id da imagem da tarefa", "余额查询": "Consulta de saldo", "使用 Google 账号登录": "Entrar com conta Google", "使用 Zai 账号登录": "Entrar com conta Zai", "使用个人访问令牌(PAT)": "Usar token de acesso pessoal (PAT)", "免费模型不用填 Key(默认勾上「该上游无需鉴权」,网关自动用匿名凭证);付费模型则填 Zen 的 API Key。免费档上游只认官方客户端形态,已默认开启「伪装 OpenCode 官方客户端」": "Modelos gratuitos não precisam de Key (a opção \"Este upstream não exige autenticação\" já vem marcada e o gateway usa credenciais anônimas automaticamente); para modelos pagos, preencha a API Key do Zen. O nível gratuito do upstream só aceita o formato do cliente oficial, e a opção \"Simular o cliente oficial do OpenCode\" já vem ativada", "内嵌窗口": "Janela embutida", "内嵌窗口打开;关窗即取消等待(Google 账号被拒时改用系统浏览器)": "Abre na janela embutida; fechar a janela cancela a espera (se a conta Google for recusada, use o navegador do sistema)", "内嵌窗口打开;完成后自动加入列表,关窗即取消等待": "Abre na janela embutida; ao concluir, entra automaticamente na lista; fechar a janela cancela a espera", "内嵌窗口打开;扫码完成后自动加入列表,关窗即取消等待": "Abre em uma janela incorporada; a conta é adicionada automaticamente após o escaneamento — fechar a janela cancela a espera", "内嵌窗口用全新环境,多账号互不影响;关窗即取消等待": "A janela embutida usa um ambiente totalmente novo, então várias contas não interferem entre si; fechar a janela cancela a espera", "内嵌窗口(推荐)": "Janela embutida (recomendado)", "准备验证…": "Preparando a verificação…", "凭据 JSON": "JSON da credencial", "凭证文件在哪?": "Onde fica o arquivo de credenciais?", "创建并添加账号": "Criar e adicionar conta", "创建这个提供商,并同时建立它的第一个账号。": "Crie este provedor e, ao mesmo tempo, sua primeira conta.", "删除功能不可用(脚本未就绪)": "Exclusão indisponível (script não está pronto)", "删除失败:{reason}": "Falha ao excluir: {reason}", "删除此提供商": "Excluir este provedor", "及 {n} 个账号": " e {n} contas", "发送中…": "Enviando…", "发送失败:{message}": "Falha ao enviar: {message}", "发送未确认:登录窗口已弹出,请在弹出的窗口中手动完成登录": "Envio não confirmado: a janela de login foi aberta; conclua o login manualmente nessa janela", "取消失败:{message}": "Falha ao cancelar: {message}", "取消等待": "Cancelar espera", "只有「内嵌窗口」能恢复第三方入口:系统浏览器里我们无法改动登录页": "Somente a \"Janela embutida\" pode restaurar os acessos de terceiros: no navegador do sistema não podemos alterar a página de login", "可选": "Opcional", "可选(cloudaicompanionProject):留空由网关自动发现": "Opcional (cloudaicompanionProject); se vazio, o gateway descobre automaticamente", "可选,展示用": "Opcional, para exibição", "可选,没有则无法自动续期": "Opcional; sem ele, não é possível renovar automaticamente", "可选,留空使用凭据里的 user_name": "Opcional; se vazio, usa o user_name da credencial", "可选,留空使用账号姓名、邮箱或令牌指纹": "Opcional; se vazio, usa o nome, o e-mail ou a impressão digital do token", "可选,留空使用账号昵称或邮箱": "Opcional; se vazio, usa o apelido ou o e-mail da conta", "可选,留空则用 key 尾号": "Opcional; se vazio, usa o final da key", "可选,留空则用 userId": "Opcional; se vazio, usa o userId", "可选,留空则用上游返回的账号名或账号 id": "Opcional; se vazio, usa o nome ou o id da conta retornados pelo upstream", "可选,留空则用凭证里的账号名": "Opcional; se vazio, usa o nome da conta na credencial", "可选,留空则用文件里的昵称": "Opcional; deixe vazio para usar o apelido do arquivo", "可选,留空则用登录名或 uid": "Opcional; se vazio, usa o nome de login ou o uid", "可选,留空则用脱敏手机号": "Opcional; se vazio, usa o celular mascarado", "可选,留空则用脱敏手机号或 userId": "Opcional; se vazio, usa o celular mascarado ou o userId", "可选,留空则用账号 uk": "Opcional; se vazio, usa o uk da conta", "可选,留空则用账号昵称": "Opcional; em branco usa o apelido da conta", "可选,留空则用账号昵称或 userId": "Opcional; deixe em branco para usar o apelido da conta ou o userId", "可选,留空则用邮箱或令牌尾号": "Opcional; se vazio, usa o e-mail ou o final do token", "可选,留空用「OfficeAce 果办」": "Opcional; se vazio, usa “OfficeAce”", "可选,留空自动生成": "Opcional; se vazio, gerado automaticamente", "可选,留空自动用昵称": "Opcional; se vazio, usa o apelido", "可选,给这个访客账号起个备注名": "Opcional; um nome de observação para esta conta de visitante", "可选,续期时带上": "Opcional; enviado na renovação", "可选,讯飞侧 userid": "Opcional; userid do lado iFlytek", "可选:发起对话必需,留空则由网关从该账号已有任务里自动发现,发现不到时之后手动补": "Opcional; necessário para iniciar uma conversa. Se vazio, o gateway descobre automaticamente nas tarefas existentes da conta; se não encontrar, preencha manualmente depois.", "可选:账号邮箱,用于展示与身份识别(换新令牌也能认回同一账号)": "Opcional; e-mail da conta, usado para exibição e identificação (a mesma conta é reconhecida mesmo ao trocar por um token novo)", "可选;UUID 形态,与凭据同生共死": "Opcional; formato UUID, vive e morre com a credencial", "可选;填了才能到期自动续期": "Opcional; preencha para renovar automaticamente ao expirar", "可选;用于去重与展示名(留空时网关会问一次上游)": "Opcional; usado para deduplicação e nome de exibição (se vazio, o gateway consulta o upstream uma vez)", "可选;用于生成账号 id 与展示名": "Opcional; usado para gerar o id e o nome de exibição da conta", "可选;纯数字串(上游只收 8–24 位数字)": "Opcional; apenas dígitos (o upstream aceita somente 8–24 dígitos)", "可领取": "Resgatável", "同一家可以混着放:有 Key 的账号与无鉴权账号各按各的规则走;无需鉴权的账号也能并存多条(各自可配不同的出网代理)": "Contas com chave e sem autenticação podem coexistir no mesmo provedor, cada uma roteada pelas próprias regras; várias contas sem autenticação também são permitidas (cada uma com seu próprio proxy de saída)", "同地址换 anthropic 协议即走它的 Claude 兼容端点。转发必须填 OpenCode Go 的 API Key(订阅制;获取模型清单不需要 Key,但发请求上游会回 401「Missing API key」)": "No mesmo endereço, troque o protocolo para anthropic e ele usará o endpoint compatível com Claude. Para encaminhar, é obrigatório preencher a API Key do OpenCode Go (por assinatura; obter a lista de modelos não exige Key, mas as requisições recebem 401 \"Missing API key\" do upstream)", "响应为空": "Resposta vazia", "商汤日日新的 OpenAI 兼容端点;余额查询走控制台账号密码(见下方「余额查询」一段)": "Endpoint compatível com OpenAI do SenseNova; a consulta de saldo usa a conta e a senha do console (veja \"Consulta de saldo\" abaixo)", "国内版": "Edição da China", "国内版与**国际版是两套独立的账号与套餐**,凭证与领取的套餐都不通用。": "A edição da China e **a edição internacional são dois conjuntos independentes de contas e planos**; as credenciais e os planos resgatados não são compartilhados.", "国内版登录页没有 Google / GitHub 入口(它用微信 / 手机号 / 邮箱登录)": "A página de login da edição da China não tem acessos Google / GitHub (o login é por WeChat / celular / e-mail)", "国内版的登录站点是 www.accio-ai.com,与国际版不是同一站。": "O site de login da edição da China é www.accio-ai.com, diferente do site da edição internacional.", "国内版(WorkBuddy)": "Edição da China (WorkBuddy)", "国内站为 https://api.siliconflow.cn/v1": "O site da China é https://api.siliconflow.cn/v1", "国内站(minimaxi.com);OpenAI 兼容地址为 https://api.minimaxi.com/v1": "Site da China (minimaxi.com); o endereço compatível com OpenAI é https://api.minimaxi.com/v1", "国际版": "Edição internacional", "国际版 z.ai 的 Coding 套餐;OpenAI 兼容地址为 https://api.z.ai/api/coding/paas/v4": "Plano Coding do z.ai da edição internacional; o endereço compatível com OpenAI é https://api.z.ai/api/coding/paas/v4", "国际版与国内版是**两套独立的账号**(同一账号体系的两个站点),凭证不通用。": "As edições internacional e da China são **dois conjuntos independentes de contas** (dois sites do mesmo sistema de contas); as credenciais não são compartilhadas.", "国际版与国内版账号体系独立,请填国际版的凭证。未填 refreshToken 无法自动续期。": "As edições internacional e da China têm sistemas de contas independentes; preencha a credencial da edição internacional. Sem preencher o refreshToken, não é possível renovar automaticamente.", "国际版登录页默认只显示邮箱登录,勾选后恢复 Google / GitHub / X 入口": "A página de login da edição internacional mostra por padrão apenas o login por e-mail; marcar a opção restaura os acessos Google / GitHub / X", "国际版的推理站点是 api.z.ai,与国内版不是同一站;套餐也各自独立。": "O site de inferência da edição internacional é api.z.ai, diferente do site da edição da China; os planos também são independentes.", "国际版(WorkBuddy AI)": "Edição internacional (WorkBuddy AI)", "国际站 Coding 套餐;OpenAI 兼容地址为 https://api.minimax.io/v1": "Plano Coding do site internacional; o endereço compatível com OpenAI é https://api.minimax.io/v1", "在 cc-switch 里找到": "Encontradas", "在内嵌窗口里完成官方登录,成功后自动加入账号列表。": "Conclua o login oficial na janela embutida; em caso de sucesso, a conta entra automaticamente na lista de contas.", "在{label}的 Qoder 账号设置 → Integrations 生成 PAT(别填 Google / GitHub 的令牌)。两个地区的账号与凭证不通用。": "Gere um PAT nas configurações da conta Qoder do {label} → Integrations (não use um token do Google / GitHub). Contas e credenciais não são compartilhadas entre as duas regiões.", "在打开的官方授权页里用微信扫码登录(页面会直接显示二维码)。扫码成功后自动加入账号列表。": "Escaneie o QR code do WeChat na página de autorização oficial que abrir (o QR code aparece imediatamente). A conta é adicionada à lista automaticamente após a leitura bem-sucedida.", "在打开的窗口里用百度账号登录 KukuAI 主站(手机验证码 / 扫码均可),登录成功后自动加入账号列表。网关会向百度换发 KukuAI 业务会话令牌(依赖本机已安装库库AI 客户端)。": "Na janela aberta, entre no site principal do KukuAI com sua conta Baidu (código SMS ou QR code, tanto faz); após o login, a conta entra automaticamente na lista. O gateway troca com o Baidu um token de sessão de negócio do KukuAI (requer o cliente KukuAI instalado nesta máquina).", "在打开的窗口里登录 Google 账号(Antigravity 的授权页),授权完成后自动加入账号列表。": "Faça login com sua conta Google na janela que abrir (página de autorização do Antigravity); a conta é adicionada à lista automaticamente quando a autorização for concluída.", "在浏览器中打开登录页": "Abrir a página de login no navegador", "地区": "Região", "填写凭证": "Preencher credenciais", "填写凭证添加": "Preencher credenciais para adicionar", "备注名": "Rótulo", "套餐": "Plano", "如:智谱 GLM": "ex.: Zhipu GLM", "完成登录后自动加入账号列表,昵称取自上游。": "Após concluir o login, a conta entra automaticamente na lista; o apelido vem do upstream.", "官方客户端凭证目录:Windows 是 C:\\Users\\<你的用户名>\\AppData\\Local\\CodeBuddyExtension\\Data\\Public\\auth,macOS 是 ~/Library/Application Support/CodeBuddyExtension/Data/Public/auth": "Diretório de credenciais do cliente oficial: Windows — C:\\Users\\\\AppData\\Local\\CodeBuddyExtension\\Data\\Public\\auth; macOS — ~/Library/Application Support/CodeBuddyExtension/Data/Public/auth", "官方已确认到账": "Crédito confirmado oficialmente", "导入": "Importar", "导入中…": "Importando…", "导入凭证文件": "Importar arquivo de credenciais", "导入失败": "Falha na importação", "导入失败:{reason}": "Falha na importação: {reason}", "导入所选": "Importar selecionados", "导入所选({n})": "Importar selecionados ({n})", "导入桌面端登录态": "Importar sessão de login do desktop", "将打开内嵌窗口;授权完成后自动加入账号列表。关掉窗口即取消等待。授权页最后可能提示无法打开 zcode:// 链接,这是正常的 —— 结果已由服务端记下": "A janela embutida será aberta; após a autorização, a conta entra automaticamente na lista de contas. Fechar a janela cancela a espera. No final, a página de autorização pode avisar que não conseguiu abrir o link zcode:// — isso é normal; o resultado já foi registrado no servidor", "将打开内嵌窗口;授权完成后自动加入账号列表。远程面板可粘贴回调地址。关掉窗口即取消等待。链接 5 分钟内有效,超时或未点就会作废(可重新发起)": "A janela embutida será aberta; após a autorização, a conta entra automaticamente na lista de contas. No painel remoto, é possível colar o endereço de callback. Fechar a janela cancela a espera. O link é válido por 5 minutos; se expirar ou não for clicado, ele é invalidado (você pode iniciar de novo)", "将打开内嵌窗口;登录完成后自动加入账号列表。关掉窗口即取消等待": "A janela embutida será aberta; após o login, a conta entra automaticamente na lista. Fechar a janela cancela a espera", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的 Trae 账号);同机完成后自动加入,Docker / 远程面板按提示粘贴地址栏回调地址。": "A página de autorização será aberta no navegador padrão do sistema (reaproveitando a conta Trae já conectada nele); na mesma máquina, a conta entra automaticamente ao concluir. Para Docker / painel remoto, cole o endereço de callback da barra de endereços conforme as instruções.", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的 ZCode 账号);授权完成后自动加入账号列表。页面最后可能提示无法打开 zcode:// 链接,属正常现象": "A página de autorização será aberta no navegador padrão do sistema (reaproveitando a conta ZCode já conectada nele); após a autorização, a conta entra automaticamente na lista. No final, a página pode avisar que não conseguiu abrir o link zcode://; isso é normal", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的华为云账号);授权码由网关轮询云端取回,与浏览器跑在哪台机器无关,完成后自动加入账号列表": "A página de autorização será aberta no navegador padrão do sistema (reaproveitando a conta Huawei Cloud já conectada nele); o gateway consulta a nuvem em polling para obter o código de autorização, então não importa em qual máquina o navegador roda. Ao concluir, a conta entra automaticamente na lista", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的华为云账号);浏览器与网关不在同一台机器时,按上方说明把最终回调地址粘贴回面板": "A página de autorização será aberta no navegador padrão do sistema (reaproveitando a conta Huawei Cloud já conectada nele); se o navegador e o gateway não estiverem na mesma máquina, cole o endereço de callback final de volta no painel conforme as instruções acima", "将用系统默认浏览器打开登录页(会复用浏览器里已登录的 Accio 账号);完成登录后自动加入账号列表,关掉弹窗即取消等待": "A página de login será aberta no navegador padrão do sistema (reaproveitando a conta Accio já conectada nele); após o login, a conta entra automaticamente na lista; fechar a janela cancela a espera", "小米 MiMo Token Plan 套餐(新加坡站)": "Plano Token Plan do Xiaomi MiMo (site de Singapura)", "已到账": "Creditado", "已取消登录等待": "Espera de login cancelada", "已取消领取": "Resgate cancelado", "已取消验证码": "Captcha cancelado", "已填写手机号,正在发送验证码…": "Celular preenchido; enviando o código…", "已声明无需鉴权:账号会被正常选路,出网时不带任何鉴权头": "Marcada como sem necessidade de autenticação: a conta é roteada normalmente e nenhum cabeçalho de autenticação é enviado nas requisições de saída", "已导入 {ok} 个,失败 {fail} 个(失败项已标注在列表里)": "{ok} importados, {fail} com falha (os itens com falha estão marcados na lista)", "已建过 · {n} 个账号,点击继续添加": "Já criado · {n} contas, clique para adicionar mais", "已建过,点击继续添加账号": "Já criado, clique para adicionar outra conta", "已打开官方登录页,请在窗口中完成登录…": "Página de login oficial aberta; conclua o login na janela…", "已点发送,等待短信…": "Enviado; aguardando o SMS…", "已用系统默认浏览器打开登录页,请在浏览器中完成登录…": "Página de login aberta no navegador padrão do sistema; conclua o login no navegador…", "已领取,等官方确认": "Resgatado; aguardando confirmação oficial", "当前壳版本不支持 AutoClaw 网页登录,请更新应用": "Esta versão do aplicativo não suporta o login web do AutoClaw; atualize o aplicativo", "当前没有可领取的套餐(活动尚未开始)": "Nenhum plano disponível para resgate no momento (a campanha ainda não começou)", "当前环境不支持领取(桥接方法缺失)": "O resgate não é suportado neste ambiente (método de ponte ausente)", "必填,CatPaw 账号标识": "Obrigatório; identificador da conta CatPaw", "恢复 Google / GitHub 入口": "Restaurar acessos Google / GitHub", "手机号": "Celular", "手机验证码登录": "Login com código SMS", "打开 Trae SOLO 的官方授权页(trae.cn)并用你的 Trae 账号登录:授权完成后官方页面会跳回本机的一个临时端口;同机部署自动接收,Docker / 远程面板请按提示复制地址栏回调地址。": "Abra a página de autorização oficial do Trae SOLO (trae.cn) e entre com sua conta Trae: ao concluir a autorização, a página oficial redireciona de volta para uma porta temporária desta máquina; implantações na mesma máquina recebem automaticamente, e no Docker / painel remoto copie o endereço de callback da barra de endereços conforme as instruções.", "打开 Accio {label}的官方登录页({site})并用你的 Accio 账号登录:登录成功后官方页面会跳回本机;同机自动完成,Docker / 远程面板按提示粘贴回调地址即可(授权码只在本机传给网关,界面不显示明文 token)。": "Abra a página de login oficial do Accio {label} ({site}) e entre com sua conta Accio: após o login, a página oficial redireciona de volta para esta máquina; na mesma máquina tudo se completa automaticamente, e no Docker / painel remoto basta colar o endereço de callback conforme as instruções (o código de autorização é passado ao gateway apenas nesta máquina, e nenhum token em texto claro é exibido na interface).", "打开 Accio {label}登录页": "Abrir a página de login do Accio {label}", "打开 Antigravity 网页登录": "Abrir login web do Antigravity", "打开 CatPaw 网页登录": "Abrir o login web do CatPaw", "打开 Cline 授权页": "Abrir a página de autorização do Cline", "打开 CodeArts 授权页": "Abrir a página de autorização do CodeArts", "打开 Qoder 网页登录": "Abrir o login web do Qoder", "打开 Trae 授权页": "Abrir a página de autorização do Trae", "打开 ZCode {label}的官方授权页并用你的账号登录。授权结果由 ZCode 服务端记录,网关在后台自动取回凭证并加入账号列表。": "Abra a página de autorização oficial do ZCode {label} e entre com sua conta. O resultado da autorização é registrado pelo servidor do ZCode; o gateway busca a credencial em segundo plano e a adiciona à lista de contas.", "打开 ZCode {label}授权页": "Abrir a página de autorização do ZCode {label}", "打开华为云 CodeArts 的官方授权页登录:登录完成后官方页面会把浏览器带回网关自己的 /oauth/callback,网关用一次性授权码换取临时凭据并加入账号列表。
网关跑在另一台机器上时,网页端会提示把地址栏中的最终回调地址直接粘贴回面板。": "Abra a página de autorização oficial do Huawei Cloud CodeArts para entrar: após o login, a página oficial leva o navegador de volta ao /oauth/callback do próprio gateway, e o gateway troca o código de autorização de uso único por credenciais temporárias e adiciona a conta à lista.
Quando o gateway roda em outra máquina, a interface web pede para colar o endereço de callback final da barra de endereços de volta no painel.", "打开华为云授权页登录:登录完成后网关会自动轮询云端取回授权码并加入账号列表(不需要装 OfficeAce 桌面端,也无需手工回填回调地址)。": "Abra a página de autorização do Huawei Cloud e faça login: ao concluir, o gateway consulta a nuvem automaticamente para obter o código de autorização e adiciona a conta à lista (não é preciso instalar o aplicativo de desktop do OfficeAce nem colar manualmente uma URL de retorno).", "打开官方授权页完成设备码授权,登录的是{label}({site})的账号。": "Abra a página de autorização oficial e conclua a autorização por código de dispositivo; a conta usada é do {label} ({site}).", "打开授权页": "Abrir a página de autorização", "打开授权页完成确认,账号自动加入 {label}{note}": "Abra a página de autorização e confirme; a conta entra automaticamente em {label}{note}", "打开方式": "Como abrir", "打开网页登录": "Abrir login web", "探测失败:{message}": "Falha na detecção: {message}", "接入一个兼容上游": "Conectar um upstream compatível", "提交中…": "Enviando…", "搜索提供商": "Buscar provedores", "搜索提供商…": "Buscar provedores…", "整份粘贴官方插件 / CLIProxyAPI 落盘的凭据 JSON(形如 {\"codearts_provider_credential\":{…}},铺平的也行)。
必填:access_key_id、secret_access_key、security_token。要能自动续期,必须连 refresh_token 与 oauth_context 一起粘 —— 临时凭据约一小时到期,缺这半块就续不回来,只能重新登录。": "Cole o JSON de credencial inteiro gravado pelo plugin oficial / CLIProxyAPI (no formato {\"codearts_provider_credential\":{…}}; a versão achatada também serve).
Obrigatórios: access_key_id, secret_access_key, security_token.Para renovar automaticamente, é preciso colar também refresh_token e oauth_context — as credenciais temporárias expiram em cerca de uma hora, e sem essa parte não há como renovar; será preciso fazer login de novo.", "文件是{edition}凭证,已按该版本导入": "O arquivo contém credenciais da {edition} e foi importado como tal", "新建自定义提供商": "Novo provedor personalizado", "方案:{label}": "Esquema: {label}", "明文 JWT 或 auth.json 里的 enc: 加密值(自动解密)": "JWT em texto claro ou o valor criptografado enc: do auth.json (descriptografado automaticamente)", "明文 JWT(国际版账号的 access token)": "JWT em texto claro (o access token da conta da edição internacional)", "智谱 bigmodel.cn 的 Coding 套餐,Key 在 open.bigmodel.cn/usercenter/apikeys": "Plano Coding do bigmodel.cn da Zhipu; obtenha a Key em open.bigmodel.cn/usercenter/apikeys", "未知错误": "Erro desconhecido", "未能获取授权地址,请重试": "Não foi possível obter o endereço de autorização; tente novamente", "未能读取 cc-switch 数据": "Não foi possível ler os dados do cc-switch", "未领取成功": "Resgate não concluído", "本地 Ollama、OpenCode Zen 免费档这类上游要勾上,否则账号不可用": "Marque esta opção para upstreams como o Ollama local ou o nível gratuito do OpenCode Zen; caso contrário, a conta não funcionará", "本家有两个**互不替代**的凭证,按你要用的功能填,至少填一个:编码套餐 API Key 用于转发推理(打 {site})与查询窗口限额(每 N 小时 / 每周的剩余比例);jwt 用于领取套餐与查询余额(打 zcode.z.ai 的 billing 网关,官方叫 Coding Plan JWT,是一串三段点分的字符串)。余额两把都能查、但读到的东西不同:jwt 读到余额桶与套餐到期,API Key 读到窗口限额;而领取只认 jwt、转发只认 API Key。请填写 {label}账号的凭证 —— {plan}(最容易拿到的办法:直接用上方的「网页登录」—— 它会替你把这个 API Key 换好,两个凭证一起拿到。)": "Este provedor tem duas credenciais que **não se substituem**; preencha as que correspondem aos recursos que você vai usar, pelo menos uma: a API Key do Coding Plan serve para encaminhar inferência (acessa {site}) e para consultar os limites de janela (a porcentagem restante de cada janela de N horas / semanal); o jwt serve para resgatar planos e consultar saldo (acessa o gateway de billing em zcode.z.ai; oficialmente chamado Coding Plan JWT, uma string de três segmentos separados por ponto). As duas consultam saldo, mas leem coisas diferentes: o jwt lê os baldes de saldo e a expiração do plano, enquanto a API Key lê os limites de janela; e o resgate só aceita o jwt, o encaminhamento só aceita a API Key. Preencha a credencial da conta {label} — {plan} (a forma mais fácil: use o \"Login web\" acima — ele troca essa API Key por você e obtém as duas credenciais de uma vez.)", "本机 Ollama 的 OpenAI 兼容端点,无需 API Key(默认已勾上「该上游无需鉴权」,鉴权头一个都不发)": "Endpoint compatível com OpenAI do Ollama local; não precisa de API Key (a opção \"Este upstream não exige autenticação\" já vem marcada e nenhum cabeçalho de autenticação é enviado)", "本次未确认到账": "Crédito não confirmado desta vez", "条可导入": "importáveis", "条配置,其中": "configurações no cc-switch, das quais", "桌面运行时不可用(Tauri 未初始化)": "Runtime do desktop indisponível (Tauri não inicializado)", "模型网关基址": "Endereço base do gateway de modelos", "正在打开百度登录页…": "Abrindo a página de login do Baidu…", "正在扫描本机 cc-switch…": "Escaneando o cc-switch desta máquina…", "正在换发访客凭证…": "Solicitando uma credencial de visitante…", "正在添加…": "Adicionando…", "正在等待{name}登录完成;完成或取消后才能发起新的登录": "Aguardando a conclusão do login de {name}; só após concluir ou cancelar você pode iniciar um novo login", "每周": "Semanal", "每日": "Diário", "每月": "Mensal", "没有则无法自动续期": "Sem ele, não é possível renovar automaticamente", "没有匹配「{keyword}」的提供商": "Nenhum provedor corresponde a \"{keyword}\"", "添加 {name} 账号": "Adicionar conta {name}", "添加中…": "Adicionando…", "添加到 ": "Adicionar a ", "添加失败:{reason}": "Falha ao adicionar: {reason}", "添加小浣熊账号": "Adicionar conta Raccoon", "添加方式": "Forma de adicionar", "添加访客账号": "Adicionar uma conta de visitante", "添加账号": "Adicionar conta", "火山引擎 Coding 套餐;通用推理接入点为 https://ark.cn-beijing.volces.com/api/v3": "Plano Coding do Volcano Engine; o endpoint de inferência geral é https://ark.cn-beijing.volces.com/api/v3", "点击添加账号": "Clique para adicionar uma conta", "点开即预填,填 Key 接入": "Abre já preenchido; informe a Key para conectar", "点按钮后先过一次滑块验证(官方风控),随后打开登录页,登录完成即自动添加账号。
这是国际版官方唯一的登录方式;已在客户端登录过的,用「导入桌面端登录态」更快。": "Após clicar no botão, primeiro passe por uma verificação de slider (controle de risco do provedor); em seguida a página de login abre e a conta é adicionada automaticamente ao concluir o login.
Esta é a única forma oficial de login da edição internacional; se você já entrou no cliente, \"Importar sessão de login do desktop\" é mais rápido.", "用 AutoClaw 账号绑定的手机号登录:点击「获取验证码」,收到短信后填入下方并登录。验证码由本机直接提交给官方接口,界面不显示 token。": "Entre com o celular vinculado à conta AutoClaw: clique em \"Obter código\", informe o código recebido por SMS abaixo e entre. O código é enviado desta máquina diretamente à API oficial, e nenhum token é exibido na interface.", "用 CatPaw 账号完成登录(美团 passport),成功后自动加入账号列表。": "Conclua o login com sua conta CatPaw (Meituan Passport); em caso de sucesso, a conta entra automaticamente na lista.", "用 Loomy 账号绑定的手机号登录:点「获取验证码」后填入即可。这是本家最省事的入口。": "Entre com o celular vinculado à conta Loomy: clique em \"Obter código\" e informe o código. Esta é a forma mais simples neste provedor.", "用于转发;形如 apiKey.secret 两段点分(不填则这个账号不能转发)": "Usado para encaminhamento; no formato apiKey.secret, dois segmentos separados por ponto (se vazio, esta conta não pode encaminhar)", "用于领取套餐与查询余额;不填则这个账号不能领取与查余额": "Usado para resgatar planos e consultar saldo; se vazio, esta conta não pode resgatar nem consultar saldo", "用户 ID": "ID do usuário", "用绑定的手机号登录:点「获取验证码」后填入即可。这是国内版官方唯一的登录方式。": "Entre com o celular vinculado: clique em \"Obter código\" e informe o código. Esta é a única forma oficial de login da edição da China.", "留空则用提供商名称": "Se vazio, usa o nome do provedor", "登录 / 添加 {name} 账号": "Entrar / adicionar conta {name}", "登录 session(一长串)": "Sessão de login (uma string longa)", "登录中…": "Entrando…", "登录失败:{message}": "Falha no login: {message}", "登录已结束": "Login encerrado", "登录并添加": "Entrar e adicionar", "登录态文件路径:~/.box-agent/config/auth.json(Windows:C:\\Users\\<你的用户名>\\.box-agent\\config\\auth.json)": "Caminho do arquivo de sessão de login: ~/.box-agent/config/auth.json (Windows: C:\\Users\\\\.box-agent\\config\\auth.json)", "确定删除自定义提供商「{name}」?将同时删除该提供商下 {count} 个账号,删除后无法恢复。": "Excluir o provedor personalizado \"{name}\"? Isso também excluirá {count} contas desse provedor; a exclusão não pode ser desfeita.", "等待 Accio {label}登录完成…": "Aguardando a conclusão do login do Accio {label}…", "等待 CatPaw 登录完成…": "Aguardando a conclusão do login do CatPaw…", "等待 Cline 授权确认…": "Aguardando a confirmação de autorização do Cline…", "等待 CodeArts 登录完成…": "Aguardando a conclusão do login do CodeArts…", "等待 Google 授权完成…": "Aguardando a conclusão da autorização do Google…", "等待 KukuAI 登录完成…": "Aguardando a conclusão do login do KukuAI…", "等待 OfficeAce 登录完成…": "Aguardando a conclusão do login do OfficeAce…", "等待 OrcaTerm 登录完成…": "Aguardando o login no OrcaTerm…", "等待 Qoder 授权完成…": "Aguardando a conclusão da autorização do Qoder…", "等待 Trae 授权完成…": "Aguardando a conclusão da autorização do Trae…", "等待 ZCode {label}授权完成…": "Aguardando a conclusão da autorização do ZCode {label}…", "等待小浣熊登录完成…": "Aguardando a conclusão do login do Raccoon…", "等待登录完成…": "Aguardando a conclusão do login…", "等待网页登录…": "Aguardando o login web…", "粘贴 API Key": "Colar API Key", "粘贴 Accio 的 accessToken": "Colar o accessToken do Accio", "粘贴 Antigravity 的 Google refresh token(以 1// 开头;直接粘贴含 refresh_token= 的整行也行)。
这是网页登录之外的手工入口(例如从已登录的官方 IDE 里导出)。refresh token 不会过期,access token 到期由网关自动续期;令牌丢了只能重新走 Google 授权,请妥善保存。": "Cole o Google refresh token do Antigravity (começa com 1//; também pode colar a linha inteira que contém refresh_token=).
Esta é uma entrada manual além do login web (por exemplo, exportada do IDE oficial em que você já está conectado). O refresh token não expira, e o gateway renova o access token automaticamente ao expirar; se o token for perdido, só resta refazer a autorização do Google, então guarde-o bem.", "粘贴 Command Code 的 API Key(user_ 开头;从官方 CLI 的 ~/.commandcode/auth.json 或网页 studio 获取)。整行 / 带引号 / 带 Bearer 前缀地粘都行,网关会自己剥成裸 key。key 不过期、也没有续期接口,失效后重新获取即可;添加时网关会做一次轻量探活,失败不影响添加。": "Cole a API Key do Command Code (começa com user_; obtenha no ~/.commandcode/auth.json do CLI oficial ou no studio web). Colar a linha inteira / com aspas / com o prefixo Bearer funciona; o gateway extrai a key pura sozinho. A key não expira e não há API de renovação, então basta obter uma nova se ela deixar de funcionar. Ao adicionar, o gateway faz uma verificação leve de atividade; uma falha não impede a adição.", "粘贴 Cookie": "Colar Cookie", "粘贴 Google refresh token": "Colar Google refresh token", "粘贴 OrcaTerm 的 OAuth accessToken(JWT,三段点分;从桌面客户端 data.bin 或 Web 版 Cookie ot_session 获取)。直接粘贴含 Bearer / ot_session= 的整行也行,网关会自己剥成裸 token。添加后由网关自动续期(上游有续期接口),无需跟随 2 小时时效手动更换。": "Cole o accessToken OAuth do OrcaTerm (um JWT com três partes separadas por pontos; obtido do data.bin do cliente desktop ou do cookie ot_session da versão web). Também pode colar a linha inteira contendo Bearer / ot_session= — o gateway extrai apenas o token. Após adicionar, o gateway renova automaticamente (o upstream tem API de renovação), sem precisar acompanhar a expiração de 2 horas manualmente.", "粘贴 Qoder 个人访问令牌(pt-…)": "Colar o token de acesso pessoal do Qoder (pt-…)", "粘贴 accessToken": "Colar accessToken", "粘贴 access_token(一长串 JWT)": "Colar o access_token (um JWT longo)", "粘贴 session cookie": "Colar session cookie", "粘贴 token / refreshToken": "Colar token / refreshToken", "粘贴 workos:… 开头的令牌(不带前缀也会自动补上)": "Cole um token começando com workos:… (o prefixo é adicionado automaticamente se faltar)", "粘贴智谱清言的访问令牌(JWT,三段点分)。获取方式:浏览器打开 chatglm.cn 并登录后,在开发者工具的 Application → Cookies 里复制 chatglm_token 的值(也可以直接粘 chatglm_token=…; 整行)。粘贴后会先向上游校验一次,校验通过才落账号;登录账号的积分、签到能力都能用,之后由网关自动续期(上游有续期接口)。": "Cole um token de acesso do Zhipu Qingyan (um JWT com três partes separadas por ponto). Como obter: abra chatglm.cn no navegador, faça login e copie o valor do cookie chatglm_token em Application → Cookies nas ferramentas de desenvolvedor (colar a linha chatglm_token=…; inteira também funciona). O token é verificado uma vez na origem após a colagem, e a conta só é salva se passar; contas conectadas têm pontos e check-in, e o gateway renova automaticamente depois (a origem tem API de renovação).", "粘贴登录凭据": "Colar credenciais de login", "粘贴的是登录 session(同时是模型网关的 token)。Loomy 没有续期接口,session 有效期约 14 天,过期后重新登录即可。": "O que você cola é a sessão de login (que também é o token do gateway de modelos). O Loomy não tem API de renovação; a sessão vale cerca de 14 dias, então basta entrar de novo após expirar.", "粘贴网关凭据": "Colar credenciais do gateway", "粘贴网页登录态 cookie monkeycode_ai_session 的值(在浏览器里复制整段 Cookie 直接粘贴也行,网关会自己剥出值)。
{siteNote}
MonkeyCode 没有续期接口:session 有效期约 30 天(硬限制),过期后重新登录网页、再粘贴一次即可。": "Cole o valor do cookie de sessão de login web monkeycode_ai_session (copiar o Cookie inteiro no navegador e colar diretamente também funciona; o gateway extrai o valor sozinho).
{siteNote}
O MonkeyCode não tem API de renovação: a sessão vale cerca de 30 dias (limite rígido); quando expirar, entre novamente no site e cole mais uma vez.", "粘贴访问令牌": "Cole o token de acesso", "系统浏览器": "Navegador do sistema", "系统浏览器可复用已有登录态(国际版推荐);内嵌窗口更干净。": "O navegador do sistema pode reaproveitar a sessão de login existente (recomendado para a edição internacional); a janela embutida é mais limpa.", "系统浏览器打开(复用已登录的 Cline 账号);完成后自动加入列表": "Abre no navegador do sistema (reaproveita a conta Cline já conectada); ao concluir, entra automaticamente na lista", "系统浏览器打开(复用已登录的 Google 账号);完成后自动加入列表": "Abre no navegador do sistema (reutiliza a conta Google já conectada); ao concluir, entra automaticamente na lista", "系统浏览器打开(复用已登录的 Zai / Google 账号);完成后自动加入列表": "Abre no navegador do sistema (reaproveita a conta Zai / Google já conectada); ao concluir, entra automaticamente na lista", "系统浏览器打开(复用已登录的美团账号);完成后自动加入列表": "Abre no navegador do sistema (reaproveita a conta Meituan já conectada); ao concluir, entra automaticamente na lista", "系统浏览器打开(复用已登录账号);完成后自动加入列表": "Abre no navegador do sistema (reaproveita a conta já conectada); ao concluir, entra automaticamente na lista", "系统默认浏览器": "Navegador padrão do sistema", "编码套餐 API Key": "API Key do Coding Plan", "网关 Secret": "Segredo do gateway", "网页登录": "Login web", "网页登录的打开方式": "Como abrir o login web", "网页登录(Zai / Google)": "Login web (Zai / Google)", "自定义": "Personalizado", "自建聚合面板:填你自己的站点地址。余额查询用该账号的 API Key 打 {base}/v1/usage,不需要额外配置": "Painel de agregação próprio: preencha o endereço do seu site. A consulta de saldo chama {base}/v1/usage com a chave de API desta conta; sem configuração extra", "自建聚合面板:填你自己的站点地址;余额查询要另填 NewAPI 的个人访问令牌(见下方「余额查询」一段)": "Painel de agregação próprio: preencha o endereço do seu site; a consulta de saldo precisa também de um token de acesso pessoal do NewAPI (veja \"Consulta de saldo\" abaixo)", "获取风控配置失败,将直接尝试领取:{message}": "Falha ao obter a configuração de controle de risco; tentando resgatar diretamente: {message}", "获取验证码": "Obter código", "访客模式": "Modo visitante", "访客模式(免登录)": "Modo visitante (sem login)", "该上游无需鉴权(不发送鉴权头)": "Este upstream não exige autenticação (nenhum cabeçalho de autenticação é enviado)", "该提供商": "Este provedor", "该提供商账号添加功能即将上线": "A adição de contas deste provedor chega em breve", "该自定义提供商已不存在(可能已被删除),请刷新后重试": "Este provedor personalizado não existe mais (pode ter sido excluído); atualize e tente novamente", "请先选择一个自定义提供商": "Selecione primeiro um provedor personalizado", "请在弹出的滑块中完成验证(官方要求的风控步骤)": "Conclua a verificação no slider exibido (etapa de controle de risco exigida pelo provedor)", "请填写 11 位大陆手机号": "Informe um número de celular da China continental com 11 dígitos", "请填写 6 位数字验证码": "Informe o código de 6 dígitos", "请填写 Base URL": "Preencha a Base URL", "请填写 {label}": "Preencha {label}", "请填写名称": "Preencha o nome", "请完成验证…": "Conclua a verificação…", "读取 %APPDATA%/AutoClaw/auth.json 并解密,仅 Windows": "Lê e descriptografa %APPDATA%/AutoClaw/auth.json; somente no Windows", "读取 ~/.cline/data/settings/providers.json,需已在 Cline 客户端登录": "Lê ~/.cline/data/settings/providers.json; requer login no cliente Cline", "读取 ~/.meituan-catpaw/auth.json,需已在 CatPaw 客户端登录": "Lê ~/.meituan-catpaw/auth.json; requer login no cliente CatPaw", "读取本机 KukuAI 客户端登录态(%APPDATA%\\baidugenflowpro\\Network\\Cookies),需已在 KukuAI 客户端登录": "Lê a sessão de login do cliente KukuAI desta máquina (%APPDATA%\\baidugenflowpro\\Network\\Cookies); requer login no cliente KukuAI", "读取本机 OrcaTerm 客户端登录态(%APPDATA%\\com.orcaterm-desktop.app\\data.bin),需已在 OrcaTerm 客户端登录": "Lê o estado de login do cliente OrcaTerm local (%APPDATA%\\com.orcaterm-desktop.app\\data.bin); é preciso estar logado no cliente OrcaTerm", "读取本机智谱清言客户端登录态(%APPDATA%\\chatglm\\Network\\Cookies),需已在客户端登录": "Lê o estado de login do cliente 智谱清言 local (%APPDATA%\\chatglm\\Network\\Cookies); o cliente precisa estar conectado", "读本机官方客户端(Tencent WorkBuddy / WorkBuddy AI)当前登录的账号:自动定位其凭证目录里最新的登录态文件(需已在本机官方客户端登录)。导入后由网关自动续期,无需跟随 2 小时时效手动换令牌。": "Lê a conta atualmente conectada no cliente oficial (Tencent WorkBuddy / WorkBuddy AI) nesta máquina: o arquivo de sessão mais recente no diretório de credenciais é localizado automaticamente (é preciso estar conectado ao cliente oficial nesta máquina). Após a importação, o gateway renova o token automaticamente — não é preciso trocar tokens manualmente conforme a validade de 2 horas.", "读本机客户端当前登录态(明文 Cookie,无需解密)。客户端运行时 Cookies 文件被独占占用,导入前请先关闭 KukuAI 客户端。": "Lê a sessão de login atual do cliente desta máquina (Cookie em texto claro, sem descriptografia). Com o cliente em execução, o arquivo Cookies fica em uso exclusivo; feche o cliente KukuAI antes de importar.", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。": "Lê a sessão de login atual do cliente desta máquina, em tempo real a cada vez (excluir este registro não afeta a sessão de login do cliente).", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。客户端重新登录后点「刷新 Token」同步。": "Lê a sessão de login atual do cliente desta máquina, em tempo real a cada vez (excluir este registro não afeta a sessão de login do cliente). Após entrar novamente no cliente, clique em \"Atualizar Token\" para sincronizar.", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。客户端重新登录后重新导入即可。": "Lê a sessão de login atual do cliente desta máquina, em tempo real a cada vez (excluir este registro não afeta a sessão de login do cliente). Após entrar novamente no cliente, basta importar de novo.", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。用 Zai / Google 登录客户端的用户走这一条。": "Lê a sessão de login atual do cliente desta máquina, em tempo real a cada vez (excluir este registro não afeta a sessão de login do cliente). Usuários que entram no cliente com Zai / Google devem usar esta opção.", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。这一条归入 {label}。": "Lê a sessão de login atual do cliente desta máquina, em tempo real a cada vez (excluir este registro não afeta a sessão de login do cliente). Esta opção fica em {label}.", "读本机客户端当前登录的 OAuth 令牌(明文 JSON,无需解密)。导入后由网关自动续期,无需跟随客户端的 2 小时时效手动换令牌。": "Lê o token OAuth com que o cliente local está logado (JSON em texto claro, sem descriptografia). Após importar, o gateway renova automaticamente — não é preciso acompanhar a expiração de 2 horas do cliente.", "读本机客户端当前的登录态。客户端的 Cookies 是 DPAPI 加密的(Chromium os_crypt),因此仅 Windows 可用;客户端正在运行时可能读不到该文件,先退出客户端再试即可(也可改用「填写凭证」粘贴令牌)。": "Lê o estado de login atual do cliente local. Os cookies do cliente são criptografados com DPAPI (Chromium os_crypt), portanto isto funciona somente no Windows; o arquivo pode ficar ilegível enquanto o cliente está aberto — feche o cliente e tente de novo (ou use \"Preencher credenciais\" para colar um token).", "账号信息": "Informações da conta", "账号信息不完整,请刷新后重试": "Informações da conta incompletas; atualize e tente novamente", "账号已添加,但请留意:{warning}": "Conta adicionada, mas atenção: {warning}", "账号版本": "Edição da conta", "账号类型": "Tipo de conta", "账号:{name}
": "Conta: {name}
", "走 Inference Providers 路由,Key 在 hf.co/settings/tokens 创建": "Usa a rota Inference Providers; crie a Key em hf.co/settings/tokens", "还没有账号": "Ainda não há contas", "这一家当前不支持网页登录,请改用填写凭证": "Este provedor não suporta login web no momento; use \"Preencher credenciais\"", "这个账号当前没有可自动领的活动(只自动领每日登录赠送积分)": "Esta conta não tem campanhas com resgate automático no momento (apenas os pontos de brinde do login diário são resgatados automaticamente)", "这份额度走「活动套餐」通道:若转发时提示编码套餐已到期,": "Esta cota passa pelo canal \"Start Plan\": se o encaminhamento avisar que o Coding Plan expirou, ", "这里填国内站(monkeycode-ai.com)的账号:请粘贴国内站的 session。国际站(monkeycode-ai.net)是另一家 provider、另一套账号,两边的凭证不通用。": "Aqui é a conta do site da China (monkeycode-ai.com): cole a sessão do site da China. O site internacional (monkeycode-ai.net) é outro provedor, com conta própria; as credenciais não são compartilhadas entre os dois.", "这里填国际站(monkeycode-ai.net)的账号:请粘贴国际站的 session。国内站(monkeycode-ai.com)是另一家 provider、另一套账号,两边的凭证不通用。": "Aqui é a conta do site internacional (monkeycode-ai.net): cole a sessão do site internacional. O site da China (monkeycode-ai.com) é outro provedor, com conta própria; as credenciais não são compartilhadas entre os dois.", "选择 CatPaw 客户端的登录态文件 auth.json(Windows:C:\\Users\\<你的用户名>\\.meituan-catpaw\\auth.json;macOS / Linux:~/.meituan-catpaw/auth.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端。": "Selecione o arquivo de sessão de login auth.json do cliente CatPaw (Windows: C:\\Users\\\\.meituan-catpaw\\auth.json; macOS / Linux: ~/.meituan-catpaw/auth.json). Após a importação, as credenciais ficam no gateway e podem ser encaminhadas de forma independente — sem depender mais do cliente desta máquina.", "选择 Cline 客户端的登录态文件 providers.json(Windows:C:\\Users\\<你的用户名>\\.cline\\data\\settings\\providers.json;macOS / Linux:~/.cline/data/settings/providers.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端;这一条归入 {label}。": "Selecione o arquivo de sessão de login providers.json do cliente Cline (Windows: C:\\Users\\\\.cline\\data\\settings\\providers.json; macOS / Linux: ~/.cline/data/settings/providers.json). Após a importação, as credenciais ficam no gateway e podem ser encaminhadas de forma independente — sem depender mais do cliente desta máquina; este registro entra em {label}.", "选择 KukuAI 客户端的 Cookies 文件(%APPDATA%\\baidugenflowpro\\Network\\Cookies):它是**二进制** SQLite 数据库(无扩展名,不是 JSON)。导入时读的是你选中文件的副本、不和运行中的客户端抢占用,因此**无需先关闭客户端**。导入后凭证直接落在网关、可独立转发。": "Selecione o arquivo Cookies do cliente KukuAI (%APPDATA%\\baidugenflowpro\\Network\\Cookies): é um banco SQLite **binário** (sem extensão, não é JSON). A importação lê uma cópia do arquivo selecionado e não disputa o bloqueio com o cliente em execução, então **não é preciso fechar o cliente antes**. Após a importação, as credenciais ficam no gateway e podem ser encaminhadas de forma independente.", "选择凭证文件导入": "Importar de arquivo de credenciais", "选择官方客户端的登录态凭证文件(workbuddy-desktop.info / workbuddy-desktop-ai.info)或 wb2api 导出的账号 JSON(嵌套 / 扁平形均可)。": "Selecione o arquivo de credenciais de sessão do cliente oficial (workbuddy-desktop.info / workbuddy-desktop-ai.info) ou um JSON de conta exportado pelo wb2api (formato aninhado ou plano).", "选择小浣熊客户端的登录态文件 auth.json(Windows:C:\\Users\\<你的用户名>\\.box-agent\\config\\auth.json;macOS / Linux:~/.box-agent/config/auth.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端。": "Selecione o arquivo de sessão de login auth.json do cliente Raccoon (Windows: C:\\Users\\\\.box-agent\\config\\auth.json; macOS / Linux: ~/.box-agent/config/auth.json). Após a importação, as credenciais ficam no gateway e podem ser encaminhadas de forma independente — sem depender mais do cliente desta máquina.", "选择提供商": "Selecionar provedor", "选择的文件不是合法 JSON": "O arquivo selecionado não é um JSON válido", "选择要添加账号的提供商": "Selecione o provedor para adicionar uma conta", "重新扫描": "Escanear novamente", "鉴权": "Autenticação", "阿里云 Token Plan 套餐(国际站)": "Plano Token Plan do Alibaba Cloud (site internacional)", "阿里云百炼 Coding 套餐(国内站)": "Plano Coding do Alibaba Cloud Model Studio (site da China)", "阿里云百炼 Coding 套餐(国际站)": "Plano Coding do Alibaba Cloud Model Studio (site internacional)", "阿里云百炼模型服务(国际站,OpenAI 兼容模式)": "Serviço de modelos Alibaba Cloud Model Studio (site internacional, modo compatível com OpenAI)", "需要图形验证码:登录窗口已弹出,请填写后继续": "Captcha necessário: a janela de login foi aberta; preencha para continuar", "预置 API": "API predefinida", "领取 CodeArts 每日福利": "Resgatar benefício diário do CodeArts", "领取失败:{message}": "Falha ao resgatar: {message}", "领取并让官方确认": "Resgatar e aguardar confirmação oficial", "风控验证配置不完整,请稍后重试": "Configuração de verificação de controle de risco incompleta; tente novamente mais tarde", "验证码": "Código de verificação", "验证码已发送。收到后填入下方并点「登录并添加」": "Código enviado. Informe-o abaixo e clique em \"Entrar e adicionar\"", "验证码已发送,请查看手机短信": "Código enviado; verifique o SMS", "验证码已发送,请查看手机短信。填入下方并点「登录并添加」即完成登录": "Código enviado; verifique o SMS. Informe-o abaixo e clique em \"Entrar e adicionar\" para concluir o login", "验证码已发送,请查看短信": "Código enviado; verifique as mensagens", "验证码校验失败,请重试": "Falha na verificação do captcha; tente novamente", "验证码校验超时,请重试": "Tempo esgotado na verificação do captcha; tente novamente", "验证码组件不可用,请重试": "Componente de captcha indisponível; tente novamente", "验证码组件初始化超时,请重试": "Tempo esgotado ao inicializar o componente de captcha; tente novamente", "验证码组件加载失败,请检查网络后重试": "Falha ao carregar o componente de captcha; verifique a rede e tente novamente", "验证码组件加载异常,请重试": "Erro ao carregar o componente de captcha; tente novamente", "验证码组件加载超时,请检查网络后重试": "Tempo esgotado ao carregar o componente de captcha; verifique a rede e tente novamente", "验证码组件未加载,请重启应用后重试": "O componente de captcha não foi carregado; reinicie o aplicativo e tente novamente", "(免费额度池,模型名带 cline-free/ 前缀)。": " (pool de cota gratuita; nomes de modelo com o prefixo cline-free/).", "(其中 {n} 把恢复为不限制)": " ({n} das quais voltaram a ser ilimitadas)", "(必填)": " (obrigatório)", "(有效期 {window})": "(validade {window})", "(订阅池,模型名带 cline-pass/ 前缀,需要账号有对应订阅)。": " (pool de assinatura; nomes de modelo com o prefixo cline-pass/, e a conta precisa da assinatura correspondente).", ",下一次最快 {minutes} 分钟后": ", próxima tentativa em pelo menos {minutes} min", ",并从 {n} 把 Key 的可用提供商里移除": ", e removido dos provedores permitidos de {n} keys" });
+window.wbI18nDict = window.wbI18nDict || {}; Object.assign(window.wbI18nDict, { " · 模型 {head}{rest}": " · Modelos: {head}{rest}", " 等 {n} 个": " ({n} no total)", "1// 开头的 Google refresh token(也可直接粘贴 refresh_token=… 整行)": "Google refresh token começando com 1// (também pode colar a linha refresh_token=… inteira)", "11 位大陆手机号": "Celular da China continental (11 dígitos)", "1~64 个字符,账号列表里按它分组显示": "1 a 64 caracteres; na lista de contas, as contas são agrupadas por ele", "6 位数字": "6 dígitos", "没有可自动领的活动": "Nenhuma campanha pode ser resgatada automaticamente", "领到的是套餐赠送积分,不会增加福利模型的 token 池;": "
O que você recebe são pontos de brinde do plano, que não aumentam o pool de tokens dos modelos de benefício; ", "Anthropic 兼容端点在 https://api.deepseek.com/anthropic(协议换 anthropic 时填它)": "O endpoint compatível com Anthropic é https://api.deepseek.com/anthropic (preencha-o ao trocar o protocolo para anthropic)", "Anthropic 协议填根地址,不要带 /v1": "No protocolo Anthropic, preencha o endereço raiz, sem /v1", "Antigravity": "Antigravity", "AutoClaw 国内版": "AutoClaw edição da China", "AutoClaw 国际版": "AutoClaw edição internacional", "BDUSS 必填;请粘贴**完整 Cookie**(Cookie 编辑器一键导出即可)—— 其中 **PTOKEN 必须保留**,网关要用它向百度换发 KukuAI 业务会话令牌,缺了它模型刷新会报「未登录」。支持整段 Cookie 头、Cookie 编辑器导出的 JSON 数组,或 {BDUSS, STOKEN} 对象。KukuAI 没有刷新机制,登录态过期后重新粘贴即可。": "BDUSS é obrigatório; cole o **Cookie completo** (um editor de Cookie exporta com um clique) — o **PTOKEN deve ser mantido**, pois o gateway o usa para trocar com o Baidu por um token de sessão de negócio do KukuAI; sem ele, a atualização de modelos reporta \"não conectado\". São aceitos o cabeçalho Cookie inteiro, um array JSON exportado por um editor de Cookie, ou um objeto {BDUSS, STOKEN}. O KukuAI não tem mecanismo de atualização; quando a sessão de login expirar, basta colar de novo.", "BDUSS=…; STOKEN=…(或 Cookie 编辑器导出的 JSON)": "BDUSS=…; STOKEN=… (ou o JSON exportado por um editor de Cookie)", "CatPaw 的 X-Passport-Token(登录态 Cookie)": "X-Passport-Token do CatPaw (Cookie da sessão de login)", "Cline Pass 的 API Key 在 app.cline.bot 获取(订阅制);端点为 OpenAI 兼容,模型清单以 Cline 控制台为准,模型名在模型管理里按裸名添加(如 glm-5.2 / kimi-k2.7-code / deepseek-v4-pro);上游按客户端形态校验,所需的客户端请求头已随卡预置": "Obtenha a API Key do Cline Pass em app.cline.bot (por assinatura); o endpoint é compatível com OpenAI, o catálogo de modelos segue o console da Cline e os nomes dos modelos são adicionados no gerenciamento de modelos como nomes simples, sem prefixo (ex.: glm-5.2 / kimi-k2.7-code / deepseek-v4-pro); o upstream valida o formato do cliente, e os cabeçalhos de requisição do cliente necessários já vêm predefinidos neste cartão", "Cloud-IDE-JWT(三段点分)": "Cloud-IDE-JWT (três segmentos separados por ponto)", "Command Code": "Command Code", "JWT(三段点分;也可直接粘贴 Bearer 整行或 data.bin 内容)": "JWT (três partes separadas por pontos; também pode colar a linha Bearer inteira ou o conteúdo do data.bin)", "JWT(三段点分;也可直接粘贴 chatglm_token=… 整行)": "JWT (três partes separadas por ponto; colar a linha chatglm_token=… inteira também funciona)", "MonkeyCode": "MonkeyCode", "MonkeyCode 国际版": "MonkeyCode edição internacional", "NVIDIA NIM 托管端点,Key 在 integrate.api.nvidia.com 申请": "Endpoint gerenciado do NVIDIA NIM; solicite a Key em integrate.api.nvidia.com", "OfficeAce 果办": "OfficeAce", "accessToken 是 Accio 的登录凭证(一长串不透明 token,不是 JWT);refreshToken 可选,填了之后到期能自动续期。请填写 {label}账号的凭证 —— {siteNote}(最容易拿到的办法:直接用上方的「网页登录」,不需要手工找 token。)": "accessToken é a credencial de login do Accio (um token opaco bem longo, não é JWT); refreshToken é opcional e, se preenchido, permite renovação automática ao expirar. Preencha a credencial da conta {label} — {siteNote} (a forma mais fácil de obter: use o \"Login web\" acima; não é preciso procurar o token manualmente.)", "accessToken 是 Trae 的 Cloud-IDE-JWT(三段点分),refreshToken 用于到期自动续期(本家 refreshToken 一次一换:换发一次旧的即作废,所以两份程序别同时刷同一个账号)。
手工粘贴时请连 machineId / deviceId 一起填:上游把它们与登录时上传的设备公钥绑在一起判设备,凭空换一对会撞 2xxxx 那族设备绑定拒绝。
没有这三样时的正路是用上方的「网页登录」;容器 / 远程部署形态按提示粘贴地址栏回调地址即可。": "accessToken é o Cloud-IDE-JWT do Trae (três segmentos separados por ponto) e o refreshToken serve para renovação automática ao expirar (este provedor troca o refreshToken a cada uso: assim que é trocado, o antigo é invalidado, então não atualize a mesma conta em dois programas ao mesmo tempo).
Ao colar manualmente, preencha também machineId / deviceId: o upstream os vincula à chave pública do dispositivo enviada no login para identificar o dispositivo, e inventar um novo par dispara a família de rejeições de vínculo de dispositivo 2xxxx.
Sem esses três itens, o caminho correto é o \"Login web\" acima; em contêiner / implantação remota, basta colar o endereço de callback da barra de endereços conforme as instruções.", "monkeycode_ai_session 的值(也可直接粘贴整段 Cookie)": "O valor de monkeycode_ai_session (também pode colar o Cookie inteiro)", "ms- 开头的 API 令牌": "Token de API começando com ms-", "refreshToken 可选,填了到期可自动续期;两者都能从小浣熊客户端登录态文件里取到。": "refreshToken é opcional e, se preenchido, permite renovação automática ao expirar; ambos podem ser obtidos do arquivo de sessão de login do cliente Raccoon.", "refreshToken 可选,填了可自动续期;两者都能从客户端登录态文件取到。同一个 Cline 账号两个池都能用,这里归入 {label}。": "refreshToken é opcional e, se preenchido, permite renovação automática; ambos podem ser obtidos do arquivo de sessão de login do cliente. A mesma conta Cline funciona nos dois pools; aqui ela entra em {label}.", "token 支持 enc: 前缀(Windows 上自动解密)。未填 refreshToken 无法自动续期。": "O token aceita o prefixo enc: (descriptografado automaticamente no Windows). Sem preencher o refreshToken, não é possível renovar automaticamente.", "token 是登录态 Cookie;CatPaw 没有刷新机制,过期后需在客户端重新登录。": "O token é o Cookie da sessão de login; o CatPaw não tem mecanismo de atualização, então faça login novamente no cliente após expirar.", "user_ 开头的 API Key(也可直接粘贴 Authorization: Bearer … 整行)": "API Key começando com user_ (também pode colar a linha Authorization: Bearer … inteira)", "{label} 网页登录的打开方式": "Como abrir o login web de {label}", "{label} 账号地区": "Região da conta {label}", "{label} 账号的添加方式": "Como adicionar uma conta {label}", "{name} 不是合法 JSON:{reason}": "{name} não é um JSON válido: {reason}", "{name}要粘一个 JSON 对象(形如 {sample})": "{name}: cole um objeto JSON (no formato {sample})", "{n} 个账号": "{n} contas", "{n} 个账号,点击添加": "{n} contas, clique para adicionar", "{seconds}s 后重发": "Reenviar em {seconds}s", "✅ {label}账号已添加": "✅ Conta {label} adicionada", "✅ {label}账号已添加{name}": "✅ Conta {label} adicionada{name}", "✅ 已从 cc-switch 导入 {n} 个供应商": "✅ {n} provedores importados do cc-switch", "✅ 已创建自定义提供商「{name}」并添加账号": "✅ Provedor personalizado \"{name}\" criado e conta adicionada", "✅ 已删除自定义提供商「{name}」{accounts}{keys}": "✅ Provedor personalizado \"{name}\" excluído{accounts}{keys}", "✅ 已更新已有账号{name}(同一把 API Key 只保留一条,重复添加会合并)": "✅ Conta existente{name} atualizada (apenas uma conta por chave de API; adições repetidas são mescladas)", "✅ 登录成功,{edition}账号已加入列表": "✅ Login concluído; conta {edition} adicionada à lista", "✅ 领取成功:{planId}{period}": "✅ Resgate concluído: {planId}{period}", " 同一家可以放多把 key,按优先级轮换。": " Um mesmo provedor pode ter várias keys, rotacionadas por prioridade.", "「{name}」的账号添加功能还在开发中,敬请期待。": "A adição de contas para \"{name}\" ainda está em desenvolvimento; aguarde novidades.", "一个 Key 用遍多家模型,模型名用「厂商/模型」全称(如 deepseek/deepseek-chat)": "Uma única Key serve para vários fornecedores; use o nome completo \"fornecedor/modelo\" (ex.: deepseek/deepseek-chat)", "上游不要鉴权时留空,并勾选下面一项(留空又不勾会被当成未配置凭证)": "Deixe em branco quando o upstream não exigir autenticação e marque a opção abaixo (em branco e sem marcar é tratado como credencial não configurada)", "上游信息": "Informações do upstream", "不可领({status})": "Não resgatável ({status})", "不支持导入": "Importação não suportada", "不是有效的凭证文件:内容要是一个 JSON 对象": "Não é um arquivo de credenciais válido: o conteúdo deve ser um objeto JSON", "不是有效的凭证文件:需要包含 accessToken 与 uid": "Não é um arquivo de credenciais válido: accessToken e uid são obrigatórios", "不是自定义提供商": "Não é um provedor personalizado", "不需要 Key:转发与拉取模型都不发送鉴权头": "Não precisa de Key: nem o encaminhamento nem a busca de modelos enviam cabeçalhos de autenticação", "不需要登录:点下面的按钮,网关会直接在智谱清言换发一份访客凭证并加入账号列表(也可以先填个备注名)。访客凭证可以直接用来对话,免费额度由上游按设备发放。
注意:访客账号没有积分体系 —— 它与「会员积分」「每日登录积分」「活动领取」相关的接口一律需要登录,因此那些能力对访客会如实跳过(账号页的积分、签到中心都不显示读数)。想要积分就用「填写凭证」粘一个已登录账号的令牌,或「导入桌面端登录态」。": "Não é preciso fazer login: clique no botão abaixo e o gateway vai obter uma credencial de visitante diretamente do Zhipu Qingyan e adicioná-la à lista de contas (você pode preencher um nome de observação antes). A credencial de visitante pode ser usada para conversar imediatamente; a cota gratuita é emitida pela origem por dispositivo.
Atenção: uma conta de visitante não tem sistema de pontos — as interfaces de pontos de membro, pontos de login diário e resgate de atividades exigem login, então esses recursos são ignorados para visitantes (nenhuma leitura aparece na página de contas nem na central de check-in). Para obter pontos, use \"Preencher credenciais\" para colar o token de uma conta conectada, ou \"Importar estado de login do desktop\".", "两版账号可同时保存,各自一份模型清单(国内版与国际版是两家提供商,可分别启用与映射)。": "As contas das duas edições podem ser salvas ao mesmo tempo, cada uma com sua própria lista de modelos (as edições da China e internacional são dois provedores, que podem ser ativados e mapeados separadamente).", "中国版": "Edição da China", "今天没有需要领的活动(都已到账)": "Hoje não há campanhas para resgatar (todas já creditadas)", "今天(北京时间 {day})已试 {attempts} 次,还能试 {left} 次{next}
": "Hoje (horário de Pequim, {day}) você já tentou {attempts} vezes; restam {left} tentativas{next}
", "从别的机器(或 OfficeAce 桌面端 models.json)取三项贴进来:模型网关基址(baseUrl,形如 https://modelgw-…/v2)与 modelAppKey / modelAppSecret。这三项就能转发(网关凭据不过期);控制面临时凭据(accessKeyId 等)可选,留空则额度/自动续期不可用,但不影响转发。": "Pegue três itens de outra máquina (ou do models.json do aplicativo de desktop do OfficeAce) e cole aqui: o endereço base do gateway de modelos (baseUrl, no formato https://modelgw-…/v2) e modelAppKey / modelAppSecret. Esses três já bastam para encaminhar requisições (a credencial do gateway não expira); as credenciais temporárias do plano de controle (accessKeyId etc.) são opcionais — se ficarem em branco, a consulta de saldo e a renovação automática ficam indisponíveis, mas o encaminhamento não é afetado.", "从本机导入桌面端登录态": "Importar sessão de login do desktop desta máquina", "任务镜像 id": "id da imagem da tarefa", "余额查询": "Consulta de saldo", "使用 Google 账号登录": "Entrar com conta Google", "使用 Zai 账号登录": "Entrar com conta Zai", "使用个人访问令牌(PAT)": "Usar token de acesso pessoal (PAT)", "免费模型不用填 Key(默认勾上「该上游无需鉴权」,网关自动用匿名凭证);付费模型则填 Zen 的 API Key。免费档上游只认官方客户端形态,已默认开启「伪装 OpenCode 官方客户端」": "Modelos gratuitos não precisam de Key (a opção \"Este upstream não exige autenticação\" já vem marcada e o gateway usa credenciais anônimas automaticamente); para modelos pagos, preencha a API Key do Zen. O nível gratuito do upstream só aceita o formato do cliente oficial, e a opção \"Simular o cliente oficial do OpenCode\" já vem ativada", "内嵌窗口": "Janela embutida", "内嵌窗口打开;关窗即取消等待(Google 账号被拒时改用系统浏览器)": "Abre na janela embutida; fechar a janela cancela a espera (se a conta Google for recusada, use o navegador do sistema)", "内嵌窗口打开;完成后自动加入列表,关窗即取消等待": "Abre na janela embutida; ao concluir, entra automaticamente na lista; fechar a janela cancela a espera", "内嵌窗口打开;扫码完成后自动加入列表,关窗即取消等待": "Abre em uma janela incorporada; a conta é adicionada automaticamente após o escaneamento — fechar a janela cancela a espera", "内嵌窗口用全新环境,多账号互不影响;关窗即取消等待": "A janela embutida usa um ambiente totalmente novo, então várias contas não interferem entre si; fechar a janela cancela a espera", "内嵌窗口(推荐)": "Janela embutida (recomendado)", "准备验证…": "Preparando a verificação…", "凭据 JSON": "JSON da credencial", "凭证文件在哪?": "Onde fica o arquivo de credenciais?", "创建并添加账号": "Criar e adicionar conta", "创建这个提供商,并同时建立它的第一个账号。": "Crie este provedor e, ao mesmo tempo, sua primeira conta.", "删除功能不可用(脚本未就绪)": "Exclusão indisponível (script não está pronto)", "删除失败:{reason}": "Falha ao excluir: {reason}", "删除此提供商": "Excluir este provedor", "及 {n} 个账号": " e {n} contas", "发送中…": "Enviando…", "发送失败:{message}": "Falha ao enviar: {message}", "发送未确认:登录窗口已弹出,请在弹出的窗口中手动完成登录": "Envio não confirmado: a janela de login foi aberta; conclua o login manualmente nessa janela", "取消失败:{message}": "Falha ao cancelar: {message}", "取消等待": "Cancelar espera", "只有「内嵌窗口」能恢复第三方入口:系统浏览器里我们无法改动登录页": "Somente a \"Janela embutida\" pode restaurar os acessos de terceiros: no navegador do sistema não podemos alterar a página de login", "可选": "Opcional", "可选(cloudaicompanionProject):留空由网关自动发现": "Opcional (cloudaicompanionProject); se vazio, o gateway descobre automaticamente", "可选,展示用": "Opcional, para exibição", "可选,没有则无法自动续期": "Opcional; sem ele, não é possível renovar automaticamente", "可选,留空使用凭据里的 user_name": "Opcional; se vazio, usa o user_name da credencial", "可选,留空使用账号姓名、邮箱或令牌指纹": "Opcional; se vazio, usa o nome, o e-mail ou a impressão digital do token", "可选,留空使用账号昵称或邮箱": "Opcional; se vazio, usa o apelido ou o e-mail da conta", "可选,留空则用 key 尾号": "Opcional; se vazio, usa o final da key", "可选,留空则用 userId": "Opcional; se vazio, usa o userId", "可选,留空则用上游账号昵称": "Opcional; se deixado em branco, o apelido da conta upstream é usado", "可选,留空则用上游返回的账号名或账号 id": "Opcional; se vazio, usa o nome ou o id da conta retornados pelo upstream", "可选,留空则用凭证里的账号名": "Opcional; se vazio, usa o nome da conta na credencial", "可选,留空则用文件里的昵称": "Opcional; deixe vazio para usar o apelido do arquivo", "可选,留空则用登录名或 uid": "Opcional; se vazio, usa o nome de login ou o uid", "可选,留空则用脱敏手机号": "Opcional; se vazio, usa o celular mascarado", "可选,留空则用脱敏手机号或 userId": "Opcional; se vazio, usa o celular mascarado ou o userId", "可选,留空则用账号 uk": "Opcional; se vazio, usa o uk da conta", "可选,留空则用账号昵称": "Opcional; em branco usa o apelido da conta", "可选,留空则用账号昵称或 userId": "Opcional; deixe em branco para usar o apelido da conta ou o userId", "可选,留空则用邮箱或令牌尾号": "Opcional; se vazio, usa o e-mail ou o final do token", "可选,留空用「OfficeAce 果办」": "Opcional; se vazio, usa “OfficeAce”", "可选,留空自动生成": "Opcional; se vazio, gerado automaticamente", "可选,留空自动用昵称": "Opcional; se vazio, usa o apelido", "可选,给这个访客账号起个备注名": "Opcional; um nome de observação para esta conta de visitante", "可选,续期时带上": "Opcional; enviado na renovação", "可选,讯飞侧 userid": "Opcional; userid do lado iFlytek", "可选:发起对话必需,留空则由网关从该账号已有任务里自动发现,发现不到时之后手动补": "Opcional; necessário para iniciar uma conversa. Se vazio, o gateway descobre automaticamente nas tarefas existentes da conta; se não encontrar, preencha manualmente depois.", "可选:账号邮箱,用于展示与身份识别(换新令牌也能认回同一账号)": "Opcional; e-mail da conta, usado para exibição e identificação (a mesma conta é reconhecida mesmo ao trocar por um token novo)", "可选;UUID 形态,与凭据同生共死": "Opcional; formato UUID, vive e morre com a credencial", "可选;填了才能到期自动续期": "Opcional; preencha para renovar automaticamente ao expirar", "可选;用于去重与展示名(留空时网关会问一次上游)": "Opcional; usado para deduplicação e nome de exibição (se vazio, o gateway consulta o upstream uma vez)", "可选;用于生成账号 id 与展示名": "Opcional; usado para gerar o id e o nome de exibição da conta", "可选;纯数字串(上游只收 8–24 位数字)": "Opcional; apenas dígitos (o upstream aceita somente 8–24 dígitos)", "可领取": "Resgatável", "同一家可以混着放:有 Key 的账号与无鉴权账号各按各的规则走;无需鉴权的账号也能并存多条(各自可配不同的出网代理)": "Contas com chave e sem autenticação podem coexistir no mesmo provedor, cada uma roteada pelas próprias regras; várias contas sem autenticação também são permitidas (cada uma com seu próprio proxy de saída)", "同地址换 anthropic 协议即走它的 Claude 兼容端点。转发必须填 OpenCode Go 的 API Key(订阅制;获取模型清单不需要 Key,但发请求上游会回 401「Missing API key」)": "No mesmo endereço, troque o protocolo para anthropic e ele usará o endpoint compatível com Claude. Para encaminhar, é obrigatório preencher a API Key do OpenCode Go (por assinatura; obter a lista de modelos não exige Key, mas as requisições recebem 401 \"Missing API key\" do upstream)", "响应为空": "Resposta vazia", "商汤日日新的 OpenAI 兼容端点;余额查询走控制台账号密码(见下方「余额查询」一段)": "Endpoint compatível com OpenAI do SenseNova; a consulta de saldo usa a conta e a senha do console (veja \"Consulta de saldo\" abaixo)", "国内版": "Edição da China", "国内版与**国际版是两套独立的账号与套餐**,凭证与领取的套餐都不通用。": "A edição da China e **a edição internacional são dois conjuntos independentes de contas e planos**; as credenciais e os planos resgatados não são compartilhados.", "国内版登录页没有 Google / GitHub 入口(它用微信 / 手机号 / 邮箱登录)": "A página de login da edição da China não tem acessos Google / GitHub (o login é por WeChat / celular / e-mail)", "国内版的登录站点是 www.accio-ai.com,与国际版不是同一站。": "O site de login da edição da China é www.accio-ai.com, diferente do site da edição internacional.", "国内版(WorkBuddy)": "Edição da China (WorkBuddy)", "国内站为 https://api.siliconflow.cn/v1": "O site da China é https://api.siliconflow.cn/v1", "国内站(minimaxi.com);OpenAI 兼容地址为 https://api.minimaxi.com/v1": "Site da China (minimaxi.com); o endereço compatível com OpenAI é https://api.minimaxi.com/v1", "国际版": "Edição internacional", "国际版 z.ai 的 Coding 套餐;OpenAI 兼容地址为 https://api.z.ai/api/coding/paas/v4": "Plano Coding do z.ai da edição internacional; o endereço compatível com OpenAI é https://api.z.ai/api/coding/paas/v4", "国际版与国内版是**两套独立的账号**(同一账号体系的两个站点),凭证不通用。": "As edições internacional e da China são **dois conjuntos independentes de contas** (dois sites do mesmo sistema de contas); as credenciais não são compartilhadas.", "国际版与国内版账号体系独立,请填国际版的凭证。未填 refreshToken 无法自动续期。": "As edições internacional e da China têm sistemas de contas independentes; preencha a credencial da edição internacional. Sem preencher o refreshToken, não é possível renovar automaticamente.", "国际版登录页默认只显示邮箱登录,勾选后恢复 Google / GitHub / X 入口": "A página de login da edição internacional mostra por padrão apenas o login por e-mail; marcar a opção restaura os acessos Google / GitHub / X", "国际版的推理站点是 api.z.ai,与国内版不是同一站;套餐也各自独立。": "O site de inferência da edição internacional é api.z.ai, diferente do site da edição da China; os planos também são independentes.", "国际版(WorkBuddy AI)": "Edição internacional (WorkBuddy AI)", "国际站 Coding 套餐;OpenAI 兼容地址为 https://api.minimax.io/v1": "Plano Coding do site internacional; o endereço compatível com OpenAI é https://api.minimax.io/v1", "在 cc-switch 里找到": "Encontradas", "在内嵌窗口里完成官方登录,成功后自动加入账号列表。": "Conclua o login oficial na janela embutida; em caso de sucesso, a conta entra automaticamente na lista de contas.", "在{label}的 Qoder 账号设置 → Integrations 生成 PAT(别填 Google / GitHub 的令牌)。两个地区的账号与凭证不通用。": "Gere um PAT nas configurações da conta Qoder do {label} → Integrations (não use um token do Google / GitHub). Contas e credenciais não são compartilhadas entre as duas regiões.", "在打开的官方授权页里用微信扫码登录(页面会直接显示二维码)。扫码成功后自动加入账号列表。": "Escaneie o QR code do WeChat na página de autorização oficial que abrir (o QR code aparece imediatamente). A conta é adicionada à lista automaticamente após a leitura bem-sucedida.", "在打开的窗口里用百度账号登录 KukuAI 主站(手机验证码 / 扫码均可),登录成功后自动加入账号列表。网关会向百度换发 KukuAI 业务会话令牌(依赖本机已安装库库AI 客户端)。": "Na janela aberta, entre no site principal do KukuAI com sua conta Baidu (código SMS ou QR code, tanto faz); após o login, a conta entra automaticamente na lista. O gateway troca com o Baidu um token de sessão de negócio do KukuAI (requer o cliente KukuAI instalado nesta máquina).", "在打开的窗口里登录 Google 账号(Antigravity 的授权页),授权完成后自动加入账号列表。": "Faça login com sua conta Google na janela que abrir (página de autorização do Antigravity); a conta é adicionada à lista automaticamente quando a autorização for concluída.", "在浏览器中打开登录页": "Abrir a página de login no navegador", "地区": "Região", "填写凭证": "Preencher credenciais", "填写凭证添加": "Preencher credenciais para adicionar", "备注名": "Rótulo", "套餐": "Plano", "如:智谱 GLM": "ex.: Zhipu GLM", "完成登录后自动加入账号列表,昵称取自上游。": "Após concluir o login, a conta entra automaticamente na lista; o apelido vem do upstream.", "官方客户端凭证目录:Windows 是 C:\\Users\\<你的用户名>\\AppData\\Local\\CodeBuddyExtension\\Data\\Public\\auth,macOS 是 ~/Library/Application Support/CodeBuddyExtension/Data/Public/auth": "Diretório de credenciais do cliente oficial: Windows — C:\\Users\\\\AppData\\Local\\CodeBuddyExtension\\Data\\Public\\auth; macOS — ~/Library/Application Support/CodeBuddyExtension/Data/Public/auth", "官方已确认到账": "Crédito confirmado oficialmente", "导入": "Importar", "导入中…": "Importando…", "导入凭证文件": "Importar arquivo de credenciais", "导入失败": "Falha na importação", "导入失败:{reason}": "Falha na importação: {reason}", "导入所选": "Importar selecionados", "导入所选({n})": "Importar selecionados ({n})", "导入桌面端登录态": "Importar sessão de login do desktop", "将打开内嵌窗口;授权完成后自动加入账号列表。关掉窗口即取消等待。授权页最后可能提示无法打开 zcode:// 链接,这是正常的 —— 结果已由服务端记下": "A janela embutida será aberta; após a autorização, a conta entra automaticamente na lista de contas. Fechar a janela cancela a espera. No final, a página de autorização pode avisar que não conseguiu abrir o link zcode:// — isso é normal; o resultado já foi registrado no servidor", "将打开内嵌窗口;授权完成后自动加入账号列表。远程面板可粘贴回调地址。关掉窗口即取消等待。链接 5 分钟内有效,超时或未点就会作废(可重新发起)": "A janela embutida será aberta; após a autorização, a conta entra automaticamente na lista de contas. No painel remoto, é possível colar o endereço de callback. Fechar a janela cancela a espera. O link é válido por 5 minutos; se expirar ou não for clicado, ele é invalidado (você pode iniciar de novo)", "将打开内嵌窗口;登录完成后自动加入账号列表。关掉窗口即取消等待": "A janela embutida será aberta; após o login, a conta entra automaticamente na lista. Fechar a janela cancela a espera", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的 Trae 账号);同机完成后自动加入,Docker / 远程面板按提示粘贴地址栏回调地址。": "A página de autorização será aberta no navegador padrão do sistema (reaproveitando a conta Trae já conectada nele); na mesma máquina, a conta entra automaticamente ao concluir. Para Docker / painel remoto, cole o endereço de callback da barra de endereços conforme as instruções.", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的 ZCode 账号);授权完成后自动加入账号列表。页面最后可能提示无法打开 zcode:// 链接,属正常现象": "A página de autorização será aberta no navegador padrão do sistema (reaproveitando a conta ZCode já conectada nele); após a autorização, a conta entra automaticamente na lista. No final, a página pode avisar que não conseguiu abrir o link zcode://; isso é normal", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的华为云账号);授权码由网关轮询云端取回,与浏览器跑在哪台机器无关,完成后自动加入账号列表": "A página de autorização será aberta no navegador padrão do sistema (reaproveitando a conta Huawei Cloud já conectada nele); o gateway consulta a nuvem em polling para obter o código de autorização, então não importa em qual máquina o navegador roda. Ao concluir, a conta entra automaticamente na lista", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的华为云账号);浏览器与网关不在同一台机器时,按上方说明把最终回调地址粘贴回面板": "A página de autorização será aberta no navegador padrão do sistema (reaproveitando a conta Huawei Cloud já conectada nele); se o navegador e o gateway não estiverem na mesma máquina, cole o endereço de callback final de volta no painel conforme as instruções acima", "将用系统默认浏览器打开登录页(会复用浏览器里已登录的 Accio 账号);完成登录后自动加入账号列表,关掉弹窗即取消等待": "A página de login será aberta no navegador padrão do sistema (reaproveitando a conta Accio já conectada nele); após o login, a conta entra automaticamente na lista; fechar a janela cancela a espera", "小米 MiMo Token Plan 套餐(新加坡站)": "Plano Token Plan do Xiaomi MiMo (site de Singapura)", "已到账": "Creditado", "已取消登录等待": "Espera de login cancelada", "已取消领取": "Resgate cancelado", "已取消验证码": "Captcha cancelado", "已填写手机号,正在发送验证码…": "Celular preenchido; enviando o código…", "已声明无需鉴权:账号会被正常选路,出网时不带任何鉴权头": "Marcada como sem necessidade de autenticação: a conta é roteada normalmente e nenhum cabeçalho de autenticação é enviado nas requisições de saída", "已导入 {ok} 个,失败 {fail} 个(失败项已标注在列表里)": "{ok} importados, {fail} com falha (os itens com falha estão marcados na lista)", "已建过 · {n} 个账号,点击继续添加": "Já criado · {n} contas, clique para adicionar mais", "已建过,点击继续添加账号": "Já criado, clique para adicionar outra conta", "已打开官方登录页,请在窗口中完成登录…": "Página de login oficial aberta; conclua o login na janela…", "已点发送,等待短信…": "Enviado; aguardando o SMS…", "已用系统默认浏览器打开登录页,请在浏览器中完成登录…": "Página de login aberta no navegador padrão do sistema; conclua o login no navegador…", "已领取,等官方确认": "Resgatado; aguardando confirmação oficial", "当前壳版本不支持 AutoClaw 网页登录,请更新应用": "Esta versão do aplicativo não suporta o login web do AutoClaw; atualize o aplicativo", "当前没有可领取的套餐(活动尚未开始)": "Nenhum plano disponível para resgate no momento (a campanha ainda não começou)", "当前环境不支持领取(桥接方法缺失)": "O resgate não é suportado neste ambiente (método de ponte ausente)", "必填,CatPaw 账号标识": "Obrigatório; identificador da conta CatPaw", "恢复 Google / GitHub 入口": "Restaurar acessos Google / GitHub", "手机号": "Celular", "手机验证码登录": "Login com código SMS", "打开 Trae SOLO 的官方授权页(trae.cn)并用你的 Trae 账号登录:授权完成后官方页面会跳回本机的一个临时端口;同机部署自动接收,Docker / 远程面板请按提示复制地址栏回调地址。": "Abra a página de autorização oficial do Trae SOLO (trae.cn) e entre com sua conta Trae: ao concluir a autorização, a página oficial redireciona de volta para uma porta temporária desta máquina; implantações na mesma máquina recebem automaticamente, e no Docker / painel remoto copie o endereço de callback da barra de endereços conforme as instruções.", "打开 Accio {label}的官方登录页({site})并用你的 Accio 账号登录:登录成功后官方页面会跳回本机;同机自动完成,Docker / 远程面板按提示粘贴回调地址即可(授权码只在本机传给网关,界面不显示明文 token)。": "Abra a página de login oficial do Accio {label} ({site}) e entre com sua conta Accio: após o login, a página oficial redireciona de volta para esta máquina; na mesma máquina tudo se completa automaticamente, e no Docker / painel remoto basta colar o endereço de callback conforme as instruções (o código de autorização é passado ao gateway apenas nesta máquina, e nenhum token em texto claro é exibido na interface).", "打开 Accio {label}登录页": "Abrir a página de login do Accio {label}", "打开 Antigravity 网页登录": "Abrir login web do Antigravity", "打开 CatPaw 网页登录": "Abrir o login web do CatPaw", "打开 Cline 授权页": "Abrir a página de autorização do Cline", "打开 CodeArts 授权页": "Abrir a página de autorização do CodeArts", "打开 Qoder 网页登录": "Abrir o login web do Qoder", "打开 Trae 授权页": "Abrir a página de autorização do Trae", "打开 ZCode {label}的官方授权页并用你的账号登录。授权结果由 ZCode 服务端记录,网关在后台自动取回凭证并加入账号列表。": "Abra a página de autorização oficial do ZCode {label} e entre com sua conta. O resultado da autorização é registrado pelo servidor do ZCode; o gateway busca a credencial em segundo plano e a adiciona à lista de contas.", "打开 ZCode {label}授权页": "Abrir a página de autorização do ZCode {label}", "打开华为云 CodeArts 的官方授权页登录:登录完成后官方页面会把浏览器带回网关自己的 /oauth/callback,网关用一次性授权码换取临时凭据并加入账号列表。
网关跑在另一台机器上时,网页端会提示把地址栏中的最终回调地址直接粘贴回面板。": "Abra a página de autorização oficial do Huawei Cloud CodeArts para entrar: após o login, a página oficial leva o navegador de volta ao /oauth/callback do próprio gateway, e o gateway troca o código de autorização de uso único por credenciais temporárias e adiciona a conta à lista.
Quando o gateway roda em outra máquina, a interface web pede para colar o endereço de callback final da barra de endereços de volta no painel.", "打开华为云授权页登录:登录完成后网关会自动轮询云端取回授权码并加入账号列表(不需要装 OfficeAce 桌面端,也无需手工回填回调地址)。": "Abra a página de autorização do Huawei Cloud e faça login: ao concluir, o gateway consulta a nuvem automaticamente para obter o código de autorização e adiciona a conta à lista (não é preciso instalar o aplicativo de desktop do OfficeAce nem colar manualmente uma URL de retorno).", "打开官方授权页完成设备码授权,登录的是{label}({site})的账号。": "Abra a página de autorização oficial e conclua a autorização por código de dispositivo; a conta usada é do {label} ({site}).", "打开授权页": "Abrir a página de autorização", "打开授权页完成确认,账号自动加入 {label}{note}": "Abra a página de autorização e confirme; a conta entra automaticamente em {label}{note}", "打开方式": "Como abrir", "打开网页登录": "Abrir login web", "探测失败:{message}": "Falha na detecção: {message}", "接入一个兼容上游": "Conectar um upstream compatível", "提交中…": "Enviando…", "搜索提供商": "Buscar provedores", "搜索提供商…": "Buscar provedores…", "整份粘贴官方插件 / CLIProxyAPI 落盘的凭据 JSON(形如 {\"codearts_provider_credential\":{…}},铺平的也行)。
必填:access_key_id、secret_access_key、security_token。要能自动续期,必须连 refresh_token 与 oauth_context 一起粘 —— 临时凭据约一小时到期,缺这半块就续不回来,只能重新登录。": "Cole o JSON de credencial inteiro gravado pelo plugin oficial / CLIProxyAPI (no formato {\"codearts_provider_credential\":{…}}; a versão achatada também serve).
Obrigatórios: access_key_id, secret_access_key, security_token.Para renovar automaticamente, é preciso colar também refresh_token e oauth_context — as credenciais temporárias expiram em cerca de uma hora, e sem essa parte não há como renovar; será preciso fazer login de novo.", "文件是{edition}凭证,已按该版本导入": "O arquivo contém credenciais da {edition} e foi importado como tal", "新建自定义提供商": "Novo provedor personalizado", "方案:{label}": "Esquema: {label}", "明文 JWT 或 auth.json 里的 enc: 加密值(自动解密)": "JWT em texto claro ou o valor criptografado enc: do auth.json (descriptografado automaticamente)", "明文 JWT(国际版账号的 access token)": "JWT em texto claro (o access token da conta da edição internacional)", "智谱 bigmodel.cn 的 Coding 套餐,Key 在 open.bigmodel.cn/usercenter/apikeys": "Plano Coding do bigmodel.cn da Zhipu; obtenha a Key em open.bigmodel.cn/usercenter/apikeys", "未知错误": "Erro desconhecido", "未能获取授权地址,请重试": "Não foi possível obter o endereço de autorização; tente novamente", "未能读取 cc-switch 数据": "Não foi possível ler os dados do cc-switch", "未领取成功": "Resgate não concluído", "本地 Ollama、OpenCode Zen 免费档这类上游要勾上,否则账号不可用": "Marque esta opção para upstreams como o Ollama local ou o nível gratuito do OpenCode Zen; caso contrário, a conta não funcionará", "本家有两个**互不替代**的凭证,按你要用的功能填,至少填一个:编码套餐 API Key 用于转发推理(打 {site})与查询窗口限额(每 N 小时 / 每周的剩余比例);jwt 用于领取套餐与查询余额(打 zcode.z.ai 的 billing 网关,官方叫 Coding Plan JWT,是一串三段点分的字符串)。余额两把都能查、但读到的东西不同:jwt 读到余额桶与套餐到期,API Key 读到窗口限额;而领取只认 jwt、转发只认 API Key。请填写 {label}账号的凭证 —— {plan}(最容易拿到的办法:直接用上方的「网页登录」—— 它会替你把这个 API Key 换好,两个凭证一起拿到。)": "Este provedor tem duas credenciais que **não se substituem**; preencha as que correspondem aos recursos que você vai usar, pelo menos uma: a API Key do Coding Plan serve para encaminhar inferência (acessa {site}) e para consultar os limites de janela (a porcentagem restante de cada janela de N horas / semanal); o jwt serve para resgatar planos e consultar saldo (acessa o gateway de billing em zcode.z.ai; oficialmente chamado Coding Plan JWT, uma string de três segmentos separados por ponto). As duas consultam saldo, mas leem coisas diferentes: o jwt lê os baldes de saldo e a expiração do plano, enquanto a API Key lê os limites de janela; e o resgate só aceita o jwt, o encaminhamento só aceita a API Key. Preencha a credencial da conta {label} — {plan} (a forma mais fácil: use o \"Login web\" acima — ele troca essa API Key por você e obtém as duas credenciais de uma vez.)", "本机 Ollama 的 OpenAI 兼容端点,无需 API Key(默认已勾上「该上游无需鉴权」,鉴权头一个都不发)": "Endpoint compatível com OpenAI do Ollama local; não precisa de API Key (a opção \"Este upstream não exige autenticação\" já vem marcada e nenhum cabeçalho de autenticação é enviado)", "本次未确认到账": "Crédito não confirmado desta vez", "条可导入": "importáveis", "条配置,其中": "configurações no cc-switch, das quais", "桌面运行时不可用(Tauri 未初始化)": "Runtime do desktop indisponível (Tauri não inicializado)", "模型网关基址": "Endereço base do gateway de modelos", "正在打开百度登录页…": "Abrindo a página de login do Baidu…", "正在扫描本机 cc-switch…": "Escaneando o cc-switch desta máquina…", "正在换发访客凭证…": "Solicitando uma credencial de visitante…", "正在添加…": "Adicionando…", "正在等待{name}登录完成;完成或取消后才能发起新的登录": "Aguardando a conclusão do login de {name}; só após concluir ou cancelar você pode iniciar um novo login", "每周": "Semanal", "每日": "Diário", "每月": "Mensal", "没有则无法自动续期": "Sem ele, não é possível renovar automaticamente", "没有匹配「{keyword}」的提供商": "Nenhum provedor corresponde a \"{keyword}\"", "添加 {name} 账号": "Adicionar conta {name}", "添加中…": "Adicionando…", "添加到 ": "Adicionar a ", "添加失败:{reason}": "Falha ao adicionar: {reason}", "添加小浣熊账号": "Adicionar conta Raccoon", "添加方式": "Forma de adicionar", "添加访客账号": "Adicionar uma conta de visitante", "添加账号": "Adicionar conta", "火山引擎 Coding 套餐;通用推理接入点为 https://ark.cn-beijing.volces.com/api/v3": "Plano Coding do Volcano Engine; o endpoint de inferência geral é https://ark.cn-beijing.volces.com/api/v3", "点击添加账号": "Clique para adicionar uma conta", "点开即预填,填 Key 接入": "Abre já preenchido; informe a Key para conectar", "点按钮后先过一次滑块验证(官方风控),随后打开登录页,登录完成即自动添加账号。
这是国际版官方唯一的登录方式;已在客户端登录过的,用「导入桌面端登录态」更快。": "Após clicar no botão, primeiro passe por uma verificação de slider (controle de risco do provedor); em seguida a página de login abre e a conta é adicionada automaticamente ao concluir o login.
Esta é a única forma oficial de login da edição internacional; se você já entrou no cliente, \"Importar sessão de login do desktop\" é mais rápido.", "用 AutoClaw 账号绑定的手机号登录:点击「获取验证码」,收到短信后填入下方并登录。验证码由本机直接提交给官方接口,界面不显示 token。": "Entre com o celular vinculado à conta AutoClaw: clique em \"Obter código\", informe o código recebido por SMS abaixo e entre. O código é enviado desta máquina diretamente à API oficial, e nenhum token é exibido na interface.", "用 CatPaw 账号完成登录(美团 passport),成功后自动加入账号列表。": "Conclua o login com sua conta CatPaw (Meituan Passport); em caso de sucesso, a conta entra automaticamente na lista.", "用 Loomy 账号绑定的手机号登录:点「获取验证码」后填入即可。这是本家最省事的入口。": "Entre com o celular vinculado à conta Loomy: clique em \"Obter código\" e informe o código. Esta é a forma mais simples neste provedor.", "用于转发;形如 apiKey.secret 两段点分(不填则这个账号不能转发)": "Usado para encaminhamento; no formato apiKey.secret, dois segmentos separados por ponto (se vazio, esta conta não pode encaminhar)", "用于领取套餐与查询余额;不填则这个账号不能领取与查余额": "Usado para resgatar planos e consultar saldo; se vazio, esta conta não pode resgatar nem consultar saldo", "用户 ID": "ID do usuário", "用绑定的手机号登录:点「获取验证码」后填入即可。这是国内版官方唯一的登录方式。": "Entre com o celular vinculado: clique em \"Obter código\" e informe o código. Esta é a única forma oficial de login da edição da China.", "留空则用提供商名称": "Se vazio, usa o nome do provedor", "登录 / 添加 {name} 账号": "Entrar / adicionar conta {name}", "登录 session(一长串)": "Sessão de login (uma string longa)", "登录中…": "Entrando…", "登录失败:{message}": "Falha no login: {message}", "登录已结束": "Login encerrado", "登录并添加": "Entrar e adicionar", "登录态文件路径:~/.box-agent/config/auth.json(Windows:C:\\Users\\<你的用户名>\\.box-agent\\config\\auth.json)": "Caminho do arquivo de sessão de login: ~/.box-agent/config/auth.json (Windows: C:\\Users\\\\.box-agent\\config\\auth.json)", "确定删除自定义提供商「{name}」?将同时删除该提供商下 {count} 个账号,删除后无法恢复。": "Excluir o provedor personalizado \"{name}\"? Isso também excluirá {count} contas desse provedor; a exclusão não pode ser desfeita.", "等待 Accio {label}登录完成…": "Aguardando a conclusão do login do Accio {label}…", "等待 CatPaw 登录完成…": "Aguardando a conclusão do login do CatPaw…", "等待 Cline 授权确认…": "Aguardando a confirmação de autorização do Cline…", "等待 CodeArts 登录完成…": "Aguardando a conclusão do login do CodeArts…", "等待 Google 授权完成…": "Aguardando a conclusão da autorização do Google…", "等待 KukuAI 登录完成…": "Aguardando a conclusão do login do KukuAI…", "等待 OfficeAce 登录完成…": "Aguardando a conclusão do login do OfficeAce…", "等待 OrcaTerm 登录完成…": "Aguardando o login no OrcaTerm…", "等待 Qoder 授权完成…": "Aguardando a conclusão da autorização do Qoder…", "等待 Trae 授权完成…": "Aguardando a conclusão da autorização do Trae…", "等待 ZCode {label}授权完成…": "Aguardando a conclusão da autorização do ZCode {label}…", "等待小浣熊登录完成…": "Aguardando a conclusão do login do Raccoon…", "等待登录完成…": "Aguardando a conclusão do login…", "等待网页登录…": "Aguardando o login web…", "粘贴 API Key": "Colar API Key", "粘贴 API 令牌": "Colar token de API", "粘贴 Accio 的 accessToken": "Colar o accessToken do Accio", "粘贴 Antigravity 的 Google refresh token(以 1// 开头;直接粘贴含 refresh_token= 的整行也行)。
这是网页登录之外的手工入口(例如从已登录的官方 IDE 里导出)。refresh token 不会过期,access token 到期由网关自动续期;令牌丢了只能重新走 Google 授权,请妥善保存。": "Cole o Google refresh token do Antigravity (começa com 1//; também pode colar a linha inteira que contém refresh_token=).
Esta é uma entrada manual além do login web (por exemplo, exportada do IDE oficial em que você já está conectado). O refresh token não expira, e o gateway renova o access token automaticamente ao expirar; se o token for perdido, só resta refazer a autorização do Google, então guarde-o bem.", "粘贴 Command Code 的 API Key(user_ 开头;从官方 CLI 的 ~/.commandcode/auth.json 或网页 studio 获取)。整行 / 带引号 / 带 Bearer 前缀地粘都行,网关会自己剥成裸 key。key 不过期、也没有续期接口,失效后重新获取即可;添加时网关会做一次轻量探活,失败不影响添加。": "Cole a API Key do Command Code (começa com user_; obtenha no ~/.commandcode/auth.json do CLI oficial ou no studio web). Colar a linha inteira / com aspas / com o prefixo Bearer funciona; o gateway extrai a key pura sozinho. A key não expira e não há API de renovação, então basta obter uma nova se ela deixar de funcionar. Ao adicionar, o gateway faz uma verificação leve de atividade; uma falha não impede a adição.", "粘贴 Cookie": "Colar Cookie", "粘贴 Google refresh token": "Colar Google refresh token", "粘贴 OrcaTerm 的 OAuth accessToken(JWT,三段点分;从桌面客户端 data.bin 或 Web 版 Cookie ot_session 获取)。直接粘贴含 Bearer / ot_session= 的整行也行,网关会自己剥成裸 token。添加后由网关自动续期(上游有续期接口),无需跟随 2 小时时效手动更换。": "Cole o accessToken OAuth do OrcaTerm (um JWT com três partes separadas por pontos; obtido do data.bin do cliente desktop ou do cookie ot_session da versão web). Também pode colar a linha inteira contendo Bearer / ot_session= — o gateway extrai apenas o token. Após adicionar, o gateway renova automaticamente (o upstream tem API de renovação), sem precisar acompanhar a expiração de 2 horas manualmente.", "粘贴 Qoder 个人访问令牌(pt-…)": "Colar o token de acesso pessoal do Qoder (pt-…)", "粘贴 accessToken": "Colar accessToken", "粘贴 access_token(一长串 JWT)": "Colar o access_token (um JWT longo)", "粘贴 session cookie": "Colar session cookie", "粘贴 token / refreshToken": "Colar token / refreshToken", "粘贴 workos:… 开头的令牌(不带前缀也会自动补上)": "Cole um token começando com workos:… (o prefixo é adicionado automaticamente se faltar)", "粘贴智谱清言的访问令牌(JWT,三段点分)。获取方式:浏览器打开 chatglm.cn 并登录后,在开发者工具的 Application → Cookies 里复制 chatglm_token 的值(也可以直接粘 chatglm_token=…; 整行)。粘贴后会先向上游校验一次,校验通过才落账号;登录账号的积分、签到能力都能用,之后由网关自动续期(上游有续期接口)。": "Cole um token de acesso do Zhipu Qingyan (um JWT com três partes separadas por ponto). Como obter: abra chatglm.cn no navegador, faça login e copie o valor do cookie chatglm_token em Application → Cookies nas ferramentas de desenvolvedor (colar a linha chatglm_token=…; inteira também funciona). O token é verificado uma vez na origem após a colagem, e a conta só é salva se passar; contas conectadas têm pontos e check-in, e o gateway renova automaticamente depois (a origem tem API de renovação).", "粘贴登录凭据": "Colar credenciais de login", "粘贴的是登录 session(同时是模型网关的 token)。Loomy 没有续期接口,session 有效期约 14 天,过期后重新登录即可。": "O que você cola é a sessão de login (que também é o token do gateway de modelos). O Loomy não tem API de renovação; a sessão vale cerca de 14 dias, então basta entrar de novo após expirar.", "粘贴网关凭据": "Colar credenciais do gateway", "粘贴网页登录态 cookie monkeycode_ai_session 的值(在浏览器里复制整段 Cookie 直接粘贴也行,网关会自己剥出值)。
{siteNote}
MonkeyCode 没有续期接口:session 有效期约 30 天(硬限制),过期后重新登录网页、再粘贴一次即可。": "Cole o valor do cookie de sessão de login web monkeycode_ai_session (copiar o Cookie inteiro no navegador e colar diretamente também funciona; o gateway extrai o valor sozinho).
{siteNote}
O MonkeyCode não tem API de renovação: a sessão vale cerca de 30 dias (limite rígido); quando expirar, entre novamente no site e cole mais uma vez.", "粘贴访问令牌": "Cole o token de acesso", "系统浏览器": "Navegador do sistema", "系统浏览器可复用已有登录态(国际版推荐);内嵌窗口更干净。": "O navegador do sistema pode reaproveitar a sessão de login existente (recomendado para a edição internacional); a janela embutida é mais limpa.", "系统浏览器打开(复用已登录的 Cline 账号);完成后自动加入列表": "Abre no navegador do sistema (reaproveita a conta Cline já conectada); ao concluir, entra automaticamente na lista", "系统浏览器打开(复用已登录的 Google 账号);完成后自动加入列表": "Abre no navegador do sistema (reutiliza a conta Google já conectada); ao concluir, entra automaticamente na lista", "系统浏览器打开(复用已登录的 Zai / Google 账号);完成后自动加入列表": "Abre no navegador do sistema (reaproveita a conta Zai / Google já conectada); ao concluir, entra automaticamente na lista", "系统浏览器打开(复用已登录的美团账号);完成后自动加入列表": "Abre no navegador do sistema (reaproveita a conta Meituan já conectada); ao concluir, entra automaticamente na lista", "系统浏览器打开(复用已登录账号);完成后自动加入列表": "Abre no navegador do sistema (reaproveita a conta já conectada); ao concluir, entra automaticamente na lista", "系统默认浏览器": "Navegador padrão do sistema", "编码套餐 API Key": "API Key do Coding Plan", "网关 Secret": "Segredo do gateway", "网页登录": "Login web", "网页登录的打开方式": "Como abrir o login web", "网页登录(Zai / Google)": "Login web (Zai / Google)", "自定义": "Personalizado", "自建聚合面板:填你自己的站点地址。余额查询用该账号的 API Key 打 {base}/v1/usage,不需要额外配置": "Painel de agregação próprio: preencha o endereço do seu site. A consulta de saldo chama {base}/v1/usage com a chave de API desta conta; sem configuração extra", "自建聚合面板:填你自己的站点地址;余额查询要另填 NewAPI 的个人访问令牌(见下方「余额查询」一段)": "Painel de agregação próprio: preencha o endereço do seu site; a consulta de saldo precisa também de um token de acesso pessoal do NewAPI (veja \"Consulta de saldo\" abaixo)", "获取风控配置失败,将直接尝试领取:{message}": "Falha ao obter a configuração de controle de risco; tentando resgatar diretamente: {message}", "获取验证码": "Obter código", "访客模式": "Modo visitante", "访客模式(免登录)": "Modo visitante (sem login)", "该上游无需鉴权(不发送鉴权头)": "Este upstream não exige autenticação (nenhum cabeçalho de autenticação é enviado)", "该提供商": "Este provedor", "该提供商账号添加功能即将上线": "A adição de contas deste provedor chega em breve", "该自定义提供商已不存在(可能已被删除),请刷新后重试": "Este provedor personalizado não existe mais (pode ter sido excluído); atualize e tente novamente", "请先选择一个自定义提供商": "Selecione primeiro um provedor personalizado", "请在弹出的滑块中完成验证(官方要求的风控步骤)": "Conclua a verificação no slider exibido (etapa de controle de risco exigida pelo provedor)", "请填写 11 位大陆手机号": "Informe um número de celular da China continental com 11 dígitos", "请填写 6 位数字验证码": "Informe o código de 6 dígitos", "请填写 Base URL": "Preencha a Base URL", "请填写 {label}": "Preencha {label}", "请填写名称": "Preencha o nome", "请完成验证…": "Conclua a verificação…", "读取 %APPDATA%/AutoClaw/auth.json 并解密,仅 Windows": "Lê e descriptografa %APPDATA%/AutoClaw/auth.json; somente no Windows", "读取 ~/.cline/data/settings/providers.json,需已在 Cline 客户端登录": "Lê ~/.cline/data/settings/providers.json; requer login no cliente Cline", "读取 ~/.meituan-catpaw/auth.json,需已在 CatPaw 客户端登录": "Lê ~/.meituan-catpaw/auth.json; requer login no cliente CatPaw", "读取本机 KukuAI 客户端登录态(%APPDATA%\\baidugenflowpro\\Network\\Cookies),需已在 KukuAI 客户端登录": "Lê a sessão de login do cliente KukuAI desta máquina (%APPDATA%\\baidugenflowpro\\Network\\Cookies); requer login no cliente KukuAI", "读取本机 OrcaTerm 客户端登录态(%APPDATA%\\com.orcaterm-desktop.app\\data.bin),需已在 OrcaTerm 客户端登录": "Lê o estado de login do cliente OrcaTerm local (%APPDATA%\\com.orcaterm-desktop.app\\data.bin); é preciso estar logado no cliente OrcaTerm", "读取本机智谱清言客户端登录态(%APPDATA%\\chatglm\\Network\\Cookies),需已在客户端登录": "Lê o estado de login do cliente 智谱清言 local (%APPDATA%\\chatglm\\Network\\Cookies); o cliente precisa estar conectado", "读本机官方客户端(Tencent WorkBuddy / WorkBuddy AI)当前登录的账号:自动定位其凭证目录里最新的登录态文件(需已在本机官方客户端登录)。导入后由网关自动续期,无需跟随 2 小时时效手动换令牌。": "Lê a conta atualmente conectada no cliente oficial (Tencent WorkBuddy / WorkBuddy AI) nesta máquina: o arquivo de sessão mais recente no diretório de credenciais é localizado automaticamente (é preciso estar conectado ao cliente oficial nesta máquina). Após a importação, o gateway renova o token automaticamente — não é preciso trocar tokens manualmente conforme a validade de 2 horas.", "读本机客户端当前登录态(明文 Cookie,无需解密)。客户端运行时 Cookies 文件被独占占用,导入前请先关闭 KukuAI 客户端。": "Lê a sessão de login atual do cliente desta máquina (Cookie em texto claro, sem descriptografia). Com o cliente em execução, o arquivo Cookies fica em uso exclusivo; feche o cliente KukuAI antes de importar.", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。": "Lê a sessão de login atual do cliente desta máquina, em tempo real a cada vez (excluir este registro não afeta a sessão de login do cliente).", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。客户端重新登录后点「刷新 Token」同步。": "Lê a sessão de login atual do cliente desta máquina, em tempo real a cada vez (excluir este registro não afeta a sessão de login do cliente). Após entrar novamente no cliente, clique em \"Atualizar Token\" para sincronizar.", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。客户端重新登录后重新导入即可。": "Lê a sessão de login atual do cliente desta máquina, em tempo real a cada vez (excluir este registro não afeta a sessão de login do cliente). Após entrar novamente no cliente, basta importar de novo.", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。用 Zai / Google 登录客户端的用户走这一条。": "Lê a sessão de login atual do cliente desta máquina, em tempo real a cada vez (excluir este registro não afeta a sessão de login do cliente). Usuários que entram no cliente com Zai / Google devem usar esta opção.", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。这一条归入 {label}。": "Lê a sessão de login atual do cliente desta máquina, em tempo real a cada vez (excluir este registro não afeta a sessão de login do cliente). Esta opção fica em {label}.", "读本机客户端当前登录的 OAuth 令牌(明文 JSON,无需解密)。导入后由网关自动续期,无需跟随客户端的 2 小时时效手动换令牌。": "Lê o token OAuth com que o cliente local está logado (JSON em texto claro, sem descriptografia). Após importar, o gateway renova automaticamente — não é preciso acompanhar a expiração de 2 horas do cliente.", "读本机客户端当前的登录态。客户端的 Cookies 是 DPAPI 加密的(Chromium os_crypt),因此仅 Windows 可用;客户端正在运行时可能读不到该文件,先退出客户端再试即可(也可改用「填写凭证」粘贴令牌)。": "Lê o estado de login atual do cliente local. Os cookies do cliente são criptografados com DPAPI (Chromium os_crypt), portanto isto funciona somente no Windows; o arquivo pode ficar ilegível enquanto o cliente está aberto — feche o cliente e tente de novo (ou use \"Preencher credenciais\" para colar um token).", "账号信息": "Informações da conta", "账号信息不完整,请刷新后重试": "Informações da conta incompletas; atualize e tente novamente", "账号已添加,但请留意:{warning}": "Conta adicionada, mas atenção: {warning}", "账号版本": "Edição da conta", "账号类型": "Tipo de conta", "账号:{name}
": "Conta: {name}
", "走 Inference Providers 路由,Key 在 hf.co/settings/tokens 创建": "Usa a rota Inference Providers; crie a Key em hf.co/settings/tokens", "还没有账号": "Ainda não há contas", "这一家当前不支持网页登录,请改用填写凭证": "Este provedor não suporta login web no momento; use \"Preencher credenciais\"", "这个账号当前没有可自动领的活动(只自动领每日登录赠送积分)": "Esta conta não tem campanhas com resgate automático no momento (apenas os pontos de brinde do login diário são resgatados automaticamente)", "这份额度走「活动套餐」通道:若转发时提示编码套餐已到期,": "Esta cota passa pelo canal \"Start Plan\": se o encaminhamento avisar que o Coding Plan expirou, ", "这里填国内站(modelscope.cn)的账号:请粘贴国内站的令牌。国际站(modelscope.ai)是另一家 provider、另一套账号,两边的令牌不通用。": "Aqui é a conta do site da China (modelscope.cn): cole o token do site da China. O site internacional (modelscope.ai) é outro provider com outra conta; os tokens não são intercambiáveis entre os dois.", "这里填国内站(monkeycode-ai.com)的账号:请粘贴国内站的 session。国际站(monkeycode-ai.net)是另一家 provider、另一套账号,两边的凭证不通用。": "Aqui é a conta do site da China (monkeycode-ai.com): cole a sessão do site da China. O site internacional (monkeycode-ai.net) é outro provedor, com conta própria; as credenciais não são compartilhadas entre os dois.", "这里填国际站(modelscope.ai)的账号:请粘贴国际站的令牌。国内站(modelscope.cn)是另一家 provider、另一套账号,两边的令牌不通用。": "Aqui é a conta do site internacional (modelscope.ai): cole o token do site internacional. O site da China (modelscope.cn) é outro provider com outra conta; os tokens não são intercambiáveis entre os dois.", "这里填国际站(monkeycode-ai.net)的账号:请粘贴国际站的 session。国内站(monkeycode-ai.com)是另一家 provider、另一套账号,两边的凭证不通用。": "Aqui é a conta do site internacional (monkeycode-ai.net): cole a sessão do site internacional. O site da China (monkeycode-ai.com) é outro provedor, com conta própria; as credenciais não são compartilhadas entre os dois.", "选择 CatPaw 客户端的登录态文件 auth.json(Windows:C:\\Users\\<你的用户名>\\.meituan-catpaw\\auth.json;macOS / Linux:~/.meituan-catpaw/auth.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端。": "Selecione o arquivo de sessão de login auth.json do cliente CatPaw (Windows: C:\\Users\\\\.meituan-catpaw\\auth.json; macOS / Linux: ~/.meituan-catpaw/auth.json). Após a importação, as credenciais ficam no gateway e podem ser encaminhadas de forma independente — sem depender mais do cliente desta máquina.", "选择 Cline 客户端的登录态文件 providers.json(Windows:C:\\Users\\<你的用户名>\\.cline\\data\\settings\\providers.json;macOS / Linux:~/.cline/data/settings/providers.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端;这一条归入 {label}。": "Selecione o arquivo de sessão de login providers.json do cliente Cline (Windows: C:\\Users\\\\.cline\\data\\settings\\providers.json; macOS / Linux: ~/.cline/data/settings/providers.json). Após a importação, as credenciais ficam no gateway e podem ser encaminhadas de forma independente — sem depender mais do cliente desta máquina; este registro entra em {label}.", "选择 KukuAI 客户端的 Cookies 文件(%APPDATA%\\baidugenflowpro\\Network\\Cookies):它是**二进制** SQLite 数据库(无扩展名,不是 JSON)。导入时读的是你选中文件的副本、不和运行中的客户端抢占用,因此**无需先关闭客户端**。导入后凭证直接落在网关、可独立转发。": "Selecione o arquivo Cookies do cliente KukuAI (%APPDATA%\\baidugenflowpro\\Network\\Cookies): é um banco SQLite **binário** (sem extensão, não é JSON). A importação lê uma cópia do arquivo selecionado e não disputa o bloqueio com o cliente em execução, então **não é preciso fechar o cliente antes**. Após a importação, as credenciais ficam no gateway e podem ser encaminhadas de forma independente.", "选择凭证文件导入": "Importar de arquivo de credenciais", "选择官方客户端的登录态凭证文件(workbuddy-desktop.info / workbuddy-desktop-ai.info)或 wb2api 导出的账号 JSON(嵌套 / 扁平形均可)。": "Selecione o arquivo de credenciais de sessão do cliente oficial (workbuddy-desktop.info / workbuddy-desktop-ai.info) ou um JSON de conta exportado pelo wb2api (formato aninhado ou plano).", "选择小浣熊客户端的登录态文件 auth.json(Windows:C:\\Users\\<你的用户名>\\.box-agent\\config\\auth.json;macOS / Linux:~/.box-agent/config/auth.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端。": "Selecione o arquivo de sessão de login auth.json do cliente Raccoon (Windows: C:\\Users\\\\.box-agent\\config\\auth.json; macOS / Linux: ~/.box-agent/config/auth.json). Após a importação, as credenciais ficam no gateway e podem ser encaminhadas de forma independente — sem depender mais do cliente desta máquina.", "选择提供商": "Selecionar provedor", "选择的文件不是合法 JSON": "O arquivo selecionado não é um JSON válido", "选择要添加账号的提供商": "Selecione o provedor para adicionar uma conta", "重新扫描": "Escanear novamente", "鉴权": "Autenticação", "阿里云 Token Plan 套餐(国际站)": "Plano Token Plan do Alibaba Cloud (site internacional)", "阿里云百炼 Coding 套餐(国内站)": "Plano Coding do Alibaba Cloud Model Studio (site da China)", "阿里云百炼 Coding 套餐(国际站)": "Plano Coding do Alibaba Cloud Model Studio (site internacional)", "阿里云百炼模型服务(国际站,OpenAI 兼容模式)": "Serviço de modelos Alibaba Cloud Model Studio (site internacional, modo compatível com OpenAI)", "需要图形验证码:登录窗口已弹出,请填写后继续": "Captcha necessário: a janela de login foi aberta; preencha para continuar", "预置 API": "API predefinida", "领取 CodeArts 每日福利": "Resgatar benefício diário do CodeArts", "领取失败:{message}": "Falha ao resgatar: {message}", "领取并让官方确认": "Resgatar e aguardar confirmação oficial", "风控验证配置不完整,请稍后重试": "Configuração de verificação de controle de risco incompleta; tente novamente mais tarde", "验证码": "Código de verificação", "验证码已发送。收到后填入下方并点「登录并添加」": "Código enviado. Informe-o abaixo e clique em \"Entrar e adicionar\"", "验证码已发送,请查看手机短信": "Código enviado; verifique o SMS", "验证码已发送,请查看手机短信。填入下方并点「登录并添加」即完成登录": "Código enviado; verifique o SMS. Informe-o abaixo e clique em \"Entrar e adicionar\" para concluir o login", "验证码已发送,请查看短信": "Código enviado; verifique as mensagens", "验证码校验失败,请重试": "Falha na verificação do captcha; tente novamente", "验证码校验超时,请重试": "Tempo esgotado na verificação do captcha; tente novamente", "验证码组件不可用,请重试": "Componente de captcha indisponível; tente novamente", "验证码组件初始化超时,请重试": "Tempo esgotado ao inicializar o componente de captcha; tente novamente", "验证码组件加载失败,请检查网络后重试": "Falha ao carregar o componente de captcha; verifique a rede e tente novamente", "验证码组件加载异常,请重试": "Erro ao carregar o componente de captcha; tente novamente", "验证码组件加载超时,请检查网络后重试": "Tempo esgotado ao carregar o componente de captcha; verifique a rede e tente novamente", "验证码组件未加载,请重启应用后重试": "O componente de captcha não foi carregado; reinicie o aplicativo e tente novamente", "(免费额度池,模型名带 cline-free/ 前缀)。": " (pool de cota gratuita; nomes de modelo com o prefixo cline-free/).", "(其中 {n} 把恢复为不限制)": " ({n} das quais voltaram a ser ilimitadas)", "(必填)": " (obrigatório)", "(有效期 {window})": "(validade {window})", "(订阅池,模型名带 cline-pass/ 前缀,需要账号有对应订阅)。": " (pool de assinatura; nomes de modelo com o prefixo cline-pass/, e a conta precisa da assinatura correspondente).", ",下一次最快 {minutes} 分钟后": ", próxima tentativa em pelo menos {minutes} min", ",并从 {n} 把 Key 的可用提供商里移除": ", e removido dos provedores permitidos de {n} keys" });
diff --git a/desktop-tauri/ui/i18n/pt-BR/checkin.js b/desktop-tauri/ui/i18n/pt-BR/checkin.js
index 0de0c780..a8be7503 100644
--- a/desktop-tauri/ui/i18n/pt-BR/checkin.js
+++ b/desktop-tauri/ui/i18n/pt-BR/checkin.js
@@ -1,2 +1,2 @@
/* Agent2API 词典构建产物:pt-BR/checkin —— 由 desktop-tauri/i18n/build.mjs 生成,请勿手改;源头是 i18n-src/*.json */
-window.wbI18nDict = window.wbI18nDict || {}; Object.assign(window.wbI18nDict, { " · ": " · ", "SOLO 的 checkin_credits 领取 · 按自然日 0 点刷新": "Resgate de checkin_credits do SOLO · redefinido às 0h do dia natural", "UMID 组件安装失败:{error}": "Falha ao instalar o componente UMID: {error}", "WorkBuddy 国内版 · 查询任务树后一键点亮 / 领奖 · 含开学季与猫猫旅行 · 点击行展开明细": "WorkBuddy CN · Consulte a árvore de tarefas e acenda / resgate com um clique · inclui o evento de volta às aulas e a viagem do gato · clique na linha para detalhes", "WorkBuddy 国际版保活模型,按顺序回退": "Modelos do WorkBuddy internacional para manter ativo, com fallback em ordem", "WorkBuddy 国际版日活任务的免费模型 · 全局一份,与条目无关": "Modelos gratuitos da atividade diária do WorkBuddy Internacional · uma configuração global, independente dos agendamentos", "{date}(每天 {time})": "{date} (todos os dias às {time})", "{label} ×{count}({reason})": "{label} ×{count} ({reason})", "{n} 项可完成": "{n} para concluir", "{n} 项待领": "{n} itens a resgatar", "{total} 账号 · {done} 已签": "{total} contas · {done} com check-in", "{total} 项任务 · {pending} 项可完成": "{total} tarefas · {pending} para concluir", "✅ UMID 组件已安装,下轮签到即可领取国际版积分": "✅ Componente UMID instalado; no próximo check-in já dá para resgatar os pontos da edição internacional", "✅ {message}": "✅ {message}", "✅ 定时签到已开启": "✅ Check-in agendado ativado", "✅ 开学季任务执行完成": "✅ Tarefas de volta às aulas concluídas", "✅ 成长任务执行完成:积分 +{credit} 能量 +{energy}": "✅ Tarefas de crescimento concluídas: créditos +{credit}, energia +{energy}", "✅ 新手福利领取完成,累计 {n} 积分": "✅ Benefícios iniciais resgatados, {n} pontos no total", "✅ 签到完成:{succeeded}/{total} 个账号成功领取{active}": "✅ Check-in concluído: {succeeded}/{total} contas resgataram com sucesso{active}", "「保活模型链」是 WorkBuddy 国际版领日活时用来保活的免费模型,按顺序逐个尝试、 第一个成功即止;清空提交恢复缺省({defaults})。 当天去重 + 幂等领取:重复执行只会拿到「已领取」,不会重复加分。": "A \"cadeia de modelos de keep-alive\" são os modelos gratuitos usados para manter contas do WorkBuddy Internacional ativas na atividade diária — tentados em ordem, parando no primeiro sucesso; envie vazio para restaurar o padrão ({defaults}). Deduplicação no dia + resgate idempotente: repetir a execução só retorna \"já resgatado\" e nunca pontua duas vezes.", "「保活模型链」是 WorkBuddy 国际版领日活时用来保活的免费模型,按顺序逐个尝试、 第一个成功即止;清空清单并保存 = 恢复缺省链(当前缺省:{defaults})。 当天去重 + 幂等领取:重复执行只会拿到「已领取」,不会重复加分。": "A \"cadeia de modelos de keep-alive\" são os modelos gratuitos usados para manter contas do WorkBuddy Internacional ativas na atividade diária — tentados em ordem, parando no primeiro sucesso; limpar a lista e salvar restaura a cadeia padrão (padrão atual: {defaults}). Deduplicação no dia + resgate idempotente: repetir a execução só retorna \"já resgatado\" e nunca pontua duas vezes.", "「免费领积分」的每日任务 · 逐个领取": "Tarefa diária do “Ganhe pontos grátis” · resgate um a um", "一次性福利 · 签到后自动查询并领取,领完记在本机不再查上游 · 点击行展开任务清单": "Benefício único · consultado e resgatado automaticamente após o check-in; depois de resgatado, fica registrado localmente e o upstream não é mais consultado · clique na linha para expandir a lista de tarefas", "一次领当天全部奖励(每日签到 + 新人礼) · 幂等由上游保证": "Resgata todas as recompensas do dia em uma única ação (check-in diário + presente de novos usuários) · idempotência garantida pelo upstream", "一键安装组件": "Instalar componente", "一键完成": "Concluir tudo", "一键领取({n})": "Resgatar todos ({n})", "上次执行:{line}": "Última execução: {line}", "上次签到时间": "Último check-in", "上次领取 {time} · 领取需通过滑块验证码": "Último resgate: {time} · o resgate exige captcha deslizante", "下次 {date}": "Próxima {date}", "下次 {date} · 点此管理条目": "Próxima {date} · clique para gerenciar os agendamentos", "不参与每日签到:{list}。CodeArts 的一次性奖励在下方「新手福利」,它与 ZCode 的每日/套餐福利领取见「活动福利」。": "Fora do check-in diário: {list}. As recompensas únicas do CodeArts ficam em \"Benefícios iniciais\" abaixo; o resgate diário/de planos dele e do ZCode fica em \"Benefícios de atividade\".", "不参与每日签到:{list}。CodeArts 的一次性奖励在下方「新手福利」,它的每日福利就在上方「每日签到」里;ZCode 的套餐领取见「活动福利」。": "Fora do check-in diário: {list}. As recompensas únicas do CodeArts ficam em \"Benefícios iniciais\" abaixo, e o benefício diário dele fica logo acima em \"Check-in diário\"; o resgate de planos do ZCode fica em \"Benefícios de atividade\".", "与国内版同一套任务接口 · 站点不同": "Mesma interface de tarefas da edição da China · site diferente", "今天已领 {n} 份": "{n} resgatado(s) hoje", "今天未领": "Não resgatado hoje", "今天(北京时间 {day})已领取 · 官方确认到账 {n} 项 · 明天可再领": "Resgatado hoje (horário de Pequim, {day}) · {n} itens confirmados oficialmente · amanhã é possível resgatar novamente", "今日已执行": "Executado hoje", "今日已派出": "Já enviado hoje", "今日已领取": "Resgatado hoje", "今日签到": "Check-in de hoje", "今日签到进度": "Progresso do check-in de hoje", "从清单里移除": "Remover da lista", "保活": "Manter ativo", "保活 {n}": "{n} mantidos ativos", "保活+领取": "Manter ativo + Resgatar", "保活中…": "Mantendo ativo…", "保活模型链": "Cadeia de modelos para manter ativo", "全选": "Selecionar tudo", "全部 {n} 家": "Todos os {n} provedores", "全部完成": "Tudo concluído", "全部查询": "Consultar todos", "全部结果": "Todos os resultados", "全部账号均可签到": "Todas as contas podem fazer check-in", "全部领取": "Resgatar todos", "关着:所有条目都不执行": "Desligado: nenhum agendamento é executado", "删除失败:{error}": "Falha ao excluir: {error}", "删除定时条目": "Excluir agendamento", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活并在网页通道建会话点亮日活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;CodeArts 领当日的运营福利(领取 → 确认 → 回读核实,自动执行受每天 6 次 / 间隔 10 分钟的写请求限流);OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "No horário marcado, faz o check-in automático das contas habilitadas dos provedores marcados (WorkBuddy CN usa a API de check-in diário; a versão internacional usa a tarefa de atividade diária: detecta o evento, recebe a recompensa de atividade diária, mantém-se ativo com o modelo gratuito e abre uma sessão pelo canal web para acender a atividade do dia; o Raccoon usa o fluxo de pontos diários do desktop; o AutoClaw usa a tarefa de check-in diário do cliente oficial; o Qoder CN reivindica via evento, e contas sem evento atribuído recebem um aviso neutro; o Qoder internacional precisa primeiro de uma identidade de risco do dispositivo (gerada pelo componente UMID do cliente Qoder local / qodercli) para sequer ver o evento \"100 Credits diários\" — sem o componente, chega uma explicação clara em vez de um erro; o Trae recebe os pontos de check-in diário do SOLO (reiniciam à meia-noite), e quando o upstream não tem evento para a conta ou as credenciais não têm ID de dispositivo, chega \"não recebido + motivo\" em vez de erro; o Loomy credita os pontos de primeiro login uma vez por dia para a conta; o KukuAI recebe a tarefa diária \"Pontos grátis\"; o CodeArts recebe as vantagens operacionais do dia (receber → confirmar → verificar relendo; execuções automáticas limitadas a 6 requisições de escrita por dia, com 10 minutos de intervalo); o OfficeAce recebe todas as recompensas do dia de uma vez (check-in diário + brinde de novato)). Se a máquina estava desligada no horário, um check-in de reposição roda ao ligar — nada fica para trás. A API de check-in de cada provedor é idempotente: repetir nunca recebe duas vezes.", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;CodeArts 领当日的运营福利(领取 → 确认 → 回读核实,自动执行受每天 6 次 / 间隔 10 分钟的写请求限流);OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "No horário definido, o check-in automático é feito nas contas disponíveis dos provedores marcados (o WorkBuddy edição da China usa a interface de check-in diário; a edição internacional usa as tarefas de atividade diária: detectar o evento, resgatar a recompensa de atividade diária e então manter a conta ativa com modelos gratuitos; o Raccoon usa o fluxo diário de pontos do aplicativo desktop; o AutoClaw usa a tarefa de check-in diário do cliente oficial; o Qoder China usa o resgate de evento, e contas sem evento distribuído recebem um aviso neutro; o Qoder internacional precisa primeiro da identidade de controle de risco do dispositivo (gerada pelo componente UMID do cliente Qoder / qodercli local) para enxergar o evento “100 Credits diários”, e sem o componente recebe uma explicação clara em vez de um erro; o Trae resgata os pontos de check-in diário do SOLO (redefinidos às 0h do dia natural), e quando o upstream não abriu o evento para a conta ou a credencial não tem o ID do dispositivo, o resultado é “não resgatado + motivo específico” em vez de um erro; o Loomy credita uma vez por dia os pontos de primeiro login da conta; o KukuAI resgata a tarefa diária do “Ganhe pontos grátis”); o CodeArts resgata o benefício de campanha do dia (resgatar → confirmar → reler para verificar; execuções automáticas têm limite de 6 gravações por dia com intervalo de 10 minutos); o OfficeAce resgata todas as recompensas do dia em uma única ação (check-in diário + presente de novos usuários)). Se o horário for perdido, o check-in é compensado automaticamente após o computador ser ligado, sem que nada se perca por o computador estar desligado no horário. As interfaces de check-in de cada provedor são idempotentes; execuções repetidas não resgatam duas vezes.", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "No horário definido, o check-in automático é feito nas contas disponíveis dos provedores marcados (o WorkBuddy edição da China usa a interface de check-in diário; a edição internacional usa as tarefas de atividade diária: detectar o evento, resgatar a recompensa de atividade diária e então manter a conta ativa com modelos gratuitos; o Raccoon usa o fluxo diário de pontos do aplicativo desktop; o AutoClaw usa a tarefa de check-in diário do cliente oficial; o Qoder China usa o resgate de evento, e contas sem evento distribuído recebem um aviso neutro; o Qoder internacional precisa primeiro da identidade de controle de risco do dispositivo (gerada pelo componente UMID do cliente Qoder / qodercli local) para enxergar o evento “100 Credits diários”, e sem o componente recebe uma explicação clara em vez de um erro; o Trae resgata os pontos de check-in diário do SOLO (redefinidos às 0h do dia natural), e quando o upstream não abriu o evento para a conta ou a credencial não tem o ID do dispositivo, o resultado é “não resgatado + motivo específico” em vez de um erro; o Loomy credita uma vez por dia os pontos de primeiro login da conta; o KukuAI resgata a tarefa diária do “Ganhe pontos grátis”); o OfficeAce resgata todas as recompensas do dia em uma única ação (check-in diário + presente de novos usuários)). Se o horário for perdido, o check-in é compensado automaticamente após o computador ser ligado, sem que nada se perca por o computador estar desligado no horário. As interfaces de check-in de cada provedor são idempotentes; execuções repetidas não resgatam duas vezes.", "到点时逐个签到,已勾 {n} / {total} 家": "{n} de {total} marcados — o check-in é feito um por um no horário", "北京时间 · 错过时点开机后会自动补签": "Horário de Pequim · execuções perdidas são compensadas automaticamente ao iniciar", "去领取": "Resgatar", "另有 {n} 个账号不参与每日签到": "Outras {n} contas não participam do check-in diário", "只领取已完成任务的奖励(幂等,重复点不会重复入账)": "Resgatar apenas recompensas de tarefas concluídas (idempotente; cliques repetidos não creditam em dobro)", "可完成": "Pode concluir", "可派出": "Pode enviar", "可选 · 缺省显示时刻": "Opcional · usa o horário como padrão", "可领奖": "Pode resgatar", "后端未返回定时签到数据": "O backend não retornou dados de agendamento", "后端未返回签到中心数据": "O backend não retornou os dados da central de check-in", "国际版签到需要 UMID 组件生成设备风控身份(本机未检测到)。": "O check-in da edição internacional exige o componente UMID para gerar a identidade de controle de risco do dispositivo (não detectado nesta máquina).", "在途": "Em viagem", "填入缺省链": "Preencher cadeia padrão", "填好时刻与签到范围后点「保存」;名称可以留空(界面显示时刻)": "Escolha o horário e os provedores e clique em Salvar; o nome é opcional (quando vazio, mostra-se o horário)", "失败 {n}": "{n} com falha", "套餐明细": "Detalhes dos planos", "安装 Qoder 客户端或 qodercli 后即可(无需重启网关)。": "Basta instalar o cliente Qoder ou o qodercli (não é preciso reiniciar o gateway).", "安装中…": "Instalando…", "官方客户端的每日签到任务": "Tarefa de check-in diário do cliente oficial", "定时签到": "Check-in agendado", "定时签到已关闭": "Check-in agendado desativado", "尚未查询": "Ainda não consultado", "尚未查询任务状态": "Status das tarefas ainda não consultado", "巡检一次": "Executar uma rodada", "已保存:{label}": "Salvo: {label}", "已保存:保活模型链": "Salvo: cadeia de modelos para manter ativo", "已保存:定时条目": "Salvo: agendamento", "已删除定时条目": "Agendamento excluído", "已完成活跃上报(连登已点亮),但活动未开启(本次没有可领的奖励)": "Atividade reportada (ofensiva acesa), mas a campanha não está ativa (nada para resgatar desta vez)", "已抽 {n} 次": "Sorteou {n} vezes", "已有结果 {checked} / 共 {total} 个账号": "Já com resultado: {checked} / {total} contas", "已签": "Com check-in", "已领 {claimed}/{total} · 累计 {earned} 积分": "Resgatado {claimed}/{total} · {earned} pontos acumulados", "已领养": "Adotado", "已领取": "Resgatado", "带设备风控身份领取「每日 100 Credits」 · 需要 UMID 组件": "Resgatar “100 Credits diários” com a identidade de controle de risco do dispositivo · requer o componente UMID", "开学季执行失败:{error}": "Falha na execução de volta às aulas: {error}", "开学季执行完成:{message}": "Execução de volta às aulas concluída: {message}", "开学季活动": "Evento de volta às aulas", "开着:启用的条目按各自时刻执行": "Ligado: agendamentos habilitados rodam em seus próprios horários", "待签": "Pendente", "待领新手福利": "Benefícios iniciais pendentes", "总开关": "Interruptor principal", "总开关已关闭 · 在「定时签到」页打开": "Interruptor principal desligado · ative na aba \"Check-in agendado\"", "成功 {n}": "{n} com sucesso", "成长任务": "Tarefas de crescimento", "成长任务完成({done} 项成功、{failed} 项失败),积分 +{credit} 能量 +{energy}": "Tarefas de crescimento concluídas ({done} com sucesso, {failed} com falha): créditos +{credit}, energia +{energy}", "成长任务执行失败:{error}": "Falha na execução das tarefas de crescimento: {error}", "执行失败:{error}": "Falha na execução: {error}", "执行并抽奖": "Executar e sortear", "执行开学季任务并抽空抽奖机会(分享 / 对话 / 专家事件)": "Executar as tarefas de volta às aulas e gastar todas as chances de sorteio (compartilhar / conversar / eventos de especialista)", "把缺省链填进清单,再点「保存」生效": "Coloca a cadeia padrão na lista; clique em Salvar para aplicar", "抽奖机会 {n} 次": "{n} chances de sorteio", "按住拖动调整顺序": "Pressione e arraste para reordenar", "按住拖动,调整这个模型在链里的顺序": "Pressione e arraste para mudar a posição deste modelo na cadeia", "按序逐个尝试,共 {n} 个": "{n} modelos, tentados em ordem", "按结果筛选": "Filtrar por resultado", "探测 + 领取 + 保活 · 与定时签到同一套组合": "Detectar + resgatar + manter ativo · mesma combinação do check-in agendado", "探测活动并领取日活奖励 · 不做保活": "Detectar o evento e resgatar a recompensa de atividade diária · sem manter ativo", "接单 + 点亮 + 领奖(只处理已实测沉淀的任务)": "Aceitar + acender + resgatar (apenas tarefas com receita verificada)", "搜账号 / 收益 / 错误 / 触发原因": "Pesquisar conta / ganho / erro / motivo do disparo", "收起新建": "Fechar novo item", "新建定时条目": "Nova entrada agendada", "新手福利": "Benefícios iniciais", "新手福利有 {n} 项领取失败,可重试": "{n} item(ns) dos benefícios iniciais falharam no resgate — é possível tentar novamente", "无": "Nenhum", "无独立签到接口 · 每天替账号打一次首次登录积分": "Sem interface de check-in própria · credita uma vez por dia os pontos de primeiro login da conta", "无账号": "Sem contas", "暂不可领": "Indisponível", "暂不支持": "Ainda não suportado", "暂无启用的条目 · 点此添加": "Nenhum agendamento habilitado · clique para adicionar", "有未保存的改动": "Alterações não salvas", "未勾选提供商": "Nenhum provedor selecionado", "未开启": "Desativado", "未解锁": "Bloqueado", "未领养(领养需先完成当日对话量)": "Não adotado (a adoção exige cumprir a cota diária de conversas primeiro)", "未领取": "Não resgatado", "本地台账里今天还没领过;活动期内每天发一份新套餐": "O registro local ainda não tem resgate nenhum hoje; um novo plano é emitido todo dia durante o evento", "本地台账里今天(北京时间)领过的套餐:{plans}": "Planos resgatados hoje (horário de Pequim) conforme o registro local: {plans}", "条启用": "habilitado(s)", "查询于 {time}": "Consultado em {time}", "查询任务": "Consultar tarefas", "查询任务树并一键点亮 / 领奖(含开学季与猫猫旅行)": "Consulte a árvore de tarefas e acenda / resgate com um clique (inclui volta às aulas e viagem do gato)", "查询失败:{error}": "Falha na consulta: {error}", "桌面端每日积分链路": "Fluxo diário de pontos do aplicativo desktop", "正在读取定时签到数据…": "Carregando dados de agendamento…", "正在读取签到数据…": "Lendo os dados de check-in…", "每天 {time}": "Todos os dias às {time}", "每天 {time} · {scope}": "Diário {time} · {scope}", "每天时刻": "Horário diário", "每执行一次签到 · 每个账号一条明细 · 结果与收益以后端落账为准": "Uma linha por conta a cada execução · resultados e ganhos conforme registrado pelo backend", "每日活跃任务 · 网页会话保活点亮日活,领取才加积分 · 两者可分开执行": "Tarefas de atividade diária · uma conversa no canal web acende a atividade diária, só o resgate adiciona pontos · os dois podem ser executados separadamente", "每日登录积分 · 顺带领取会员活动 · 访客账号无积分体系(跳过)": "Pontos de login diário · resgata atividades de membro junto · contas de visitante não têm sistema de pontos (ignorado)", "每日福利 · 领取 → 确认 → 回读核实 · 按北京时间自然日重置": "Benefício diário · resgatar → confirmar → reler para verificar · redefinido no dia natural (horário de Pequim)", "每日签到": "Check-in diário", "每条条目各有时刻与范围 · 各自当天去重 · 错过时点开机自动补签": "Cada agendamento tem horário e escopo próprios · deduplicação diária por item · execuções perdidas são compensadas ao iniciar", "每账号一条明细 · 点此查看「签到记录」": "Uma linha por conta · abra \"Registros de check-in\"", "没有可领套餐的账号(ZCode 未添加)。": "Nenhuma conta com planos resgatáveis (ZCode não adicionado).", "没有可领福利的账号(CodeArts / ZCode 未添加)。": "Nenhuma conta com benefícios para resgatar (CodeArts / ZCode não foram adicionados).", "没有支持成长任务的账号(需要 WorkBuddy 国内版)。": "Nenhuma conta suporta tarefas de crescimento (requer WorkBuddy CN).", "没有支持新手福利的账号": "Nenhuma conta suporta benefícios iniciais", "没有支持新手福利的账号 —— 目前有 Loomy、小浣熊、CodeArts 三家。": "Nenhuma conta suporta benefícios iniciais — atualmente Loomy, Raccoon e CodeArts.", "没有符合筛选条件的签到记录": "Nenhum registro de check-in corresponde aos filtros", "没有需要执行的任务": "Nada para executar", "活动福利": "Recompensas de evento", "活动(campaign)领取 · 每天 10:00 刷新": "Resgate de eventos (campaign) · atualizado todos os dias às 10:00", "活跃上报与保活均未成功,且活动未开启": "Tanto o relatório de atividade quanto o keep-alive falharam, e a campanha não está ativa", "活跃上报完成,但保活未成功且活动未开启": "Atividade reportada, mas o keep-alive falhou e a campanha não está ativa", "活跃上报完成,但活动未开启": "Atividade reportada, mas a campanha não está ativa", "活跃上报成功": "Atividade reportada com sucesso", "活跃保活失败": "Falha ao manter a atividade", "活跃保活完成": "Atividade mantida", "活跃保活完成,但活动未开启": "Atividade mantida, mas o evento não está aberto", "活跃保活完成,但活跃上报失败且活动未开启": "Keep-alive concluído, mas o relatório de atividade falhou e a campanha não está ativa", "添加条目": "Adicionar agendamento", "添加模型": "Adicionar modelo", "清单为空 —— 保存后恢复缺省链": "A lista está vazia — salvar restaura a cadeia padrão", "清单里已经有「{name}」": "A lista já contém \"{name}\"", "清空失败:{error}": "Falha ao limpar: {error}", "清空签到记录": "Limpar registros de check-in", "点「套餐明细」看领到了哪几份、什么时候生效;活动期内每天可再领": "Clique em \"Detalhes dos planos\" para ver quais você recebeu e quando entram em vigor; dá para resgatar de novo todo dia durante o evento", "点击行展开账号明细 · 单账号签到不受范围限制": "Clique na linha para expandir os detalhes das contas · o check-in individual não é limitado pelo escopo", "独立链路 · 只提供手动入口 · 不进自动签到": "Fluxo independente · apenas entrada manual · não participa do check-in automático", "猫猫旅行": "Viagem do gato", "猫猫旅行失败:{error}": "Falha na viagem do gato: {error}", "猫猫旅行失败:{message}": "Falha na viagem do gato: {message}", "猫猫旅行:{message}": "Viagem do gato: {message}", "用免费模型与网页会话维持账号活跃 · 不领取奖励": "Manter a conta ativa com modelos gratuitos e uma conversa no canal web · sem resgatar recompensas", "确定删除「{name}」?删除后到点不再执行。": "Excluir \"{name}\"? Ele não será mais executado no horário agendado.", "确定清空全部签到记录?清空后无法恢复。": "Limpar todos os registros de check-in? Isso não pode ser desfeito.", "确定清空当前筛选出的签到记录?清空后无法恢复。": "Limpar os registros de check-in filtrados? Isso não pode ser desfeito.", "移除 {name}": "Remover {name}", "立即全部签到": "Fazer check-in de todos agora", "签到": "Check-in", "签到中…": "Fazendo check-in…", "签到中心分区": "Seções do centro de check-in", "签到失败:{error}": "Falha no check-in: {error}", "签到完成:{succeeded}/{total} 成功{active},{failed} 个失败": "Check-in concluído: {succeeded}/{total} com sucesso{active}; {failed} com falha", "签到成功": "Check-in bem-sucedido", "签到提供商": "Provedores de check-in", "签到范围": "Escopo do check-in", "签到触发时刻": "Horário de disparo do check-in", "签到记录": "Registros de check-in", "签到记录时间范围": "Período dos registros de check-in", "签到记录表": "Tabela de registros de check-in", "累计签到记录": "Total de registros de check-in", "结算于 {time}": "Liquidado em {time}", "能量 {n}": "Energia {n}", "腾讯每日签到接口 · 仅国内版": "Interface de check-in diário da Tencent · apenas edição da China", "至少勾一家才能保存(不勾等于这条条目不签到)": "Selecione ao menos um provedor para salvar (sem seleção, esta entrada não faz check-in)", "读取定时签到数据失败:{error}": "Falha ao carregar dados de agendamento: {error}", "读取签到数据失败:{error}": "Falha ao ler os dados de check-in: {error}", "读取签到记录失败:{error}": "Falha ao carregar registros de check-in: {error}", "跳过 {n}": "{n} ignorados", "运营活动交付(领取 → 确认 → 回读核实)· 领的是套餐赠送积分": "Entrega de eventos oficiais (resgatar → confirmar → reler para verificar) · resgate dos pontos de bônus do plano", "还没执行过": "Ainda não executado", "还没有定时条目 —— 点「添加条目」建一条,或到「签到中心」手动签到。": "Nenhum agendamento ainda — clique em \"Adicionar agendamento\" para criar um, ou faça check-in manualmente no \"Centro de check-in\".", "还没有签到记录 —— 手动签到或等定时条目执行后,明细会出现在这里。": "Nenhum registro de check-in ainda — os detalhes aparecem aqui após um check-in manual ou uma execução agendada.", "连登 {n} 天": "Sequência de {n} dias", "部分": "Parcial", "重签": "Refazer check-in", "重试": "Tentar de novo", "限时体验套餐 · 领取需滑块验证码 · 逐份查看与领取": "Plano de teste por tempo limitado · o resgate exige CAPTCHA de arrastar · veja e resgate um a um", "限时体验套餐(start-plan),活动期内每天一份 · 领取需滑块验证码": "Plano de teste por tempo limitado (start-plan), um por dia durante o evento · o resgate exige captcha deslizante", "需真实操作": "Requer ação real", "非活动期": "Evento inativo", "项": "itens", "领取": "Resgatar", "领取中": "Resgatando", "领取中…": "Resgatando…", "领取失败": "Falha no resgate", "领取失败:{error}": "Falha no resgate: {error}", "(共 {n} 个账号)": "({n} contas no total)", "(能量 / 连登读数本次未取到)": "(Leituras de energia / sequência indisponíveis desta vez)", ",日活保活 {n} 个": ", {n} mantidas ativas" });
+window.wbI18nDict = window.wbI18nDict || {}; Object.assign(window.wbI18nDict, { " · ": " · ", "SOLO 的 checkin_credits 领取 · 按自然日 0 点刷新": "Resgate de checkin_credits do SOLO · redefinido às 0h do dia natural", "UMID 组件安装失败:{error}": "Falha ao instalar o componente UMID: {error}", "WorkBuddy 国内版 · 查询任务树后一键点亮 / 领奖 · 含开学季与猫猫旅行 · 点击行展开明细": "WorkBuddy CN · Consulte a árvore de tarefas e acenda / resgate com um clique · inclui o evento de volta às aulas e a viagem do gato · clique na linha para detalhes", "WorkBuddy 国际版保活模型,按顺序回退": "Modelos do WorkBuddy internacional para manter ativo, com fallback em ordem", "WorkBuddy 国际版日活任务的免费模型 · 全局一份,与条目无关": "Modelos gratuitos da atividade diária do WorkBuddy Internacional · uma configuração global, independente dos agendamentos", "{date}(每天 {time})": "{date} (todos os dias às {time})", "{label} ×{count}({reason})": "{label} ×{count} ({reason})", "{n} 项可完成": "{n} para concluir", "{n} 项待领": "{n} itens a resgatar", "{total} 账号 · {done} 已签": "{total} contas · {done} com check-in", "{total} 项任务 · {pending} 项可完成": "{total} tarefas · {pending} para concluir", "✅ UMID 组件已安装,下轮签到即可领取国际版积分": "✅ Componente UMID instalado; no próximo check-in já dá para resgatar os pontos da edição internacional", "✅ {message}": "✅ {message}", "✅ 定时签到已开启": "✅ Check-in agendado ativado", "✅ 开学季任务执行完成": "✅ Tarefas de volta às aulas concluídas", "✅ 成长任务执行完成:积分 +{credit} 能量 +{energy}": "✅ Tarefas de crescimento concluídas: créditos +{credit}, energia +{energy}", "✅ 新手福利领取完成,累计 {n} 积分": "✅ Benefícios iniciais resgatados, {n} pontos no total", "✅ 签到完成:{succeeded}/{total} 个账号成功领取{active}": "✅ Check-in concluído: {succeeded}/{total} contas resgataram com sucesso{active}", "「保活模型链」是 WorkBuddy 国际版领日活时用来保活的免费模型,按顺序逐个尝试、 第一个成功即止;清空提交恢复缺省({defaults})。 当天去重 + 幂等领取:重复执行只会拿到「已领取」,不会重复加分。": "A \"cadeia de modelos de keep-alive\" são os modelos gratuitos usados para manter contas do WorkBuddy Internacional ativas na atividade diária — tentados em ordem, parando no primeiro sucesso; envie vazio para restaurar o padrão ({defaults}). Deduplicação no dia + resgate idempotente: repetir a execução só retorna \"já resgatado\" e nunca pontua duas vezes.", "「保活模型链」是 WorkBuddy 国际版领日活时用来保活的免费模型,按顺序逐个尝试、 第一个成功即止;清空清单并保存 = 恢复缺省链(当前缺省:{defaults})。 当天去重 + 幂等领取:重复执行只会拿到「已领取」,不会重复加分。": "A \"cadeia de modelos de keep-alive\" são os modelos gratuitos usados para manter contas do WorkBuddy Internacional ativas na atividade diária — tentados em ordem, parando no primeiro sucesso; limpar a lista e salvar restaura a cadeia padrão (padrão atual: {defaults}). Deduplicação no dia + resgate idempotente: repetir a execução só retorna \"já resgatado\" e nunca pontua duas vezes.", "「免费领积分」的每日任务 · 逐个领取": "Tarefa diária do “Ganhe pontos grátis” · resgate um a um", "一次性福利 · 签到后自动查询并领取,领完记在本机不再查上游 · 点击行展开任务清单": "Benefício único · consultado e resgatado automaticamente após o check-in; depois de resgatado, fica registrado localmente e o upstream não é mais consultado · clique na linha para expandir a lista de tarefas", "一次领当天全部奖励(每日签到 + 新人礼) · 幂等由上游保证": "Resgata todas as recompensas do dia em uma única ação (check-in diário + presente de novos usuários) · idempotência garantida pelo upstream", "一键安装组件": "Instalar componente", "一键完成": "Concluir tudo", "一键领取({n})": "Resgatar todos ({n})", "上次执行:{line}": "Última execução: {line}", "上次签到时间": "Último check-in", "上次领取 {time} · 领取需通过滑块验证码": "Último resgate: {time} · o resgate exige captcha deslizante", "下次 {date}": "Próxima {date}", "下次 {date} · 点此管理条目": "Próxima {date} · clique para gerenciar os agendamentos", "不参与每日签到:{list}。CodeArts 的一次性奖励在下方「新手福利」,它与 ZCode 的每日/套餐福利领取见「活动福利」。": "Fora do check-in diário: {list}. As recompensas únicas do CodeArts ficam em \"Benefícios iniciais\" abaixo; o resgate diário/de planos dele e do ZCode fica em \"Benefícios de atividade\".", "不参与每日签到:{list}。CodeArts 的一次性奖励在下方「新手福利」,它的每日福利就在上方「每日签到」里;ZCode 的套餐领取见「活动福利」。": "Fora do check-in diário: {list}. As recompensas únicas do CodeArts ficam em \"Benefícios iniciais\" abaixo, e o benefício diário dele fica logo acima em \"Check-in diário\"; o resgate de planos do ZCode fica em \"Benefícios de atividade\".", "与国内版同一套任务接口 · 站点不同": "Mesma interface de tarefas da edição da China · site diferente", "与国内版同一套链路 · 站点不同、令牌不通用": "Mesmo fluxo da edição China · site diferente, tokens não intercambiáveis", "今天已领 {n} 份": "{n} resgatado(s) hoje", "今天未领": "Não resgatado hoje", "今天(北京时间 {day})已领取 · 官方确认到账 {n} 项 · 明天可再领": "Resgatado hoje (horário de Pequim, {day}) · {n} itens confirmados oficialmente · amanhã é possível resgatar novamente", "今日已执行": "Executado hoje", "今日已派出": "Já enviado hoje", "今日已领取": "Resgatado hoje", "今日签到": "Check-in de hoje", "今日签到进度": "Progresso do check-in de hoje", "从清单里移除": "Remover da lista", "保活": "Manter ativo", "保活 {n}": "{n} mantidos ativos", "保活+领取": "Manter ativo + Resgatar", "保活中…": "Mantendo ativo…", "保活模型链": "Cadeia de modelos para manter ativo", "全选": "Selecionar tudo", "全部 {n} 家": "Todos os {n} provedores", "全部完成": "Tudo concluído", "全部查询": "Consultar todos", "全部结果": "Todos os resultados", "全部账号均可签到": "Todas as contas podem fazer check-in", "全部领取": "Resgatar todos", "关着:开机后等到窗口起点再签,随机窗口当天生效": "Desligado: após iniciar, esperar o início da janela para que a janela aleatória valha hoje", "关着:所有条目都不执行": "Desligado: nenhum agendamento é executado", "分钟 · 窗口内逐个账号随机执行,0 = 到点立即执行": "minutos · contas executam em momentos aleatórios dentro da janela; 0 = executar imediatamente no horário", "删除失败:{error}": "Falha ao excluir: {error}", "删除定时条目": "Excluir agendamento", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活并在网页通道建会话点亮日活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;CodeArts 领当日的运营福利(领取 → 确认 → 回读核实,自动执行受每天 6 次 / 间隔 10 分钟的写请求限流);OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。设了「随机前后 N 分钟」时,本轮账号在各自窗口内分散执行(窗口夹在当天 0 点到 23:59 之间),不再全部挤在同一分钟;窗口已过则立即全部执行。错过时点开机后会自动补签,不会因为当时没开机而漏掉(可在「启动补签」关掉,改为等到窗口起点)。各家签到接口都是幂等的,重复执行不会重复领取。": "Faz check-in nas contas disponíveis dos provedores marcados quando chega a hora (WorkBuddy CN usa a API de check-in diário; WorkBuddy Intl usa a tarefa de atividade diária: sondar atividades, resgatar a recompensa diária, manter um modelo gratuito ativo e abrir uma sessão web para acender a sequência; Raccoon usa a cadeia diária de pontos do desktop; AutoClaw usa a tarefa diária de sign-in do cliente oficial; Qoder CN resgata campanhas e mostra um aviso neutro para contas sem campanha; Qoder Intl precisa de uma identidade de risco do dispositivo (gerada pelo componente UMID do cliente Qoder / qodercli local) para ver a campanha de '100 Credits diários' e mostra uma explicação clara em vez de erro quando o componente falta; Trae resgata os créditos de check-in diário do SOLO (reset à meia-noite local) e informa 'não resgatado + motivo' em vez de erro quando o upstream não tem campanha para a conta ou a credencial não tem device id; Loomy chama o endpoint de pontos do primeiro login uma vez por dia; KukuAI resgata as tarefas diárias de 'pontos grátis'; CodeArts resgata o benefício diário de operações (resgatar → confirmar → reler, com execuções automáticas limitadas a 6 escritas por dia e 10 minutos de intervalo; OfficeAce resgata todas as recompensas do dia (check-in diário + presente de novato) em uma chamada). Com 'margem aleatória de N minutos', as contas de uma rodada executam espalhadas dentro da própria janela (limitada a 0:00-23:59 do mesmo dia) em vez de todas no mesmo minuto; se a janela já passou, todas executam imediatamente. Execuções perdidas são recuperadas após iniciar, então nada se perde quando a máquina estava desligada (desligue 'Recuperação na inicialização' para esperar o início da janela). A API de check-in de cada provedor é idempotente, então execuções repetidas nunca resgatam duas vezes.", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;CodeArts 领当日的运营福利(领取 → 确认 → 回读核实,自动执行受每天 6 次 / 间隔 10 分钟的写请求限流);OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "No horário definido, o check-in automático é feito nas contas disponíveis dos provedores marcados (o WorkBuddy edição da China usa a interface de check-in diário; a edição internacional usa as tarefas de atividade diária: detectar o evento, resgatar a recompensa de atividade diária e então manter a conta ativa com modelos gratuitos; o Raccoon usa o fluxo diário de pontos do aplicativo desktop; o AutoClaw usa a tarefa de check-in diário do cliente oficial; o Qoder China usa o resgate de evento, e contas sem evento distribuído recebem um aviso neutro; o Qoder internacional precisa primeiro da identidade de controle de risco do dispositivo (gerada pelo componente UMID do cliente Qoder / qodercli local) para enxergar o evento “100 Credits diários”, e sem o componente recebe uma explicação clara em vez de um erro; o Trae resgata os pontos de check-in diário do SOLO (redefinidos às 0h do dia natural), e quando o upstream não abriu o evento para a conta ou a credencial não tem o ID do dispositivo, o resultado é “não resgatado + motivo específico” em vez de um erro; o Loomy credita uma vez por dia os pontos de primeiro login da conta; o KukuAI resgata a tarefa diária do “Ganhe pontos grátis”); o CodeArts resgata o benefício de campanha do dia (resgatar → confirmar → reler para verificar; execuções automáticas têm limite de 6 gravações por dia com intervalo de 10 minutos); o OfficeAce resgata todas as recompensas do dia em uma única ação (check-in diário + presente de novos usuários)). Se o horário for perdido, o check-in é compensado automaticamente após o computador ser ligado, sem que nada se perca por o computador estar desligado no horário. As interfaces de check-in de cada provedor são idempotentes; execuções repetidas não resgatam duas vezes.", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "No horário definido, o check-in automático é feito nas contas disponíveis dos provedores marcados (o WorkBuddy edição da China usa a interface de check-in diário; a edição internacional usa as tarefas de atividade diária: detectar o evento, resgatar a recompensa de atividade diária e então manter a conta ativa com modelos gratuitos; o Raccoon usa o fluxo diário de pontos do aplicativo desktop; o AutoClaw usa a tarefa de check-in diário do cliente oficial; o Qoder China usa o resgate de evento, e contas sem evento distribuído recebem um aviso neutro; o Qoder internacional precisa primeiro da identidade de controle de risco do dispositivo (gerada pelo componente UMID do cliente Qoder / qodercli local) para enxergar o evento “100 Credits diários”, e sem o componente recebe uma explicação clara em vez de um erro; o Trae resgata os pontos de check-in diário do SOLO (redefinidos às 0h do dia natural), e quando o upstream não abriu o evento para a conta ou a credencial não tem o ID do dispositivo, o resultado é “não resgatado + motivo específico” em vez de um erro; o Loomy credita uma vez por dia os pontos de primeiro login da conta; o KukuAI resgata a tarefa diária do “Ganhe pontos grátis”); o OfficeAce resgata todas as recompensas do dia em uma única ação (check-in diário + presente de novos usuários)). Se o horário for perdido, o check-in é compensado automaticamente após o computador ser ligado, sem que nada se perca por o computador estar desligado no horário. As interfaces de check-in de cada provedor são idempotentes; execuções repetidas não resgatam duas vezes.", "到点时逐个签到,已勾 {n} / {total} 家": "{n} de {total} marcados — o check-in é feito um por um no horário", "北京时间 · 错过时点开机后会自动补签": "Horário de Pequim · execuções perdidas são compensadas automaticamente ao iniciar", "去领取": "Resgatar", "另有 {n} 个账号不参与每日签到": "Outras {n} contas não participam do check-in diário", "只领取已完成任务的奖励(幂等,重复点不会重复入账)": "Resgatar apenas recompensas de tarefas concluídas (idempotente; cliques repetidos não creditam em dobro)", "可完成": "Pode concluir", "可派出": "Pode enviar", "可选 · 缺省显示时刻": "Opcional · usa o horário como padrão", "可领奖": "Pode resgatar", "后端未返回定时签到数据": "O backend não retornou dados de agendamento", "后端未返回签到中心数据": "O backend não retornou os dados da central de check-in", "启动补签": "Recuperação na inicialização", "启动补签已关闭": "Recuperação na inicialização desativada", "启动补签已开启": "Recuperação na inicialização ativada", "国际版签到需要 UMID 组件生成设备风控身份(本机未检测到)。": "O check-in da edição internacional exige o componente UMID para gerar a identidade de controle de risco do dispositivo (não detectado nesta máquina).", "在途": "Em viagem", "填入缺省链": "Preencher cadeia padrão", "填好时刻与签到范围后点「保存」;名称可以留空(界面显示时刻)": "Escolha o horário e os provedores e clique em Salvar; o nome é opcional (quando vazio, mostra-se o horário)", "失败 {n}": "{n} com falha", "套餐明细": "Detalhes dos planos", "安装 Qoder 客户端或 qodercli 后即可(无需重启网关)。": "Basta instalar o cliente Qoder ou o qodercli (não é preciso reiniciar o gateway).", "安装中…": "Instalando…", "官方客户端的每日签到任务": "Tarefa de check-in diário do cliente oficial", "定时签到": "Check-in agendado", "定时签到已关闭": "Check-in agendado desativado", "尚未查询": "Ainda não consultado", "尚未查询任务状态": "Status das tarefas ainda não consultado", "巡检一次": "Executar uma rodada", "已保存:{label}": "Salvo: {label}", "已保存:保活模型链": "Salvo: cadeia de modelos para manter ativo", "已保存:定时条目": "Salvo: agendamento", "已删除定时条目": "Agendamento excluído", "已完成活跃上报(连登已点亮),但活动未开启(本次没有可领的奖励)": "Atividade reportada (ofensiva acesa), mas a campanha não está ativa (nada para resgatar desta vez)", "已抽 {n} 次": "Sorteou {n} vezes", "已有结果 {checked} / 共 {total} 个账号": "Já com resultado: {checked} / {total} contas", "已签": "Com check-in", "已领 {claimed}/{total} · 累计 {earned} 积分": "Resgatado {claimed}/{total} · {earned} pontos acumulados", "已领养": "Adotado", "已领取": "Resgatado", "带设备风控身份领取「每日 100 Credits」 · 需要 UMID 组件": "Resgatar “100 Credits diários” com a identidade de controle de risco do dispositivo · requer o componente UMID", "开学季执行失败:{error}": "Falha na execução de volta às aulas: {error}", "开学季执行完成:{message}": "Execução de volta às aulas concluída: {message}", "开学季活动": "Evento de volta às aulas", "开着:启用的条目按各自时刻执行": "Ligado: agendamentos habilitados rodam em seus próprios horários", "开着:开机后今天没签过的条目立刻补签,不看随机窗口": "Ligado: agendamentos ainda não executados hoje são recuperados logo após iniciar, ignorando a janela aleatória", "待签": "Pendente", "待领新手福利": "Benefícios iniciais pendentes", "总开关": "Interruptor principal", "总开关已关闭 · 在「定时签到」页打开": "Interruptor principal desligado · ative na aba \"Check-in agendado\"", "成功 {n}": "{n} com sucesso", "成长任务": "Tarefas de crescimento", "成长任务完成({done} 项成功、{failed} 项失败),积分 +{credit} 能量 +{energy}": "Tarefas de crescimento concluídas ({done} com sucesso, {failed} com falha): créditos +{credit}, energia +{energy}", "成长任务执行失败:{error}": "Falha na execução das tarefas de crescimento: {error}", "执行失败:{error}": "Falha na execução: {error}", "执行并抽奖": "Executar e sortear", "执行开学季任务并抽空抽奖机会(分享 / 对话 / 专家事件)": "Executar as tarefas de volta às aulas e gastar todas as chances de sorteio (compartilhar / conversar / eventos de especialista)", "把缺省链填进清单,再点「保存」生效": "Coloca a cadeia padrão na lista; clique em Salvar para aplicar", "抽奖机会 {n} 次": "{n} chances de sorteio", "按住拖动调整顺序": "Pressione e arraste para reordenar", "按住拖动,调整这个模型在链里的顺序": "Pressione e arraste para mudar a posição deste modelo na cadeia", "按序逐个尝试,共 {n} 个": "{n} modelos, tentados em ordem", "按结果筛选": "Filtrar por resultado", "探测 + 领取 + 保活 · 与定时签到同一套组合": "Detectar + resgatar + manter ativo · mesma combinação do check-in agendado", "探测活动并领取日活奖励 · 不做保活": "Detectar o evento e resgatar a recompensa de atividade diária · sem manter ativo", "接单 + 点亮 + 领奖(只处理已实测沉淀的任务)": "Aceitar + acender + resgatar (apenas tarefas com receita verificada)", "搜账号 / 收益 / 错误 / 触发原因": "Pesquisar conta / ganho / erro / motivo do disparo", "收起新建": "Fechar novo item", "新建定时条目": "Nova entrada agendada", "新手福利": "Benefícios iniciais", "新手福利有 {n} 项领取失败,可重试": "{n} item(ns) dos benefícios iniciais falharam no resgate — é possível tentar novamente", "无": "Nenhum", "无独立签到接口 · 每天替账号打一次登录信息(即当日魔粒)": "Sem API de check-in dedicada · acessa o endpoint de informações de login uma vez por dia por conta (o que concede os Magicubes diários)", "无独立签到接口 · 每天替账号打一次首次登录积分": "Sem interface de check-in própria · credita uma vez por dia os pontos de primeiro login da conta", "无账号": "Sem contas", "暂不可领": "Indisponível", "暂不支持": "Ainda não suportado", "暂无启用的条目 · 点此添加": "Nenhum agendamento habilitado · clique para adicionar", "有未保存的改动": "Alterações não salvas", "未勾选提供商": "Nenhum provedor selecionado", "未开启": "Desativado", "未解锁": "Bloqueado", "未领养(领养需先完成当日对话量)": "Não adotado (a adoção exige cumprir a cota diária de conversas primeiro)", "未领取": "Não resgatado", "本地台账里今天还没领过;活动期内每天发一份新套餐": "O registro local ainda não tem resgate nenhum hoje; um novo plano é emitido todo dia durante o evento", "本地台账里今天(北京时间)领过的套餐:{plans}": "Planos resgatados hoje (horário de Pequim) conforme o registro local: {plans}", "条启用": "habilitado(s)", "查询于 {time}": "Consultado em {time}", "查询任务": "Consultar tarefas", "查询任务树并一键点亮 / 领奖(含开学季与猫猫旅行)": "Consulte a árvore de tarefas e acenda / resgate com um clique (inclui volta às aulas e viagem do gato)", "查询失败:{error}": "Falha na consulta: {error}", "桌面端每日积分链路": "Fluxo diário de pontos do aplicativo desktop", "正在读取定时签到数据…": "Carregando dados de agendamento…", "正在读取签到数据…": "Lendo os dados de check-in…", "每天 {time}": "Todos os dias às {time}", "每天 {time} · {scope}": "Diário {time} · {scope}", "每天 {time} · 随机前后 {n} 分钟 · {scope}": "Diariamente {time} ± {n} min · {scope}", "每天时刻": "Horário diário", "每执行一次签到 · 每个账号一条明细 · 结果与收益以后端落账为准": "Uma linha por conta a cada execução · resultados e ganhos conforme registrado pelo backend", "每日活跃任务 · 网页会话保活点亮日活,领取才加积分 · 两者可分开执行": "Tarefas de atividade diária · uma conversa no canal web acende a atividade diária, só o resgate adiciona pontos · os dois podem ser executados separadamente", "每日登录积分 · 顺带领取会员活动 · 访客账号无积分体系(跳过)": "Pontos de login diário · resgata atividades de membro junto · contas de visitante não têm sistema de pontos (ignorado)", "每日福利 · 领取 → 确认 → 回读核实 · 按北京时间自然日重置": "Benefício diário · resgatar → confirmar → reler para verificar · redefinido no dia natural (horário de Pequim)", "每日签到": "Check-in diário", "每条条目各有时刻与范围 · 各自当天去重 · 错过时点开机自动补签": "Cada agendamento tem horário e escopo próprios · deduplicação diária por item · execuções perdidas são compensadas ao iniciar", "每账号一条明细 · 点此查看「签到记录」": "Uma linha por conta · abra \"Registros de check-in\"", "没有可领套餐的账号(ZCode 未添加)。": "Nenhuma conta com planos resgatáveis (ZCode não adicionado).", "没有可领福利的账号(CodeArts / ZCode 未添加)。": "Nenhuma conta com benefícios para resgatar (CodeArts / ZCode não foram adicionados).", "没有支持成长任务的账号(需要 WorkBuddy 国内版)。": "Nenhuma conta suporta tarefas de crescimento (requer WorkBuddy CN).", "没有支持新手福利的账号": "Nenhuma conta suporta benefícios iniciais", "没有支持新手福利的账号 —— 目前有 Loomy、小浣熊、CodeArts 三家。": "Nenhuma conta suporta benefícios iniciais — atualmente Loomy, Raccoon e CodeArts.", "没有符合筛选条件的签到记录": "Nenhum registro de check-in corresponde aos filtros", "没有需要执行的任务": "Nada para executar", "活动福利": "Recompensas de evento", "活动(campaign)领取 · 每天 10:00 刷新": "Resgate de eventos (campaign) · atualizado todos os dias às 10:00", "活跃上报与保活均未成功,且活动未开启": "Tanto o relatório de atividade quanto o keep-alive falharam, e a campanha não está ativa", "活跃上报完成,但保活未成功且活动未开启": "Atividade reportada, mas o keep-alive falhou e a campanha não está ativa", "活跃上报完成,但活动未开启": "Atividade reportada, mas a campanha não está ativa", "活跃上报成功": "Atividade reportada com sucesso", "活跃保活失败": "Falha ao manter a atividade", "活跃保活完成": "Atividade mantida", "活跃保活完成,但活动未开启": "Atividade mantida, mas o evento não está aberto", "活跃保活完成,但活跃上报失败且活动未开启": "Keep-alive concluído, mas o relatório de atividade falhou e a campanha não está ativa", "添加条目": "Adicionar agendamento", "添加模型": "Adicionar modelo", "清单为空 —— 保存后恢复缺省链": "A lista está vazia — salvar restaura a cadeia padrão", "清单里已经有「{name}」": "A lista já contém \"{name}\"", "清空失败:{error}": "Falha ao limpar: {error}", "清空签到记录": "Limpar registros de check-in", "点「套餐明细」看领到了哪几份、什么时候生效;活动期内每天可再领": "Clique em \"Detalhes dos planos\" para ver quais você recebeu e quando entram em vigor; dá para resgatar de novo todo dia durante o evento", "点击行展开账号明细 · 单账号签到不受范围限制": "Clique na linha para expandir os detalhes das contas · o check-in individual não é limitado pelo escopo", "独立链路 · 只提供手动入口 · 不进自动签到": "Fluxo independente · apenas entrada manual · não participa do check-in automático", "猫猫旅行": "Viagem do gato", "猫猫旅行失败:{error}": "Falha na viagem do gato: {error}", "猫猫旅行失败:{message}": "Falha na viagem do gato: {message}", "猫猫旅行:{message}": "Viagem do gato: {message}", "用免费模型与网页会话维持账号活跃 · 不领取奖励": "Manter a conta ativa com modelos gratuitos e uma conversa no canal web · sem resgatar recompensas", "确定删除「{name}」?删除后到点不再执行。": "Excluir \"{name}\"? Ele não será mais executado no horário agendado.", "确定清空全部签到记录?清空后无法恢复。": "Limpar todos os registros de check-in? Isso não pode ser desfeito.", "确定清空当前筛选出的签到记录?清空后无法恢复。": "Limpar os registros de check-in filtrados? Isso não pode ser desfeito.", "移除 {name}": "Remover {name}", "立即全部签到": "Fazer check-in de todos agora", "签到": "Check-in", "签到中…": "Fazendo check-in…", "签到中心分区": "Seções do centro de check-in", "签到失败:{error}": "Falha no check-in: {error}", "签到完成:{succeeded}/{total} 成功{active},{failed} 个失败": "Check-in concluído: {succeeded}/{total} com sucesso{active}; {failed} com falha", "签到成功": "Check-in bem-sucedido", "签到提供商": "Provedores de check-in", "签到范围": "Escopo do check-in", "签到触发时刻": "Horário de disparo do check-in", "签到记录": "Registros de check-in", "签到记录时间范围": "Período dos registros de check-in", "签到记录表": "Tabela de registros de check-in", "累计签到记录": "Total de registros de check-in", "结算于 {time}": "Liquidado em {time}", "能量 {n}": "Energia {n}", "腾讯每日签到接口 · 仅国内版": "Interface de check-in diário da Tencent · apenas edição da China", "至少勾一家才能保存(不勾等于这条条目不签到)": "Selecione ao menos um provedor para salvar (sem seleção, esta entrada não faz check-in)", "读取定时签到数据失败:{error}": "Falha ao carregar dados de agendamento: {error}", "读取签到数据失败:{error}": "Falha ao ler os dados de check-in: {error}", "读取签到记录失败:{error}": "Falha ao carregar registros de check-in: {error}", "跳过 {n}": "{n} ignorados", "运营活动交付(领取 → 确认 → 回读核实)· 领的是套餐赠送积分": "Entrega de eventos oficiais (resgatar → confirmar → reler para verificar) · resgate dos pontos de bônus do plano", "还没执行过": "Ainda não executado", "还没有定时条目 —— 点「添加条目」建一条,或到「签到中心」手动签到。": "Nenhum agendamento ainda — clique em \"Adicionar agendamento\" para criar um, ou faça check-in manualmente no \"Centro de check-in\".", "还没有签到记录 —— 手动签到或等定时条目执行后,明细会出现在这里。": "Nenhum registro de check-in ainda — os detalhes aparecem aqui após um check-in manual ou uma execução agendada.", "连登 {n} 天": "Sequência de {n} dias", "部分": "Parcial", "重签": "Refazer check-in", "重试": "Tentar de novo", "限时体验套餐 · 领取需滑块验证码 · 逐份查看与领取": "Plano de teste por tempo limitado · o resgate exige CAPTCHA de arrastar · veja e resgate um a um", "限时体验套餐(start-plan),活动期内每天一份 · 领取需滑块验证码": "Plano de teste por tempo limitado (start-plan), um por dia durante o evento · o resgate exige captcha deslizante", "随机前后": "Margem aleatória", "需真实操作": "Requer ação real", "非活动期": "Evento inativo", "项": "itens", "领取": "Resgatar", "领取中": "Resgatando", "领取中…": "Resgatando…", "领取失败": "Falha no resgate", "领取失败:{error}": "Falha no resgate: {error}", "(共 {n} 个账号)": "({n} contas no total)", "(能量 / 连登读数本次未取到)": "(Leituras de energia / sequência indisponíveis desta vez)", ",日活保活 {n} 个": ", {n} mantidas ativas" });
diff --git a/desktop-tauri/ui/i18n/zh-Hant/add-account.js b/desktop-tauri/ui/i18n/zh-Hant/add-account.js
index 93b9b262..47d69dc7 100644
--- a/desktop-tauri/ui/i18n/zh-Hant/add-account.js
+++ b/desktop-tauri/ui/i18n/zh-Hant/add-account.js
@@ -1,2 +1,2 @@
/* Agent2API 词典构建产物:zh-Hant/add-account —— 由 desktop-tauri/i18n/build.mjs 生成,请勿手改;源头是 i18n-src/*.json */
-window.wbI18nDict = window.wbI18nDict || {}; Object.assign(window.wbI18nDict, { " · 模型 {head}{rest}": " · 模型 {head}{rest}", " 等 {n} 个": " 等 {n} 個", "1// 开头的 Google refresh token(也可直接粘贴 refresh_token=… 整行)": "1// 開頭的 Google refresh token(也可直接貼上 refresh_token=… 整行)", "11 位大陆手机号": "11 位大陸手機號", "1~64 个字符,账号列表里按它分组显示": "1~64 個字元,帳號列表裡按它分組顯示", "6 位数字": "6 位數字", "没有可自动领的活动": "沒有可自動領的活動", "领到的是套餐赠送积分,不会增加福利模型的 token 池;": "
領到的是套餐贈送積分,不會增加福利模型的 token 池;", "Anthropic 兼容端点在 https://api.deepseek.com/anthropic(协议换 anthropic 时填它)": "Anthropic 相容端點在 https://api.deepseek.com/anthropic(協議換 anthropic 時填它)", "Anthropic 协议填根地址,不要带 /v1": "Anthropic 協議填根地址,不要帶 /v1", "Antigravity": "Antigravity", "AutoClaw 国内版": "AutoClaw 國內版", "AutoClaw 国际版": "AutoClaw 國際版", "BDUSS 必填;请粘贴**完整 Cookie**(Cookie 编辑器一键导出即可)—— 其中 **PTOKEN 必须保留**,网关要用它向百度换发 KukuAI 业务会话令牌,缺了它模型刷新会报「未登录」。支持整段 Cookie 头、Cookie 编辑器导出的 JSON 数组,或 {BDUSS, STOKEN} 对象。KukuAI 没有刷新机制,登录态过期后重新粘贴即可。": "BDUSS 必填;請貼上**完整 Cookie**(Cookie 編輯器一鍵匯出即可)—— 其中 **PTOKEN 必須保留**,閘道器要用它向百度換髮 KukuAI 業務會話權杖,缺了它模型重新整理會報「未登入」。支援整段 Cookie 頭、Cookie 編輯器匯出的 JSON 陣列,或 {BDUSS, STOKEN} 物件。KukuAI 沒有重新整理機制,登入態過期後重新貼上即可。", "BDUSS=…; STOKEN=…(或 Cookie 编辑器导出的 JSON)": "BDUSS=…; STOKEN=…(或 Cookie 編輯器匯出的 JSON)", "CatPaw 的 X-Passport-Token(登录态 Cookie)": "CatPaw 的 X-Passport-Token(登入態 Cookie)", "Cline Pass 的 API Key 在 app.cline.bot 获取(订阅制);端点为 OpenAI 兼容,模型清单以 Cline 控制台为准,模型名在模型管理里按裸名添加(如 glm-5.2 / kimi-k2.7-code / deepseek-v4-pro);上游按客户端形态校验,所需的客户端请求头已随卡预置": "Cline Pass 的 API Key 在 app.cline.bot 獲取(訂閱制);端點為 OpenAI 相容,模型清單以 Cline 控制台為準,模型名在模型管理裡按裸名新增(如 glm-5.2 / kimi-k2.7-code / deepseek-v4-pro);上游按客戶端形態校驗,所需的客戶端請求頭已隨卡預置", "Cloud-IDE-JWT(三段点分)": "Cloud-IDE-JWT(三段點分)", "Command Code": "Command Code", "JWT(三段点分;也可直接粘贴 Bearer 整行或 data.bin 内容)": "JWT(三段點分;也可直接貼上 Bearer 整行或 data.bin 內容)", "JWT(三段点分;也可直接粘贴 chatglm_token=… 整行)": "JWT(三段點分;也可直接貼上 chatglm_token=… 整行)", "MonkeyCode": "MonkeyCode", "MonkeyCode 国际版": "MonkeyCode 國際版", "NVIDIA NIM 托管端点,Key 在 integrate.api.nvidia.com 申请": "NVIDIA NIM 託管端點,Key 在 integrate.api.nvidia.com 申請", "OfficeAce 果办": "OfficeAce 果辦", "accessToken 是 Accio 的登录凭证(一长串不透明 token,不是 JWT);refreshToken 可选,填了之后到期能自动续期。请填写 {label}账号的凭证 —— {siteNote}(最容易拿到的办法:直接用上方的「网页登录」,不需要手工找 token。)": "accessToken 是 Accio 的登入憑證(一長串不透明 token,不是 JWT);refreshToken 可選,填了之後到期能自動續期。請填寫 {label}帳號的憑證 —— {siteNote}(最容易拿到的辦法:直接用上方的「網頁登入」,不需要手工找 token。)", "accessToken 是 Trae 的 Cloud-IDE-JWT(三段点分),refreshToken 用于到期自动续期(本家 refreshToken 一次一换:换发一次旧的即作废,所以两份程序别同时刷同一个账号)。
手工粘贴时请连 machineId / deviceId 一起填:上游把它们与登录时上传的设备公钥绑在一起判设备,凭空换一对会撞 2xxxx 那族设备绑定拒绝。
没有这三样时的正路是用上方的「网页登录」;容器 / 远程部署形态按提示粘贴地址栏回调地址即可。": "accessToken 是 Trae 的 Cloud-IDE-JWT(三段點分),refreshToken 用於到期自動續期(本家 refreshToken 一次一換:換髮一次舊的即作廢,所以兩份程式別同時刷同一個帳號)。
手工貼上時請連 machineId / deviceId 一起填:上游把它們與登入時上傳的裝置公鑰綁在一起判裝置,憑空換一對會撞 2xxxx 那族裝置繫結拒絕。
沒有這三樣時的正路是用上方的「網頁登入」;容器 / 遠端部署形態按提示貼上位址列回撥地址即可。", "monkeycode_ai_session 的值(也可直接粘贴整段 Cookie)": "monkeycode_ai_session 的值(也可直接貼上整段 Cookie)", "refreshToken 可选,填了到期可自动续期;两者都能从小浣熊客户端登录态文件里取到。": "refreshToken 可選,填了到期可自動續期;兩者都能從小浣熊客戶端登入態檔案裡取到。", "refreshToken 可选,填了可自动续期;两者都能从客户端登录态文件取到。同一个 Cline 账号两个池都能用,这里归入 {label}。": "refreshToken 可選,填了可自動續期;兩者都能從客戶端登入態檔案取到。同一個 Cline 帳號兩個池都能用,這裡歸入 {label}。", "token 支持 enc: 前缀(Windows 上自动解密)。未填 refreshToken 无法自动续期。": "token 支援 enc: 字首(Windows 上自動解密)。未填 refreshToken 無法自動續期。", "token 是登录态 Cookie;CatPaw 没有刷新机制,过期后需在客户端重新登录。": "token 是登入態 Cookie;CatPaw 沒有重新整理機制,過期後需在客戶端重新登入。", "user_ 开头的 API Key(也可直接粘贴 Authorization: Bearer … 整行)": "user_ 開頭的 API Key(也可直接貼上 Authorization: Bearer … 整行)", "{label} 网页登录的打开方式": "{label} 網頁登入的開啟方式", "{label} 账号地区": "{label} 帳號地區", "{label} 账号的添加方式": "{label} 帳號的新增方式", "{name} 不是合法 JSON:{reason}": "{name} 不是合法 JSON:{reason}", "{name}要粘一个 JSON 对象(形如 {sample})": "{name}要粘一個 JSON 物件(形如 {sample})", "{n} 个账号": "{n} 個帳號", "{n} 个账号,点击添加": "{n} 個帳號,點擊新增", "{seconds}s 后重发": "{seconds}s 後重發", "✅ {label}账号已添加": "✅ {label}帳號已新增", "✅ {label}账号已添加{name}": "✅ {label}帳號已新增{name}", "✅ 已从 cc-switch 导入 {n} 个供应商": "✅ 已從 cc-switch 匯入 {n} 個供應商", "✅ 已创建自定义提供商「{name}」并添加账号": "✅ 已建立自定義提供商「{name}」並新增帳號", "✅ 已删除自定义提供商「{name}」{accounts}{keys}": "✅ 已刪除自定義提供商「{name}」{accounts}{keys}", "✅ 已更新已有账号{name}(同一把 API Key 只保留一条,重复添加会合并)": "✅ 已更新已有帳號{name}(同一把 API Key 只保留一條,重複新增會合並)", "✅ 登录成功,{edition}账号已加入列表": "✅ 登入成功,{edition}帳號已加入列表", "✅ 领取成功:{planId}{period}": "✅ 領取成功:{planId}{period}", " 同一家可以放多把 key,按优先级轮换。": " 同一家可以放多把 key,按優先順序輪換。", "「{name}」的账号添加功能还在开发中,敬请期待。": "「{name}」的帳號新增功能還在開發中,敬請期待。", "一个 Key 用遍多家模型,模型名用「厂商/模型」全称(如 deepseek/deepseek-chat)": "一個 Key 用遍多家模型,模型名用「廠商/模型」全稱(如 deepseek/deepseek-chat)", "上游不要鉴权时留空,并勾选下面一项(留空又不勾会被当成未配置凭证)": "上游不要鑑權時留空,並勾選下面一項(留空又不勾會被當成未配置憑證)", "上游信息": "上游資訊", "不可领({status})": "不可領({status})", "不支持导入": "不支援匯入", "不是有效的凭证文件:内容要是一个 JSON 对象": "不是有效的憑證檔案:內容要是一個 JSON 物件", "不是有效的凭证文件:需要包含 accessToken 与 uid": "不是有效的憑證檔案:需要包含 accessToken 與 uid", "不是自定义提供商": "不是自定義提供商", "不需要 Key:转发与拉取模型都不发送鉴权头": "不需要 Key:轉發與拉取模型都不傳送鑑權頭", "不需要登录:点下面的按钮,网关会直接在智谱清言换发一份访客凭证并加入账号列表(也可以先填个备注名)。访客凭证可以直接用来对话,免费额度由上游按设备发放。
注意:访客账号没有积分体系 —— 它与「会员积分」「每日登录积分」「活动领取」相关的接口一律需要登录,因此那些能力对访客会如实跳过(账号页的积分、签到中心都不显示读数)。想要积分就用「填写凭证」粘一个已登录账号的令牌,或「导入桌面端登录态」。": "不需要登入:點下面的按鈕,閘道器會直接在智譜清言換髮一份訪客憑證並加入帳號列表(也可以先填個備註名)。訪客憑證可以直接用來對話,免費額度由上游按裝置發放。
注意:訪客帳號沒有積分體系 —— 它與「會員積分」「每日登入積分」「活動領取」相關的介面一律需要登入,因此那些能力對訪客會如實跳過(帳號頁的積分、簽到中心都不顯示讀數)。想要積分就用「填寫憑證」粘一個已登入帳號的權杖,或「匯入桌面版登入態」。", "两版账号可同时保存,各自一份模型清单(国内版与国际版是两家提供商,可分别启用与映射)。": "兩版帳號可同時儲存,各自一份模型清單(國內版與國際版是兩家提供商,可分別啟用與對映)。", "中国版": "中國版", "今天没有需要领的活动(都已到账)": "今天沒有需要領的活動(都已到賬)", "今天(北京时间 {day})已试 {attempts} 次,还能试 {left} 次{next}
": "今天(北京時間 {day})已試 {attempts} 次,還能試 {left} 次{next}
", "从别的机器(或 OfficeAce 桌面端 models.json)取三项贴进来:模型网关基址(baseUrl,形如 https://modelgw-…/v2)与 modelAppKey / modelAppSecret。这三项就能转发(网关凭据不过期);控制面临时凭据(accessKeyId 等)可选,留空则额度/自动续期不可用,但不影响转发。": "從別的機器(或 OfficeAce 桌面版 models.json)取三項貼進來:模型閘道器基址(baseUrl,形如 https://modelgw-…/v2)與 modelAppKey / modelAppSecret。這三項就能轉發(閘道器憑據不過期);控制面臨時憑據(accessKeyId 等)可選,留空則額度/自動續期不可用,但不影響轉發。", "从本机导入桌面端登录态": "從本機匯入桌面版登入態", "任务镜像 id": "任務映象 id", "余额查询": "餘額查詢", "使用 Google 账号登录": "使用 Google 帳號登入", "使用 Zai 账号登录": "使用 Zai 帳號登入", "使用个人访问令牌(PAT)": "使用個人存取權杖(PAT)", "免费模型不用填 Key(默认勾上「该上游无需鉴权」,网关自动用匿名凭证);付费模型则填 Zen 的 API Key。免费档上游只认官方客户端形态,已默认开启「伪装 OpenCode 官方客户端」": "免費模型不用填 Key(預設勾上「該上游無需鑑權」,閘道器自動用匿名憑證);付費模型則填 Zen 的 API Key。免費檔上游只認官方客戶端形態,已預設開啟「偽裝 OpenCode 官方客戶端」", "内嵌窗口": "內嵌視窗", "内嵌窗口打开;关窗即取消等待(Google 账号被拒时改用系统浏览器)": "內嵌視窗開啟;關窗即取消等待(Google 帳號被拒時改用系統瀏覽器)", "内嵌窗口打开;完成后自动加入列表,关窗即取消等待": "內嵌視窗開啟;完成後自動加入列表,關窗即取消等待", "内嵌窗口打开;扫码完成后自动加入列表,关窗即取消等待": "內嵌視窗開啟;掃碼完成後自動加入列表,關窗即取消等待", "内嵌窗口用全新环境,多账号互不影响;关窗即取消等待": "內嵌視窗用全新環境,多帳號互不影響;關窗即取消等待", "内嵌窗口(推荐)": "內嵌視窗(推薦)", "准备验证…": "準備驗證…", "凭据 JSON": "憑據 JSON", "凭证文件在哪?": "憑證檔案在哪?", "创建并添加账号": "建立並新增帳號", "创建这个提供商,并同时建立它的第一个账号。": "建立這個提供商,並同時建立它的第一個帳號。", "删除功能不可用(脚本未就绪)": "刪除功能不可用(指令碼未就緒)", "删除失败:{reason}": "刪除失敗:{reason}", "删除此提供商": "刪除此提供商", "及 {n} 个账号": "及 {n} 個帳號", "发送中…": "傳送中…", "发送失败:{message}": "傳送失敗:{message}", "发送未确认:登录窗口已弹出,请在弹出的窗口中手动完成登录": "傳送未確認:登入視窗已彈出,請在彈出的視窗中手動完成登入", "取消失败:{message}": "取消失敗:{message}", "取消等待": "取消等待", "只有「内嵌窗口」能恢复第三方入口:系统浏览器里我们无法改动登录页": "只有「內嵌視窗」能恢復第三方入口:系統瀏覽器裡我們無法改動登入頁", "可选": "可選", "可选(cloudaicompanionProject):留空由网关自动发现": "可選(cloudaicompanionProject):留空由閘道器自動發現", "可选,展示用": "可選,展示用", "可选,没有则无法自动续期": "可選,沒有則無法自動續期", "可选,留空使用凭据里的 user_name": "可選,留空使用憑據裡的 user_name", "可选,留空使用账号姓名、邮箱或令牌指纹": "可選,留空使用帳號姓名、郵箱或權杖指紋", "可选,留空使用账号昵称或邮箱": "可選,留空使用帳號暱稱或郵箱", "可选,留空则用 key 尾号": "可選,留空則用 key 尾號", "可选,留空则用 userId": "可選,留空則用 userId", "可选,留空则用上游返回的账号名或账号 id": "可選,留空則用上游返回的帳號名或帳號 id", "可选,留空则用凭证里的账号名": "可選,留空則用憑證裡的帳號名", "可选,留空则用文件里的昵称": "可選,留空則用檔案裡的暱稱", "可选,留空则用登录名或 uid": "可選,留空則用登入名或 uid", "可选,留空则用脱敏手机号": "可選,留空則用脫敏手機號", "可选,留空则用脱敏手机号或 userId": "可選,留空則用脫敏手機號或 userId", "可选,留空则用账号 uk": "可選,留空則用帳號 uk", "可选,留空则用账号昵称": "可選,留空則用帳號暱稱", "可选,留空则用账号昵称或 userId": "可選,留空則用帳號暱稱或 userId", "可选,留空则用邮箱或令牌尾号": "可選,留空則用郵箱或權杖尾號", "可选,留空用「OfficeAce 果办」": "可選,留空用「OfficeAce 果辦」", "可选,留空自动生成": "可選,留空自動生成", "可选,留空自动用昵称": "可選,留空自動用暱稱", "可选,给这个访客账号起个备注名": "可選,給這個訪客帳號起個備註名", "可选,续期时带上": "可選,續期時帶上", "可选,讯飞侧 userid": "可選,訊飛側 userid", "可选:发起对话必需,留空则由网关从该账号已有任务里自动发现,发现不到时之后手动补": "可選:發起對話必需,留空則由閘道器從該帳號已有任務裡自動發現,發現不到時之後手動補", "可选:账号邮箱,用于展示与身份识别(换新令牌也能认回同一账号)": "可選:帳號郵箱,用於展示與身份識別(換新權杖也能認回同一帳號)", "可选;UUID 形态,与凭据同生共死": "可選;UUID 形態,與憑據同生共死", "可选;填了才能到期自动续期": "可選;填了才能到期自動續期", "可选;用于去重与展示名(留空时网关会问一次上游)": "可選;用於去重與展示名(留空時閘道器會問一次上游)", "可选;用于生成账号 id 与展示名": "可選;用於生成帳號 id 與展示名", "可选;纯数字串(上游只收 8–24 位数字)": "可選;純數字串(上游只收 8–24 位數字)", "可领取": "可領取", "同一家可以混着放:有 Key 的账号与无鉴权账号各按各的规则走;无需鉴权的账号也能并存多条(各自可配不同的出网代理)": "同一家可以混著放:有 Key 的帳號與無鑑權帳號各按各的規則走;無需鑑權的帳號也能並存多條(各自可配不同的出網代理)", "同地址换 anthropic 协议即走它的 Claude 兼容端点。转发必须填 OpenCode Go 的 API Key(订阅制;获取模型清单不需要 Key,但发请求上游会回 401「Missing API key」)": "同地址換 anthropic 協議即走它的 Claude 相容端點。轉發必須填 OpenCode Go 的 API Key(訂閱制;獲取模型清單不需要 Key,但發請求上游會回 401「Missing API key」)", "响应为空": "響應為空", "商汤日日新的 OpenAI 兼容端点;余额查询走控制台账号密码(见下方「余额查询」一段)": "商湯日日新的 OpenAI 相容端點;餘額查詢走控制台帳號密碼(見下方「餘額查詢」一段)", "国内版": "國內版", "国内版与**国际版是两套独立的账号与套餐**,凭证与领取的套餐都不通用。": "國內版與**國際版是兩套獨立的帳號與套餐**,憑證與領取的套餐都不通用。", "国内版登录页没有 Google / GitHub 入口(它用微信 / 手机号 / 邮箱登录)": "國內版登入頁沒有 Google / GitHub 入口(它用微信 / 手機號 / 郵箱登入)", "国内版的登录站点是 www.accio-ai.com,与国际版不是同一站。": "國內版的登入站點是 www.accio-ai.com,與國際版不是同一站。", "国内版(WorkBuddy)": "國內版(WorkBuddy)", "国内站为 https://api.siliconflow.cn/v1": "國內站為 https://api.siliconflow.cn/v1", "国内站(minimaxi.com);OpenAI 兼容地址为 https://api.minimaxi.com/v1": "國內站(minimaxi.com);OpenAI 相容地址為 https://api.minimaxi.com/v1", "国际版": "國際版", "国际版 z.ai 的 Coding 套餐;OpenAI 兼容地址为 https://api.z.ai/api/coding/paas/v4": "國際版 z.ai 的 Coding 套餐;OpenAI 相容地址為 https://api.z.ai/api/coding/paas/v4", "国际版与国内版是**两套独立的账号**(同一账号体系的两个站点),凭证不通用。": "國際版與國內版是**兩套獨立的帳號**(同一帳號體系的兩個站點),憑證不通用。", "国际版与国内版账号体系独立,请填国际版的凭证。未填 refreshToken 无法自动续期。": "國際版與國內版帳號體系獨立,請填國際版的憑證。未填 refreshToken 無法自動續期。", "国际版登录页默认只显示邮箱登录,勾选后恢复 Google / GitHub / X 入口": "國際版登入頁預設只顯示郵箱登入,勾選後恢復 Google / GitHub / X 入口", "国际版的推理站点是 api.z.ai,与国内版不是同一站;套餐也各自独立。": "國際版的推理站點是 api.z.ai,與國內版不是同一站;套餐也各自獨立。", "国际版(WorkBuddy AI)": "國際版(WorkBuddy AI)", "国际站 Coding 套餐;OpenAI 兼容地址为 https://api.minimax.io/v1": "國際站 Coding 套餐;OpenAI 相容地址為 https://api.minimax.io/v1", "在 cc-switch 里找到": "在 cc-switch 裡找到", "在内嵌窗口里完成官方登录,成功后自动加入账号列表。": "在內嵌視窗裡完成官方登入,成功後自動加入帳號列表。", "在{label}的 Qoder 账号设置 → Integrations 生成 PAT(别填 Google / GitHub 的令牌)。两个地区的账号与凭证不通用。": "在{label}的 Qoder 帳號設定 → Integrations 生成 PAT(別填 Google / GitHub 的權杖)。兩個地區的帳號與憑證不通用。", "在打开的官方授权页里用微信扫码登录(页面会直接显示二维码)。扫码成功后自动加入账号列表。": "在開啟的官方授權頁裡用微信掃碼登入(頁面會直接顯示二維碼)。掃碼成功後自動加入帳號列表。", "在打开的窗口里用百度账号登录 KukuAI 主站(手机验证码 / 扫码均可),登录成功后自动加入账号列表。网关会向百度换发 KukuAI 业务会话令牌(依赖本机已安装库库AI 客户端)。": "在開啟的窗口裡用百度帳號登入 KukuAI 主站(手機驗證碼 / 掃碼均可),登入成功後自動加入帳號列表。閘道器會向百度換髮 KukuAI 業務會話權杖(依賴本機已安裝庫庫AI 客戶端)。", "在打开的窗口里登录 Google 账号(Antigravity 的授权页),授权完成后自动加入账号列表。": "在開啟的窗口裡登入 Google 帳號(Antigravity 的授權頁),授權完成後自動加入帳號列表。", "在浏览器中打开登录页": "在瀏覽器中開啟登入頁", "地区": "地區", "填写凭证": "填寫憑證", "填写凭证添加": "填寫憑證新增", "备注名": "備註名", "套餐": "套餐", "如:智谱 GLM": "如:智譜 GLM", "完成登录后自动加入账号列表,昵称取自上游。": "完成登入後自動加入帳號列表,暱稱取自上游。", "官方客户端凭证目录:Windows 是 C:\\Users\\<你的用户名>\\AppData\\Local\\CodeBuddyExtension\\Data\\Public\\auth,macOS 是 ~/Library/Application Support/CodeBuddyExtension/Data/Public/auth": "官方客戶端憑證目錄:Windows 是 C:\\Users\\<你的使用者名稱>\\AppData\\Local\\CodeBuddyExtension\\Data\\Public\\auth,macOS 是 ~/Library/Application Support/CodeBuddyExtension/Data/Public/auth", "官方已确认到账": "官方已確認到賬", "导入": "匯入", "导入中…": "匯入中…", "导入凭证文件": "匯入憑證檔案", "导入失败": "匯入失敗", "导入失败:{reason}": "匯入失敗:{reason}", "导入所选": "匯入所選", "导入所选({n})": "匯入所選({n})", "导入桌面端登录态": "匯入桌面版登入態", "将打开内嵌窗口;授权完成后自动加入账号列表。关掉窗口即取消等待。授权页最后可能提示无法打开 zcode:// 链接,这是正常的 —— 结果已由服务端记下": "將開啟內嵌視窗;授權完成後自動加入帳號列表。關掉視窗即取消等待。授權頁最後可能提示無法開啟 zcode:// 連結,這是正常的 —— 結果已由服務端記下", "将打开内嵌窗口;授权完成后自动加入账号列表。远程面板可粘贴回调地址。关掉窗口即取消等待。链接 5 分钟内有效,超时或未点就会作废(可重新发起)": "將開啟內嵌視窗;授權完成後自動加入帳號列表。遠端面板可貼上回撥地址。關掉視窗即取消等待。連結 5 分鐘內有效,超時或未點就會作廢(可重新發起)", "将打开内嵌窗口;登录完成后自动加入账号列表。关掉窗口即取消等待": "將開啟內嵌視窗;登入完成後自動加入帳號列表。關掉視窗即取消等待", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的 Trae 账号);同机完成后自动加入,Docker / 远程面板按提示粘贴地址栏回调地址。": "將用系統預設瀏覽器開啟授權頁(會複用瀏覽器裡已登入的 Trae 帳號);同機完成後自動加入,Docker / 遠端面板按提示貼上位址列回撥地址。", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的 ZCode 账号);授权完成后自动加入账号列表。页面最后可能提示无法打开 zcode:// 链接,属正常现象": "將用系統預設瀏覽器開啟授權頁(會複用瀏覽器裡已登入的 ZCode 帳號);授權完成後自動加入帳號列表。頁面最後可能提示無法開啟 zcode:// 連結,屬正常現象", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的华为云账号);授权码由网关轮询云端取回,与浏览器跑在哪台机器无关,完成后自动加入账号列表": "將用系統預設瀏覽器開啟授權頁(會複用瀏覽器裡已登入的華為雲帳號);授權碼由閘道器輪詢雲端取回,與瀏覽器跑在哪臺機器無關,完成後自動加入帳號列表", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的华为云账号);浏览器与网关不在同一台机器时,按上方说明把最终回调地址粘贴回面板": "將用系統預設瀏覽器開啟授權頁(會複用瀏覽器裡已登入的華為雲帳號);瀏覽器與閘道器不在同一臺機器時,按上方說明把最終回撥地址貼上回面板", "将用系统默认浏览器打开登录页(会复用浏览器里已登录的 Accio 账号);完成登录后自动加入账号列表,关掉弹窗即取消等待": "將用系統預設瀏覽器開啟登入頁(會複用瀏覽器裡已登入的 Accio 帳號);完成登入後自動加入帳號列表,關掉彈窗即取消等待", "小米 MiMo Token Plan 套餐(新加坡站)": "小米 MiMo Token Plan 套餐(新加坡站)", "已到账": "已到賬", "已取消登录等待": "已取消登入等待", "已取消领取": "已取消領取", "已取消验证码": "已取消驗證碼", "已填写手机号,正在发送验证码…": "已填寫手機號,正在傳送驗證碼…", "已声明无需鉴权:账号会被正常选路,出网时不带任何鉴权头": "已宣告無需鑑權:帳號會被正常選路,出網時不帶任何鑑權頭", "已导入 {ok} 个,失败 {fail} 个(失败项已标注在列表里)": "已匯入 {ok} 個,失敗 {fail} 個(失敗項已標註在列表裡)", "已建过 · {n} 个账号,点击继续添加": "已建過 · {n} 個帳號,點擊繼續新增", "已建过,点击继续添加账号": "已建過,點擊繼續新增帳號", "已打开官方登录页,请在窗口中完成登录…": "已開啟官方登入頁,請在視窗中完成登入…", "已点发送,等待短信…": "已點發送,等待簡訊…", "已用系统默认浏览器打开登录页,请在浏览器中完成登录…": "已用系統預設瀏覽器開啟登入頁,請在瀏覽器中完成登入…", "已领取,等官方确认": "已領取,等官方確認", "当前壳版本不支持 AutoClaw 网页登录,请更新应用": "當前殼版本不支援 AutoClaw 網頁登入,請更新應用", "当前没有可领取的套餐(活动尚未开始)": "當前沒有可領取的套餐(活動尚未開始)", "当前环境不支持领取(桥接方法缺失)": "當前環境不支援領取(橋接方法缺失)", "必填,CatPaw 账号标识": "必填,CatPaw 帳號標識", "恢复 Google / GitHub 入口": "恢復 Google / GitHub 入口", "手机号": "手機號", "手机验证码登录": "手機驗證碼登入", "打开 Trae SOLO 的官方授权页(trae.cn)并用你的 Trae 账号登录:授权完成后官方页面会跳回本机的一个临时端口;同机部署自动接收,Docker / 远程面板请按提示复制地址栏回调地址。": "開啟 Trae SOLO 的官方授權頁(trae.cn)並用你的 Trae 帳號登入:授權完成後官方頁面會跳回本機的一個臨時連接埠;同機部署自動接收,Docker / 遠端面板請按提示覆制位址列回撥地址。", "打开 Accio {label}的官方登录页({site})并用你的 Accio 账号登录:登录成功后官方页面会跳回本机;同机自动完成,Docker / 远程面板按提示粘贴回调地址即可(授权码只在本机传给网关,界面不显示明文 token)。": "開啟 Accio {label}的官方登入頁({site})並用你的 Accio 帳號登入:登入成功後官方頁面會跳回本機;同機自動完成,Docker / 遠端面板按提示貼上回撥地址即可(授權碼只在本機傳給閘道器,介面不顯示明文 token)。", "打开 Accio {label}登录页": "開啟 Accio {label}登入頁", "打开 Antigravity 网页登录": "開啟 Antigravity 網頁登入", "打开 CatPaw 网页登录": "開啟 CatPaw 網頁登入", "打开 Cline 授权页": "開啟 Cline 授權頁", "打开 CodeArts 授权页": "開啟 CodeArts 授權頁", "打开 Qoder 网页登录": "開啟 Qoder 網頁登入", "打开 Trae 授权页": "開啟 Trae 授權頁", "打开 ZCode {label}的官方授权页并用你的账号登录。授权结果由 ZCode 服务端记录,网关在后台自动取回凭证并加入账号列表。": "開啟 ZCode {label}的官方授權頁並用你的帳號登入。授權結果由 ZCode 服務端記錄,閘道器在後臺自動取回憑證並加入帳號列表。", "打开 ZCode {label}授权页": "開啟 ZCode {label}授權頁", "打开华为云 CodeArts 的官方授权页登录:登录完成后官方页面会把浏览器带回网关自己的 /oauth/callback,网关用一次性授权码换取临时凭据并加入账号列表。
网关跑在另一台机器上时,网页端会提示把地址栏中的最终回调地址直接粘贴回面板。": "開啟華為雲 CodeArts 的官方授權頁登入:登入完成後官方頁面會把瀏覽器帶回閘道器自己的 /oauth/callback,閘道器用一次性授權碼換取臨時憑據並加入帳號列表。
閘道器跑在另一臺機器上時,網頁端會提示把位址列中的最終回撥地址直接貼上回面板。", "打开华为云授权页登录:登录完成后网关会自动轮询云端取回授权码并加入账号列表(不需要装 OfficeAce 桌面端,也无需手工回填回调地址)。": "開啟華為雲授權頁登入:登入完成後閘道器會自動輪詢雲端取回授權碼並加入帳號列表(不需要裝 OfficeAce 桌面版,也無需手工回填回撥地址)。", "打开官方授权页完成设备码授权,登录的是{label}({site})的账号。": "開啟官方授權頁完成裝置碼授權,登入的是{label}({site})的帳號。", "打开授权页": "開啟授權頁", "打开授权页完成确认,账号自动加入 {label}{note}": "開啟授權頁完成確認,帳號自動加入 {label}{note}", "打开方式": "開啟方式", "打开网页登录": "開啟網頁登入", "探测失败:{message}": "探測失敗:{message}", "接入一个兼容上游": "接入一個相容上游", "提交中…": "提交中…", "搜索提供商": "搜尋提供商", "搜索提供商…": "搜尋提供商…", "整份粘贴官方插件 / CLIProxyAPI 落盘的凭据 JSON(形如 {\"codearts_provider_credential\":{…}},铺平的也行)。
必填:access_key_id、secret_access_key、security_token。要能自动续期,必须连 refresh_token 与 oauth_context 一起粘 —— 临时凭据约一小时到期,缺这半块就续不回来,只能重新登录。": "整份貼上官方外掛 / CLIProxyAPI 落盤的憑據 JSON(形如 {\"codearts_provider_credential\":{…}},鋪平的也行)。
必填:access_key_id、secret_access_key、security_token。要能自動續期,必須連 refresh_token 與 oauth_context 一起粘 —— 臨時憑據約一小時到期,缺這半塊就續不回來,只能重新登入。", "文件是{edition}凭证,已按该版本导入": "檔案是{edition}憑證,已按該版本匯入", "新建自定义提供商": "新建自定義提供商", "方案:{label}": "方案:{label}", "明文 JWT 或 auth.json 里的 enc: 加密值(自动解密)": "明文 JWT 或 auth.json 裡的 enc: 加密值(自動解密)", "明文 JWT(国际版账号的 access token)": "明文 JWT(國際版帳號的 access token)", "智谱 bigmodel.cn 的 Coding 套餐,Key 在 open.bigmodel.cn/usercenter/apikeys": "智譜 bigmodel.cn 的 Coding 套餐,Key 在 open.bigmodel.cn/usercenter/apikeys", "未知错误": "未知錯誤", "未能获取授权地址,请重试": "未能獲取授權地址,請重試", "未能读取 cc-switch 数据": "未能讀取 cc-switch 資料", "未领取成功": "未領取成功", "本地 Ollama、OpenCode Zen 免费档这类上游要勾上,否则账号不可用": "本地 Ollama、OpenCode Zen 免費檔這類上游要勾上,否則帳號不可用", "本家有两个**互不替代**的凭证,按你要用的功能填,至少填一个:编码套餐 API Key 用于转发推理(打 {site})与查询窗口限额(每 N 小时 / 每周的剩余比例);jwt 用于领取套餐与查询余额(打 zcode.z.ai 的 billing 网关,官方叫 Coding Plan JWT,是一串三段点分的字符串)。余额两把都能查、但读到的东西不同:jwt 读到余额桶与套餐到期,API Key 读到窗口限额;而领取只认 jwt、转发只认 API Key。请填写 {label}账号的凭证 —— {plan}(最容易拿到的办法:直接用上方的「网页登录」—— 它会替你把这个 API Key 换好,两个凭证一起拿到。)": "本家有兩個**互不替代**的憑證,按你要用的功能填,至少填一個:編碼套餐 API Key 用於轉發推理(打 {site})與查詢視窗限額(每 N 小時 / 每週的剩餘比例);jwt 用於領取套餐與查詢餘額(打 zcode.z.ai 的 billing 閘道器,官方叫 Coding Plan JWT,是一串三段點分的字串)。餘額兩把都能查、但讀到的東西不同:jwt 讀到餘額桶與套餐到期,API Key 讀到視窗限額;而領取只認 jwt、轉發只認 API Key。請填寫 {label}帳號的憑證 —— {plan}(最容易拿到的辦法:直接用上方的「網頁登入」—— 它會替你把這個 API Key 換好,兩個憑證一起拿到。)", "本机 Ollama 的 OpenAI 兼容端点,无需 API Key(默认已勾上「该上游无需鉴权」,鉴权头一个都不发)": "本機 Ollama 的 OpenAI 相容端點,無需 API Key(預設已勾上「該上游無需鑑權」,鑑權頭一個都不發)", "本次未确认到账": "本次未確認到賬", "条可导入": "條可匯入", "条配置,其中": "條配置,其中", "桌面运行时不可用(Tauri 未初始化)": "桌面執行時不可用(Tauri 未初始化)", "模型网关基址": "模型閘道器基址", "正在打开百度登录页…": "正在開啟百度登入頁…", "正在扫描本机 cc-switch…": "正在掃描本機 cc-switch…", "正在换发访客凭证…": "正在換髮訪客憑證…", "正在添加…": "正在新增…", "正在等待{name}登录完成;完成或取消后才能发起新的登录": "正在等待{name}登入完成;完成或取消後才能發起新的登入", "每周": "每週", "每日": "每日", "每月": "每月", "没有则无法自动续期": "沒有則無法自動續期", "没有匹配「{keyword}」的提供商": "沒有匹配「{keyword}」的提供商", "添加 {name} 账号": "新增 {name} 帳號", "添加中…": "新增中…", "添加到 ": "新增到 ", "添加失败:{reason}": "新增失敗:{reason}", "添加小浣熊账号": "新增小浣熊帳號", "添加方式": "新增方式", "添加访客账号": "新增訪客帳號", "添加账号": "新增帳號", "火山引擎 Coding 套餐;通用推理接入点为 https://ark.cn-beijing.volces.com/api/v3": "火山引擎 Coding 套餐;通用推理接入點為 https://ark.cn-beijing.volces.com/api/v3", "点击添加账号": "點擊新增帳號", "点开即预填,填 Key 接入": "點開即預填,填 Key 接入", "点按钮后先过一次滑块验证(官方风控),随后打开登录页,登录完成即自动添加账号。
这是国际版官方唯一的登录方式;已在客户端登录过的,用「导入桌面端登录态」更快。": "點按鈕後先過一次滑塊驗證(官方風控),隨後開啟登入頁,登入完成即自動新增帳號。
這是國際版官方唯一的登入方式;已在客戶端登入過的,用「匯入桌面版登入態」更快。", "用 AutoClaw 账号绑定的手机号登录:点击「获取验证码」,收到短信后填入下方并登录。验证码由本机直接提交给官方接口,界面不显示 token。": "用 AutoClaw 帳號繫結的手機號登入:點擊「獲取驗證碼」,收到簡訊後填入下方並登入。驗證碼由本機直接提交給官方介面,介面不顯示 token。", "用 CatPaw 账号完成登录(美团 passport),成功后自动加入账号列表。": "用 CatPaw 帳號完成登入(美團 passport),成功後自動加入帳號列表。", "用 Loomy 账号绑定的手机号登录:点「获取验证码」后填入即可。这是本家最省事的入口。": "用 Loomy 帳號繫結的手機號登入:點「獲取驗證碼」後填入即可。這是本家最省事的入口。", "用于转发;形如 apiKey.secret 两段点分(不填则这个账号不能转发)": "用於轉發;形如 apiKey.secret 兩段點分(不填則這個帳號不能轉發)", "用于领取套餐与查询余额;不填则这个账号不能领取与查余额": "用於領取套餐與查詢餘額;不填則這個帳號不能領取與查餘額", "用户 ID": "使用者 ID", "用绑定的手机号登录:点「获取验证码」后填入即可。这是国内版官方唯一的登录方式。": "用繫結的手機號登入:點「獲取驗證碼」後填入即可。這是國內版官方唯一的登入方式。", "留空则用提供商名称": "留空則用提供商名稱", "登录 / 添加 {name} 账号": "登入 / 新增 {name} 帳號", "登录 session(一长串)": "登入 session(一長串)", "登录中…": "登入中…", "登录失败:{message}": "登入失敗:{message}", "登录已结束": "登入已結束", "登录并添加": "登入並新增", "登录态文件路径:~/.box-agent/config/auth.json(Windows:C:\\Users\\<你的用户名>\\.box-agent\\config\\auth.json)": "登入態檔案路徑:~/.box-agent/config/auth.json(Windows:C:\\Users\\<你的使用者名稱>\\.box-agent\\config\\auth.json)", "确定删除自定义提供商「{name}」?将同时删除该提供商下 {count} 个账号,删除后无法恢复。": "確定刪除自定義提供商「{name}」?將同時刪除該提供商下 {count} 個帳號,刪除後無法恢復。", "等待 Accio {label}登录完成…": "等待 Accio {label}登入完成…", "等待 CatPaw 登录完成…": "等待 CatPaw 登入完成…", "等待 Cline 授权确认…": "等待 Cline 授權確認…", "等待 CodeArts 登录完成…": "等待 CodeArts 登入完成…", "等待 Google 授权完成…": "等待 Google 授權完成…", "等待 KukuAI 登录完成…": "等待 KukuAI 登入完成…", "等待 OfficeAce 登录完成…": "等待 OfficeAce 登入完成…", "等待 OrcaTerm 登录完成…": "等待 OrcaTerm 登入完成…", "等待 Qoder 授权完成…": "等待 Qoder 授權完成…", "等待 Trae 授权完成…": "等待 Trae 授權完成…", "等待 ZCode {label}授权完成…": "等待 ZCode {label}授權完成…", "等待小浣熊登录完成…": "等待小浣熊登入完成…", "等待登录完成…": "等待登入完成…", "等待网页登录…": "等待網頁登入…", "粘贴 API Key": "貼上 API Key", "粘贴 Accio 的 accessToken": "貼上 Accio 的 accessToken", "粘贴 Antigravity 的 Google refresh token(以 1// 开头;直接粘贴含 refresh_token= 的整行也行)。
这是网页登录之外的手工入口(例如从已登录的官方 IDE 里导出)。refresh token 不会过期,access token 到期由网关自动续期;令牌丢了只能重新走 Google 授权,请妥善保存。": "貼上 Antigravity 的 Google refresh token(以 1// 開頭;直接貼上含 refresh_token= 的整行也行)。
這是網頁登入之外的手工入口(例如從已登入的官方 IDE 裡匯出)。refresh token 不會過期,access token 到期由閘道器自動續期;權杖丟了只能重新走 Google 授權,請妥善儲存。", "粘贴 Command Code 的 API Key(user_ 开头;从官方 CLI 的 ~/.commandcode/auth.json 或网页 studio 获取)。整行 / 带引号 / 带 Bearer 前缀地粘都行,网关会自己剥成裸 key。key 不过期、也没有续期接口,失效后重新获取即可;添加时网关会做一次轻量探活,失败不影响添加。": "貼上 Command Code 的 API Key(user_ 開頭;從官方 CLI 的 ~/.commandcode/auth.json 或網頁 studio 獲取)。整行 / 帶引號 / 帶 Bearer 字首地粘都行,閘道器會自己剝成裸 key。key 不過期、也沒有續期介面,失效後重新獲取即可;新增時閘道器會做一次輕量探活,失敗不影響新增。", "粘贴 Cookie": "貼上 Cookie", "粘贴 Google refresh token": "貼上 Google refresh token", "粘贴 OrcaTerm 的 OAuth accessToken(JWT,三段点分;从桌面客户端 data.bin 或 Web 版 Cookie ot_session 获取)。直接粘贴含 Bearer / ot_session= 的整行也行,网关会自己剥成裸 token。添加后由网关自动续期(上游有续期接口),无需跟随 2 小时时效手动更换。": "貼上 OrcaTerm 的 OAuth accessToken(JWT,三段點分;從桌面客戶端 data.bin 或 Web 版 Cookie ot_session 獲取)。直接貼上含 Bearer / ot_session= 的整行也行,閘道器會自己剝成裸 token。新增後由閘道器自動續期(上游有續期介面),無需跟隨 2 小時時效手動更換。", "粘贴 Qoder 个人访问令牌(pt-…)": "貼上 Qoder 個人存取權杖(pt-…)", "粘贴 accessToken": "貼上 accessToken", "粘贴 access_token(一长串 JWT)": "貼上 access_token(一長串 JWT)", "粘贴 session cookie": "貼上 session cookie", "粘贴 token / refreshToken": "貼上 token / refreshToken", "粘贴 workos:… 开头的令牌(不带前缀也会自动补上)": "貼上 workos:… 開頭的權杖(不帶字首也會自動補上)", "粘贴智谱清言的访问令牌(JWT,三段点分)。获取方式:浏览器打开 chatglm.cn 并登录后,在开发者工具的 Application → Cookies 里复制 chatglm_token 的值(也可以直接粘 chatglm_token=…; 整行)。粘贴后会先向上游校验一次,校验通过才落账号;登录账号的积分、签到能力都能用,之后由网关自动续期(上游有续期接口)。": "貼上智譜清言的存取權杖(JWT,三段點分)。獲取方式:瀏覽器開啟 chatglm.cn 並登入後,在開發者工具的 Application → Cookies 裡複製 chatglm_token 的值(也可以直接粘 chatglm_token=…; 整行)。粘貼後會先向上游校驗一次,校驗通過才落帳號;登入帳號的積分、簽到能力都能用,之後由閘道器自動續期(上游有續期介面)。", "粘贴登录凭据": "貼上登入憑據", "粘贴的是登录 session(同时是模型网关的 token)。Loomy 没有续期接口,session 有效期约 14 天,过期后重新登录即可。": "貼上的是登入 session(同時是模型閘道器的 token)。Loomy 沒有續期介面,session 有效期約 14 天,過期後重新登入即可。", "粘贴网关凭据": "貼上閘道器憑據", "粘贴网页登录态 cookie monkeycode_ai_session 的值(在浏览器里复制整段 Cookie 直接粘贴也行,网关会自己剥出值)。
{siteNote}
MonkeyCode 没有续期接口:session 有效期约 30 天(硬限制),过期后重新登录网页、再粘贴一次即可。": "貼上網頁登入態 cookie monkeycode_ai_session 的值(在瀏覽器裡複製整段 Cookie 直接貼上也行,閘道器會自己剝出值)。
{siteNote}
MonkeyCode 沒有續期介面:session 有效期約 30 天(硬限制),過期後重新登入網頁、再貼上一次即可。", "粘贴访问令牌": "貼上存取權杖", "系统浏览器": "系統瀏覽器", "系统浏览器可复用已有登录态(国际版推荐);内嵌窗口更干净。": "系統瀏覽器可複用已有登入態(國際版推薦);內嵌視窗更乾淨。", "系统浏览器打开(复用已登录的 Cline 账号);完成后自动加入列表": "系統瀏覽器開啟(複用已登入的 Cline 帳號);完成後自動加入列表", "系统浏览器打开(复用已登录的 Google 账号);完成后自动加入列表": "系統瀏覽器開啟(複用已登入的 Google 帳號);完成後自動加入列表", "系统浏览器打开(复用已登录的 Zai / Google 账号);完成后自动加入列表": "系統瀏覽器開啟(複用已登入的 Zai / Google 帳號);完成後自動加入列表", "系统浏览器打开(复用已登录的美团账号);完成后自动加入列表": "系統瀏覽器開啟(複用已登入的美團帳號);完成後自動加入列表", "系统浏览器打开(复用已登录账号);完成后自动加入列表": "系統瀏覽器開啟(複用已登入帳號);完成後自動加入列表", "系统默认浏览器": "系統預設瀏覽器", "编码套餐 API Key": "編碼套餐 API Key", "网关 Secret": "閘道器 Secret", "网页登录": "網頁登入", "网页登录的打开方式": "網頁登入的開啟方式", "网页登录(Zai / Google)": "網頁登入(Zai / Google)", "自定义": "自定義", "自建聚合面板:填你自己的站点地址。余额查询用该账号的 API Key 打 {base}/v1/usage,不需要额外配置": "自建聚合面板:填你自己的站點地址。餘額查詢用該帳號的 API Key 打 {base}/v1/usage,不需要額外配置", "自建聚合面板:填你自己的站点地址;余额查询要另填 NewAPI 的个人访问令牌(见下方「余额查询」一段)": "自建聚合面板:填你自己的站點地址;餘額查詢要另填 NewAPI 的個人存取權杖(見下方「餘額查詢」一段)", "获取风控配置失败,将直接尝试领取:{message}": "獲取風控配置失敗,將直接嘗試領取:{message}", "获取验证码": "獲取驗證碼", "访客模式": "訪客模式", "访客模式(免登录)": "訪客模式(免登入)", "该上游无需鉴权(不发送鉴权头)": "該上游無需鑑權(不傳送鑑權頭)", "该提供商": "該提供商", "该提供商账号添加功能即将上线": "該提供商帳號新增功能即將上線", "该自定义提供商已不存在(可能已被删除),请刷新后重试": "該自定義提供商已不存在(可能已被刪除),請重新整理後重試", "请先选择一个自定义提供商": "請先選擇一個自定義提供商", "请在弹出的滑块中完成验证(官方要求的风控步骤)": "請在彈出的滑塊中完成驗證(官方要求的風控步驟)", "请填写 11 位大陆手机号": "請填寫 11 位大陸手機號", "请填写 6 位数字验证码": "請填寫 6 位數字驗證碼", "请填写 Base URL": "請填寫 Base URL", "请填写 {label}": "請填寫 {label}", "请填写名称": "請填寫名稱", "请完成验证…": "請完成驗證…", "读取 %APPDATA%/AutoClaw/auth.json 并解密,仅 Windows": "讀取 %APPDATA%/AutoClaw/auth.json 並解密,僅 Windows", "读取 ~/.cline/data/settings/providers.json,需已在 Cline 客户端登录": "讀取 ~/.cline/data/settings/providers.json,需已在 Cline 客戶端登入", "读取 ~/.meituan-catpaw/auth.json,需已在 CatPaw 客户端登录": "讀取 ~/.meituan-catpaw/auth.json,需已在 CatPaw 客戶端登入", "读取本机 KukuAI 客户端登录态(%APPDATA%\\baidugenflowpro\\Network\\Cookies),需已在 KukuAI 客户端登录": "讀取本機 KukuAI 客戶端登入態(%APPDATA%\\baidugenflowpro\\Network\\Cookies),需已在 KukuAI 客戶端登入", "读取本机 OrcaTerm 客户端登录态(%APPDATA%\\com.orcaterm-desktop.app\\data.bin),需已在 OrcaTerm 客户端登录": "讀取本機 OrcaTerm 客戶端登入態(%APPDATA%\\com.orcaterm-desktop.app\\data.bin),需已在 OrcaTerm 客戶端登入", "读取本机智谱清言客户端登录态(%APPDATA%\\chatglm\\Network\\Cookies),需已在客户端登录": "讀取本機智譜清言客戶端登入態(%APPDATA%\\chatglm\\Network\\Cookies),需已在客戶端登入", "读本机官方客户端(Tencent WorkBuddy / WorkBuddy AI)当前登录的账号:自动定位其凭证目录里最新的登录态文件(需已在本机官方客户端登录)。导入后由网关自动续期,无需跟随 2 小时时效手动换令牌。": "讀本機官方客戶端(Tencent WorkBuddy / WorkBuddy AI)當前登入的帳號:自動定位其憑證目錄裡最新的登入態檔案(需已在本機官方客戶端登入)。匯入後由閘道器自動續期,無需跟隨 2 小時時效手動換權杖。", "读本机客户端当前登录态(明文 Cookie,无需解密)。客户端运行时 Cookies 文件被独占占用,导入前请先关闭 KukuAI 客户端。": "讀本機客戶端當前登入態(明文 Cookie,無需解密)。客戶端執行時 Cookies 檔案被獨佔佔用,匯入前請先關閉 KukuAI 客戶端。", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。": "讀本機客戶端當前登入態,每次即時讀取(刪掉這條記錄不影響客戶端登入態)。", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。客户端重新登录后点「刷新 Token」同步。": "讀本機客戶端當前登入態,每次即時讀取(刪掉這條記錄不影響客戶端登入態)。客戶端重新登入後點「重新整理 Token」同步。", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。客户端重新登录后重新导入即可。": "讀本機客戶端當前登入態,每次即時讀取(刪掉這條記錄不影響客戶端登入態)。客戶端重新登入後重新匯入即可。", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。用 Zai / Google 登录客户端的用户走这一条。": "讀本機客戶端當前登入態,每次即時讀取(刪掉這條記錄不影響客戶端登入態)。用 Zai / Google 登入客戶端的使用者走這一條。", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。这一条归入 {label}。": "讀本機客戶端當前登入態,每次即時讀取(刪掉這條記錄不影響客戶端登入態)。這一條歸入 {label}。", "读本机客户端当前登录的 OAuth 令牌(明文 JSON,无需解密)。导入后由网关自动续期,无需跟随客户端的 2 小时时效手动换令牌。": "讀本機客戶端當前登入的 OAuth 權杖(明文 JSON,無需解密)。匯入後由閘道器自動續期,無需跟隨客戶端的 2 小時時效手動換權杖。", "读本机客户端当前的登录态。客户端的 Cookies 是 DPAPI 加密的(Chromium os_crypt),因此仅 Windows 可用;客户端正在运行时可能读不到该文件,先退出客户端再试即可(也可改用「填写凭证」粘贴令牌)。": "讀本機客戶端當前的登入態。客戶端的 Cookies 是 DPAPI 加密的(Chromium os_crypt),因此僅 Windows 可用;客戶端正在執行時可能讀不到該檔案,先退出客戶端再試即可(也可改用「填寫憑證」貼上權杖)。", "账号信息": "帳號資訊", "账号信息不完整,请刷新后重试": "帳號資訊不完整,請重新整理後重試", "账号已添加,但请留意:{warning}": "帳號已新增,但請留意:{warning}", "账号版本": "帳號版本", "账号类型": "帳號型別", "账号:{name}
": "帳號:{name}
", "走 Inference Providers 路由,Key 在 hf.co/settings/tokens 创建": "走 Inference Providers 路由,Key 在 hf.co/settings/tokens 建立", "还没有账号": "還沒有帳號", "这一家当前不支持网页登录,请改用填写凭证": "這一家當前不支援網頁登入,請改用填寫憑證", "这个账号当前没有可自动领的活动(只自动领每日登录赠送积分)": "這個帳號當前沒有可自動領的活動(只自動領每日登入贈送積分)", "这份额度走「活动套餐」通道:若转发时提示编码套餐已到期,": "這份額度走「活動套餐」通道:若轉發時提示編碼套餐已到期,", "这里填国内站(monkeycode-ai.com)的账号:请粘贴国内站的 session。国际站(monkeycode-ai.net)是另一家 provider、另一套账号,两边的凭证不通用。": "這裡填國內站(monkeycode-ai.com)的帳號:請貼上國內站的 session。國際站(monkeycode-ai.net)是另一家 provider、另一套帳號,兩邊的憑證不通用。", "这里填国际站(monkeycode-ai.net)的账号:请粘贴国际站的 session。国内站(monkeycode-ai.com)是另一家 provider、另一套账号,两边的凭证不通用。": "這裡填國際站(monkeycode-ai.net)的帳號:請貼上國際站的 session。國內站(monkeycode-ai.com)是另一家 provider、另一套帳號,兩邊的憑證不通用。", "选择 CatPaw 客户端的登录态文件 auth.json(Windows:C:\\Users\\<你的用户名>\\.meituan-catpaw\\auth.json;macOS / Linux:~/.meituan-catpaw/auth.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端。": "選擇 CatPaw 客戶端的登入態檔案 auth.json(Windows:C:\\Users\\<你的使用者名稱>\\.meituan-catpaw\\auth.json;macOS / Linux:~/.meituan-catpaw/auth.json)。匯入後憑證直接落在閘道器、可獨立轉發,不再依賴本機客戶端。", "选择 Cline 客户端的登录态文件 providers.json(Windows:C:\\Users\\<你的用户名>\\.cline\\data\\settings\\providers.json;macOS / Linux:~/.cline/data/settings/providers.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端;这一条归入 {label}。": "選擇 Cline 客戶端的登入態檔案 providers.json(Windows:C:\\Users\\<你的使用者名稱>\\.cline\\data\\settings\\providers.json;macOS / Linux:~/.cline/data/settings/providers.json)。匯入後憑證直接落在閘道器、可獨立轉發,不再依賴本機客戶端;這一條歸入 {label}。", "选择 KukuAI 客户端的 Cookies 文件(%APPDATA%\\baidugenflowpro\\Network\\Cookies):它是**二进制** SQLite 数据库(无扩展名,不是 JSON)。导入时读的是你选中文件的副本、不和运行中的客户端抢占用,因此**无需先关闭客户端**。导入后凭证直接落在网关、可独立转发。": "選擇 KukuAI 客戶端的 Cookies 檔案(%APPDATA%\\baidugenflowpro\\Network\\Cookies):它是**二進位制** SQLite 資料庫(無副檔名,不是 JSON)。匯入時讀的是你選中檔案的副本、不和執行中的客戶端搶佔用,因此**無需先關閉客戶端**。匯入後憑證直接落在閘道器、可獨立轉發。", "选择凭证文件导入": "選擇憑證檔案匯入", "选择官方客户端的登录态凭证文件(workbuddy-desktop.info / workbuddy-desktop-ai.info)或 wb2api 导出的账号 JSON(嵌套 / 扁平形均可)。": "選擇官方客戶端的登入態憑證檔案(workbuddy-desktop.info / workbuddy-desktop-ai.info)或 wb2api 匯出的帳號 JSON(巢狀 / 扁平形均可)。", "选择小浣熊客户端的登录态文件 auth.json(Windows:C:\\Users\\<你的用户名>\\.box-agent\\config\\auth.json;macOS / Linux:~/.box-agent/config/auth.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端。": "選擇小浣熊客戶端的登入態檔案 auth.json(Windows:C:\\Users\\<你的使用者名稱>\\.box-agent\\config\\auth.json;macOS / Linux:~/.box-agent/config/auth.json)。匯入後憑證直接落在閘道器、可獨立轉發,不再依賴本機客戶端。", "选择提供商": "選擇提供商", "选择的文件不是合法 JSON": "選擇的檔案不是合法 JSON", "选择要添加账号的提供商": "選擇要新增帳號的提供商", "重新扫描": "重新掃描", "鉴权": "鑑權", "阿里云 Token Plan 套餐(国际站)": "阿里雲 Token Plan 套餐(國際站)", "阿里云百炼 Coding 套餐(国内站)": "阿里雲百鍊 Coding 套餐(國內站)", "阿里云百炼 Coding 套餐(国际站)": "阿里雲百鍊 Coding 套餐(國際站)", "阿里云百炼模型服务(国际站,OpenAI 兼容模式)": "阿里雲百鍊模型服務(國際站,OpenAI 相容模式)", "需要图形验证码:登录窗口已弹出,请填写后继续": "需要圖形驗證碼:登入視窗已彈出,請填寫後繼續", "预置 API": "預置 API", "领取 CodeArts 每日福利": "領取 CodeArts 每日福利", "领取失败:{message}": "領取失敗:{message}", "领取并让官方确认": "領取並讓官方確認", "风控验证配置不完整,请稍后重试": "風控驗證配置不完整,請稍後重試", "验证码": "驗證碼", "验证码已发送。收到后填入下方并点「登录并添加」": "驗證碼已傳送。收到後填入下方並點「登入並新增」", "验证码已发送,请查看手机短信": "驗證碼已傳送,請檢視手機簡訊", "验证码已发送,请查看手机短信。填入下方并点「登录并添加」即完成登录": "驗證碼已傳送,請檢視手機簡訊。填入下方並點「登入並新增」即完成登入", "验证码已发送,请查看短信": "驗證碼已傳送,請檢視簡訊", "验证码校验失败,请重试": "驗證碼校驗失敗,請重試", "验证码校验超时,请重试": "驗證碼校驗超時,請重試", "验证码组件不可用,请重试": "驗證碼元件不可用,請重試", "验证码组件初始化超时,请重试": "驗證碼元件初始化超時,請重試", "验证码组件加载失败,请检查网络后重试": "驗證碼元件載入失敗,請檢查網路後重試", "验证码组件加载异常,请重试": "驗證碼元件載入異常,請重試", "验证码组件加载超时,请检查网络后重试": "驗證碼元件載入超時,請檢查網路後重試", "验证码组件未加载,请重启应用后重试": "驗證碼元件未載入,請重啟應用後重試", "(免费额度池,模型名带 cline-free/ 前缀)。": "(免費額度池,模型名帶 cline-free/ 字首)。", "(其中 {n} 把恢复为不限制)": "(其中 {n} 把恢復為不限制)", "(必填)": "(必填)", "(有效期 {window})": "(有效期 {window})", "(订阅池,模型名带 cline-pass/ 前缀,需要账号有对应订阅)。": "(訂閱池,模型名帶 cline-pass/ 字首,需要帳號有對應訂閱)。", ",下一次最快 {minutes} 分钟后": ",下一次最快 {minutes} 分鐘後", ",并从 {n} 把 Key 的可用提供商里移除": ",並從 {n} 把 Key 的可用提供商裡移除" });
+window.wbI18nDict = window.wbI18nDict || {}; Object.assign(window.wbI18nDict, { " · 模型 {head}{rest}": " · 模型 {head}{rest}", " 等 {n} 个": " 等 {n} 個", "1// 开头的 Google refresh token(也可直接粘贴 refresh_token=… 整行)": "1// 開頭的 Google refresh token(也可直接貼上 refresh_token=… 整行)", "11 位大陆手机号": "11 位大陸手機號", "1~64 个字符,账号列表里按它分组显示": "1~64 個字元,帳號列表裡按它分組顯示", "6 位数字": "6 位數字", "
没有可自动领的活动": "沒有可自動領的活動", "领到的是套餐赠送积分,不会增加福利模型的 token 池;": "
領到的是套餐贈送積分,不會增加福利模型的 token 池;", "Anthropic 兼容端点在 https://api.deepseek.com/anthropic(协议换 anthropic 时填它)": "Anthropic 相容端點在 https://api.deepseek.com/anthropic(協議換 anthropic 時填它)", "Anthropic 协议填根地址,不要带 /v1": "Anthropic 協議填根地址,不要帶 /v1", "Antigravity": "Antigravity", "AutoClaw 国内版": "AutoClaw 國內版", "AutoClaw 国际版": "AutoClaw 國際版", "BDUSS 必填;请粘贴**完整 Cookie**(Cookie 编辑器一键导出即可)—— 其中 **PTOKEN 必须保留**,网关要用它向百度换发 KukuAI 业务会话令牌,缺了它模型刷新会报「未登录」。支持整段 Cookie 头、Cookie 编辑器导出的 JSON 数组,或 {BDUSS, STOKEN} 对象。KukuAI 没有刷新机制,登录态过期后重新粘贴即可。": "BDUSS 必填;請貼上**完整 Cookie**(Cookie 編輯器一鍵匯出即可)—— 其中 **PTOKEN 必須保留**,閘道器要用它向百度換髮 KukuAI 業務會話權杖,缺了它模型重新整理會報「未登入」。支援整段 Cookie 頭、Cookie 編輯器匯出的 JSON 陣列,或 {BDUSS, STOKEN} 物件。KukuAI 沒有重新整理機制,登入態過期後重新貼上即可。", "BDUSS=…; STOKEN=…(或 Cookie 编辑器导出的 JSON)": "BDUSS=…; STOKEN=…(或 Cookie 編輯器匯出的 JSON)", "CatPaw 的 X-Passport-Token(登录态 Cookie)": "CatPaw 的 X-Passport-Token(登入態 Cookie)", "Cline Pass 的 API Key 在 app.cline.bot 获取(订阅制);端点为 OpenAI 兼容,模型清单以 Cline 控制台为准,模型名在模型管理里按裸名添加(如 glm-5.2 / kimi-k2.7-code / deepseek-v4-pro);上游按客户端形态校验,所需的客户端请求头已随卡预置": "Cline Pass 的 API Key 在 app.cline.bot 獲取(訂閱制);端點為 OpenAI 相容,模型清單以 Cline 控制台為準,模型名在模型管理裡按裸名新增(如 glm-5.2 / kimi-k2.7-code / deepseek-v4-pro);上游按客戶端形態校驗,所需的客戶端請求頭已隨卡預置", "Cloud-IDE-JWT(三段点分)": "Cloud-IDE-JWT(三段點分)", "Command Code": "Command Code", "JWT(三段点分;也可直接粘贴 Bearer 整行或 data.bin 内容)": "JWT(三段點分;也可直接貼上 Bearer 整行或 data.bin 內容)", "JWT(三段点分;也可直接粘贴 chatglm_token=… 整行)": "JWT(三段點分;也可直接貼上 chatglm_token=… 整行)", "ModelScope 国内版": "ModelScope 國內版", "ModelScope 国际版": "ModelScope 國際版", "MonkeyCode": "MonkeyCode", "MonkeyCode 国际版": "MonkeyCode 國際版", "NVIDIA NIM 托管端点,Key 在 integrate.api.nvidia.com 申请": "NVIDIA NIM 託管端點,Key 在 integrate.api.nvidia.com 申請", "OfficeAce 果办": "OfficeAce 果辦", "accessToken 是 Accio 的登录凭证(一长串不透明 token,不是 JWT);refreshToken 可选,填了之后到期能自动续期。请填写 {label}账号的凭证 —— {siteNote}(最容易拿到的办法:直接用上方的「网页登录」,不需要手工找 token。)": "accessToken 是 Accio 的登入憑證(一長串不透明 token,不是 JWT);refreshToken 可選,填了之後到期能自動續期。請填寫 {label}帳號的憑證 —— {siteNote}(最容易拿到的辦法:直接用上方的「網頁登入」,不需要手工找 token。)", "accessToken 是 Trae 的 Cloud-IDE-JWT(三段点分),refreshToken 用于到期自动续期(本家 refreshToken 一次一换:换发一次旧的即作废,所以两份程序别同时刷同一个账号)。
手工粘贴时请连 machineId / deviceId 一起填:上游把它们与登录时上传的设备公钥绑在一起判设备,凭空换一对会撞 2xxxx 那族设备绑定拒绝。
没有这三样时的正路是用上方的「网页登录」;容器 / 远程部署形态按提示粘贴地址栏回调地址即可。": "accessToken 是 Trae 的 Cloud-IDE-JWT(三段點分),refreshToken 用於到期自動續期(本家 refreshToken 一次一換:換髮一次舊的即作廢,所以兩份程式別同時刷同一個帳號)。
手工貼上時請連 machineId / deviceId 一起填:上游把它們與登入時上傳的裝置公鑰綁在一起判裝置,憑空換一對會撞 2xxxx 那族裝置繫結拒絕。
沒有這三樣時的正路是用上方的「網頁登入」;容器 / 遠端部署形態按提示貼上位址列回撥地址即可。", "monkeycode_ai_session 的值(也可直接粘贴整段 Cookie)": "monkeycode_ai_session 的值(也可直接貼上整段 Cookie)", "ms- 开头的 API 令牌": "ms- 開頭的 API 權杖", "refreshToken 可选,填了到期可自动续期;两者都能从小浣熊客户端登录态文件里取到。": "refreshToken 可選,填了到期可自動續期;兩者都能從小浣熊客戶端登入態檔案裡取到。", "refreshToken 可选,填了可自动续期;两者都能从客户端登录态文件取到。同一个 Cline 账号两个池都能用,这里归入 {label}。": "refreshToken 可選,填了可自動續期;兩者都能從客戶端登入態檔案取到。同一個 Cline 帳號兩個池都能用,這裡歸入 {label}。", "token 支持 enc: 前缀(Windows 上自动解密)。未填 refreshToken 无法自动续期。": "token 支援 enc: 字首(Windows 上自動解密)。未填 refreshToken 無法自動續期。", "token 是登录态 Cookie;CatPaw 没有刷新机制,过期后需在客户端重新登录。": "token 是登入態 Cookie;CatPaw 沒有重新整理機制,過期後需在客戶端重新登入。", "user_ 开头的 API Key(也可直接粘贴 Authorization: Bearer … 整行)": "user_ 開頭的 API Key(也可直接貼上 Authorization: Bearer … 整行)", "{label} 网页登录的打开方式": "{label} 網頁登入的開啟方式", "{label} 账号地区": "{label} 帳號地區", "{label} 账号的添加方式": "{label} 帳號的新增方式", "{name} 不是合法 JSON:{reason}": "{name} 不是合法 JSON:{reason}", "{name}要粘一个 JSON 对象(形如 {sample})": "{name}要粘一個 JSON 物件(形如 {sample})", "{n} 个账号": "{n} 個帳號", "{n} 个账号,点击添加": "{n} 個帳號,點擊新增", "{seconds}s 后重发": "{seconds}s 後重發", "✅ {label}账号已添加": "✅ {label}帳號已新增", "✅ {label}账号已添加{name}": "✅ {label}帳號已新增{name}", "✅ 已从 cc-switch 导入 {n} 个供应商": "✅ 已從 cc-switch 匯入 {n} 個供應商", "✅ 已创建自定义提供商「{name}」并添加账号": "✅ 已建立自定義提供商「{name}」並新增帳號", "✅ 已删除自定义提供商「{name}」{accounts}{keys}": "✅ 已刪除自定義提供商「{name}」{accounts}{keys}", "✅ 已更新已有账号{name}(同一把 API Key 只保留一条,重复添加会合并)": "✅ 已更新已有帳號{name}(同一把 API Key 只保留一條,重複新增會合並)", "✅ 登录成功,{edition}账号已加入列表": "✅ 登入成功,{edition}帳號已加入列表", "✅ 领取成功:{planId}{period}": "✅ 領取成功:{planId}{period}", " 同一家可以放多把 key,按优先级轮换。": " 同一家可以放多把 key,按優先順序輪換。", "「{name}」的账号添加功能还在开发中,敬请期待。": "「{name}」的帳號新增功能還在開發中,敬請期待。", "一个 Key 用遍多家模型,模型名用「厂商/模型」全称(如 deepseek/deepseek-chat)": "一個 Key 用遍多家模型,模型名用「廠商/模型」全稱(如 deepseek/deepseek-chat)", "上游不要鉴权时留空,并勾选下面一项(留空又不勾会被当成未配置凭证)": "上游不要鑑權時留空,並勾選下面一項(留空又不勾會被當成未配置憑證)", "上游信息": "上游資訊", "不可领({status})": "不可領({status})", "不支持导入": "不支援匯入", "不是有效的凭证文件:内容要是一个 JSON 对象": "不是有效的憑證檔案:內容要是一個 JSON 物件", "不是有效的凭证文件:需要包含 accessToken 与 uid": "不是有效的憑證檔案:需要包含 accessToken 與 uid", "不是自定义提供商": "不是自定義提供商", "不需要 Key:转发与拉取模型都不发送鉴权头": "不需要 Key:轉發與拉取模型都不傳送鑑權頭", "不需要登录:点下面的按钮,网关会直接在智谱清言换发一份访客凭证并加入账号列表(也可以先填个备注名)。访客凭证可以直接用来对话,免费额度由上游按设备发放。
注意:访客账号没有积分体系 —— 它与「会员积分」「每日登录积分」「活动领取」相关的接口一律需要登录,因此那些能力对访客会如实跳过(账号页的积分、签到中心都不显示读数)。想要积分就用「填写凭证」粘一个已登录账号的令牌,或「导入桌面端登录态」。": "不需要登入:點下面的按鈕,閘道器會直接在智譜清言換髮一份訪客憑證並加入帳號列表(也可以先填個備註名)。訪客憑證可以直接用來對話,免費額度由上游按裝置發放。
注意:訪客帳號沒有積分體系 —— 它與「會員積分」「每日登入積分」「活動領取」相關的介面一律需要登入,因此那些能力對訪客會如實跳過(帳號頁的積分、簽到中心都不顯示讀數)。想要積分就用「填寫憑證」粘一個已登入帳號的權杖,或「匯入桌面版登入態」。", "两版账号可同时保存,各自一份模型清单(国内版与国际版是两家提供商,可分别启用与映射)。": "兩版帳號可同時儲存,各自一份模型清單(國內版與國際版是兩家提供商,可分別啟用與對映)。", "中国版": "中國版", "今天没有需要领的活动(都已到账)": "今天沒有需要領的活動(都已到賬)", "今天(北京时间 {day})已试 {attempts} 次,还能试 {left} 次{next}
": "今天(北京時間 {day})已試 {attempts} 次,還能試 {left} 次{next}
", "从别的机器(或 OfficeAce 桌面端 models.json)取三项贴进来:模型网关基址(baseUrl,形如 https://modelgw-…/v2)与 modelAppKey / modelAppSecret。这三项就能转发(网关凭据不过期);控制面临时凭据(accessKeyId 等)可选,留空则额度/自动续期不可用,但不影响转发。": "從別的機器(或 OfficeAce 桌面版 models.json)取三項貼進來:模型閘道器基址(baseUrl,形如 https://modelgw-…/v2)與 modelAppKey / modelAppSecret。這三項就能轉發(閘道器憑據不過期);控制面臨時憑據(accessKeyId 等)可選,留空則額度/自動續期不可用,但不影響轉發。", "从本机导入桌面端登录态": "從本機匯入桌面版登入態", "任务镜像 id": "任務映象 id", "余额查询": "餘額查詢", "使用 Google 账号登录": "使用 Google 帳號登入", "使用 Zai 账号登录": "使用 Zai 帳號登入", "使用个人访问令牌(PAT)": "使用個人存取權杖(PAT)", "免费模型不用填 Key(默认勾上「该上游无需鉴权」,网关自动用匿名凭证);付费模型则填 Zen 的 API Key。免费档上游只认官方客户端形态,已默认开启「伪装 OpenCode 官方客户端」": "免費模型不用填 Key(預設勾上「該上游無需鑑權」,閘道器自動用匿名憑證);付費模型則填 Zen 的 API Key。免費檔上游只認官方客戶端形態,已預設開啟「偽裝 OpenCode 官方客戶端」", "内嵌窗口": "內嵌視窗", "内嵌窗口打开;关窗即取消等待(Google 账号被拒时改用系统浏览器)": "內嵌視窗開啟;關窗即取消等待(Google 帳號被拒時改用系統瀏覽器)", "内嵌窗口打开;完成后自动加入列表,关窗即取消等待": "內嵌視窗開啟;完成後自動加入列表,關窗即取消等待", "内嵌窗口打开;扫码完成后自动加入列表,关窗即取消等待": "內嵌視窗開啟;掃碼完成後自動加入列表,關窗即取消等待", "内嵌窗口用全新环境,多账号互不影响;关窗即取消等待": "內嵌視窗用全新環境,多帳號互不影響;關窗即取消等待", "内嵌窗口(推荐)": "內嵌視窗(推薦)", "准备验证…": "準備驗證…", "凭据 JSON": "憑據 JSON", "凭证文件在哪?": "憑證檔案在哪?", "创建并添加账号": "建立並新增帳號", "创建这个提供商,并同时建立它的第一个账号。": "建立這個提供商,並同時建立它的第一個帳號。", "删除功能不可用(脚本未就绪)": "刪除功能不可用(指令碼未就緒)", "删除失败:{reason}": "刪除失敗:{reason}", "删除此提供商": "刪除此提供商", "及 {n} 个账号": "及 {n} 個帳號", "发送中…": "傳送中…", "发送失败:{message}": "傳送失敗:{message}", "发送未确认:登录窗口已弹出,请在弹出的窗口中手动完成登录": "傳送未確認:登入視窗已彈出,請在彈出的視窗中手動完成登入", "取消失败:{message}": "取消失敗:{message}", "取消等待": "取消等待", "只有「内嵌窗口」能恢复第三方入口:系统浏览器里我们无法改动登录页": "只有「內嵌視窗」能恢復第三方入口:系統瀏覽器裡我們無法改動登入頁", "可选": "可選", "可选(cloudaicompanionProject):留空由网关自动发现": "可選(cloudaicompanionProject):留空由閘道器自動發現", "可选,展示用": "可選,展示用", "可选,没有则无法自动续期": "可選,沒有則無法自動續期", "可选,留空使用凭据里的 user_name": "可選,留空使用憑據裡的 user_name", "可选,留空使用账号姓名、邮箱或令牌指纹": "可選,留空使用帳號姓名、郵箱或權杖指紋", "可选,留空使用账号昵称或邮箱": "可選,留空使用帳號暱稱或郵箱", "可选,留空则用 key 尾号": "可選,留空則用 key 尾號", "可选,留空则用 userId": "可選,留空則用 userId", "可选,留空则用上游账号昵称": "可選,留空則用上游帳號暱稱", "可选,留空则用上游返回的账号名或账号 id": "可選,留空則用上游返回的帳號名或帳號 id", "可选,留空则用凭证里的账号名": "可選,留空則用憑證裡的帳號名", "可选,留空则用文件里的昵称": "可選,留空則用檔案裡的暱稱", "可选,留空则用登录名或 uid": "可選,留空則用登入名或 uid", "可选,留空则用脱敏手机号": "可選,留空則用脫敏手機號", "可选,留空则用脱敏手机号或 userId": "可選,留空則用脫敏手機號或 userId", "可选,留空则用账号 uk": "可選,留空則用帳號 uk", "可选,留空则用账号昵称": "可選,留空則用帳號暱稱", "可选,留空则用账号昵称或 userId": "可選,留空則用帳號暱稱或 userId", "可选,留空则用邮箱或令牌尾号": "可選,留空則用郵箱或權杖尾號", "可选,留空用「OfficeAce 果办」": "可選,留空用「OfficeAce 果辦」", "可选,留空自动生成": "可選,留空自動生成", "可选,留空自动用昵称": "可選,留空自動用暱稱", "可选,给这个访客账号起个备注名": "可選,給這個訪客帳號起個備註名", "可选,续期时带上": "可選,續期時帶上", "可选,讯飞侧 userid": "可選,訊飛側 userid", "可选:发起对话必需,留空则由网关从该账号已有任务里自动发现,发现不到时之后手动补": "可選:發起對話必需,留空則由閘道器從該帳號已有任務裡自動發現,發現不到時之後手動補", "可选:账号邮箱,用于展示与身份识别(换新令牌也能认回同一账号)": "可選:帳號郵箱,用於展示與身份識別(換新權杖也能認回同一帳號)", "可选;UUID 形态,与凭据同生共死": "可選;UUID 形態,與憑據同生共死", "可选;填了才能到期自动续期": "可選;填了才能到期自動續期", "可选;用于去重与展示名(留空时网关会问一次上游)": "可選;用於去重與展示名(留空時閘道器會問一次上游)", "可选;用于生成账号 id 与展示名": "可選;用於生成帳號 id 與展示名", "可选;纯数字串(上游只收 8–24 位数字)": "可選;純數字串(上游只收 8–24 位數字)", "可领取": "可領取", "同一家可以混着放:有 Key 的账号与无鉴权账号各按各的规则走;无需鉴权的账号也能并存多条(各自可配不同的出网代理)": "同一家可以混著放:有 Key 的帳號與無鑑權帳號各按各的規則走;無需鑑權的帳號也能並存多條(各自可配不同的出網代理)", "同地址换 anthropic 协议即走它的 Claude 兼容端点。转发必须填 OpenCode Go 的 API Key(订阅制;获取模型清单不需要 Key,但发请求上游会回 401「Missing API key」)": "同地址換 anthropic 協議即走它的 Claude 相容端點。轉發必須填 OpenCode Go 的 API Key(訂閱制;獲取模型清單不需要 Key,但發請求上游會回 401「Missing API key」)", "响应为空": "響應為空", "商汤日日新的 OpenAI 兼容端点;余额查询走控制台账号密码(见下方「余额查询」一段)": "商湯日日新的 OpenAI 相容端點;餘額查詢走控制台帳號密碼(見下方「餘額查詢」一段)", "国内版": "國內版", "国内版与**国际版是两套独立的账号与套餐**,凭证与领取的套餐都不通用。": "國內版與**國際版是兩套獨立的帳號與套餐**,憑證與領取的套餐都不通用。", "国内版登录页没有 Google / GitHub 入口(它用微信 / 手机号 / 邮箱登录)": "國內版登入頁沒有 Google / GitHub 入口(它用微信 / 手機號 / 郵箱登入)", "国内版的登录站点是 www.accio-ai.com,与国际版不是同一站。": "國內版的登入站點是 www.accio-ai.com,與國際版不是同一站。", "国内版(WorkBuddy)": "國內版(WorkBuddy)", "国内站为 https://api.siliconflow.cn/v1": "國內站為 https://api.siliconflow.cn/v1", "国内站(minimaxi.com);OpenAI 兼容地址为 https://api.minimaxi.com/v1": "國內站(minimaxi.com);OpenAI 相容地址為 https://api.minimaxi.com/v1", "国际版": "國際版", "国际版 z.ai 的 Coding 套餐;OpenAI 兼容地址为 https://api.z.ai/api/coding/paas/v4": "國際版 z.ai 的 Coding 套餐;OpenAI 相容地址為 https://api.z.ai/api/coding/paas/v4", "国际版与国内版是**两套独立的账号**(同一账号体系的两个站点),凭证不通用。": "國際版與國內版是**兩套獨立的帳號**(同一帳號體系的兩個站點),憑證不通用。", "国际版与国内版账号体系独立,请填国际版的凭证。未填 refreshToken 无法自动续期。": "國際版與國內版帳號體系獨立,請填國際版的憑證。未填 refreshToken 無法自動續期。", "国际版登录页默认只显示邮箱登录,勾选后恢复 Google / GitHub / X 入口": "國際版登入頁預設只顯示郵箱登入,勾選後恢復 Google / GitHub / X 入口", "国际版的推理站点是 api.z.ai,与国内版不是同一站;套餐也各自独立。": "國際版的推理站點是 api.z.ai,與國內版不是同一站;套餐也各自獨立。", "国际版(WorkBuddy AI)": "國際版(WorkBuddy AI)", "国际站 Coding 套餐;OpenAI 兼容地址为 https://api.minimax.io/v1": "國際站 Coding 套餐;OpenAI 相容地址為 https://api.minimax.io/v1", "在 cc-switch 里找到": "在 cc-switch 裡找到", "在内嵌窗口里完成官方登录,成功后自动加入账号列表。": "在內嵌視窗裡完成官方登入,成功後自動加入帳號列表。", "在{label}的 Qoder 账号设置 → Integrations 生成 PAT(别填 Google / GitHub 的令牌)。两个地区的账号与凭证不通用。": "在{label}的 Qoder 帳號設定 → Integrations 生成 PAT(別填 Google / GitHub 的權杖)。兩個地區的帳號與憑證不通用。", "在打开的官方授权页里用微信扫码登录(页面会直接显示二维码)。扫码成功后自动加入账号列表。": "在開啟的官方授權頁裡用微信掃碼登入(頁面會直接顯示二維碼)。掃碼成功後自動加入帳號列表。", "在打开的窗口里用百度账号登录 KukuAI 主站(手机验证码 / 扫码均可),登录成功后自动加入账号列表。网关会向百度换发 KukuAI 业务会话令牌(依赖本机已安装库库AI 客户端)。": "在開啟的窗口裡用百度帳號登入 KukuAI 主站(手機驗證碼 / 掃碼均可),登入成功後自動加入帳號列表。閘道器會向百度換髮 KukuAI 業務會話權杖(依賴本機已安裝庫庫AI 客戶端)。", "在打开的窗口里登录 Google 账号(Antigravity 的授权页),授权完成后自动加入账号列表。": "在開啟的窗口裡登入 Google 帳號(Antigravity 的授權頁),授權完成後自動加入帳號列表。", "在浏览器中打开登录页": "在瀏覽器中開啟登入頁", "地区": "地區", "填写凭证": "填寫憑證", "填写凭证添加": "填寫憑證新增", "备注名": "備註名", "套餐": "套餐", "如:智谱 GLM": "如:智譜 GLM", "完成登录后自动加入账号列表,昵称取自上游。": "完成登入後自動加入帳號列表,暱稱取自上游。", "官方客户端凭证目录:Windows 是 C:\\Users\\<你的用户名>\\AppData\\Local\\CodeBuddyExtension\\Data\\Public\\auth,macOS 是 ~/Library/Application Support/CodeBuddyExtension/Data/Public/auth": "官方客戶端憑證目錄:Windows 是 C:\\Users\\<你的使用者名稱>\\AppData\\Local\\CodeBuddyExtension\\Data\\Public\\auth,macOS 是 ~/Library/Application Support/CodeBuddyExtension/Data/Public/auth", "官方已确认到账": "官方已確認到賬", "导入": "匯入", "导入中…": "匯入中…", "导入凭证文件": "匯入憑證檔案", "导入失败": "匯入失敗", "导入失败:{reason}": "匯入失敗:{reason}", "导入所选": "匯入所選", "导入所选({n})": "匯入所選({n})", "导入桌面端登录态": "匯入桌面版登入態", "将打开内嵌窗口;授权完成后自动加入账号列表。关掉窗口即取消等待。授权页最后可能提示无法打开 zcode:// 链接,这是正常的 —— 结果已由服务端记下": "將開啟內嵌視窗;授權完成後自動加入帳號列表。關掉視窗即取消等待。授權頁最後可能提示無法開啟 zcode:// 連結,這是正常的 —— 結果已由服務端記下", "将打开内嵌窗口;授权完成后自动加入账号列表。远程面板可粘贴回调地址。关掉窗口即取消等待。链接 5 分钟内有效,超时或未点就会作废(可重新发起)": "將開啟內嵌視窗;授權完成後自動加入帳號列表。遠端面板可貼上回撥地址。關掉視窗即取消等待。連結 5 分鐘內有效,超時或未點就會作廢(可重新發起)", "将打开内嵌窗口;登录完成后自动加入账号列表。关掉窗口即取消等待": "將開啟內嵌視窗;登入完成後自動加入帳號列表。關掉視窗即取消等待", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的 Trae 账号);同机完成后自动加入,Docker / 远程面板按提示粘贴地址栏回调地址。": "將用系統預設瀏覽器開啟授權頁(會複用瀏覽器裡已登入的 Trae 帳號);同機完成後自動加入,Docker / 遠端面板按提示貼上位址列回撥地址。", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的 ZCode 账号);授权完成后自动加入账号列表。页面最后可能提示无法打开 zcode:// 链接,属正常现象": "將用系統預設瀏覽器開啟授權頁(會複用瀏覽器裡已登入的 ZCode 帳號);授權完成後自動加入帳號列表。頁面最後可能提示無法開啟 zcode:// 連結,屬正常現象", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的华为云账号);授权码由网关轮询云端取回,与浏览器跑在哪台机器无关,完成后自动加入账号列表": "將用系統預設瀏覽器開啟授權頁(會複用瀏覽器裡已登入的華為雲帳號);授權碼由閘道器輪詢雲端取回,與瀏覽器跑在哪臺機器無關,完成後自動加入帳號列表", "将用系统默认浏览器打开授权页(会复用浏览器里已登录的华为云账号);浏览器与网关不在同一台机器时,按上方说明把最终回调地址粘贴回面板": "將用系統預設瀏覽器開啟授權頁(會複用瀏覽器裡已登入的華為雲帳號);瀏覽器與閘道器不在同一臺機器時,按上方說明把最終回撥地址貼上回面板", "将用系统默认浏览器打开登录页(会复用浏览器里已登录的 Accio 账号);完成登录后自动加入账号列表,关掉弹窗即取消等待": "將用系統預設瀏覽器開啟登入頁(會複用瀏覽器裡已登入的 Accio 帳號);完成登入後自動加入帳號列表,關掉彈窗即取消等待", "小米 MiMo Token Plan 套餐(新加坡站)": "小米 MiMo Token Plan 套餐(新加坡站)", "已到账": "已到賬", "已取消登录等待": "已取消登入等待", "已取消领取": "已取消領取", "已取消验证码": "已取消驗證碼", "已填写手机号,正在发送验证码…": "已填寫手機號,正在傳送驗證碼…", "已声明无需鉴权:账号会被正常选路,出网时不带任何鉴权头": "已宣告無需鑑權:帳號會被正常選路,出網時不帶任何鑑權頭", "已导入 {ok} 个,失败 {fail} 个(失败项已标注在列表里)": "已匯入 {ok} 個,失敗 {fail} 個(失敗項已標註在列表裡)", "已建过 · {n} 个账号,点击继续添加": "已建過 · {n} 個帳號,點擊繼續新增", "已建过,点击继续添加账号": "已建過,點擊繼續新增帳號", "已打开官方登录页,请在窗口中完成登录…": "已開啟官方登入頁,請在視窗中完成登入…", "已点发送,等待短信…": "已點發送,等待簡訊…", "已用系统默认浏览器打开登录页,请在浏览器中完成登录…": "已用系統預設瀏覽器開啟登入頁,請在瀏覽器中完成登入…", "已领取,等官方确认": "已領取,等官方確認", "当前壳版本不支持 AutoClaw 网页登录,请更新应用": "當前殼版本不支援 AutoClaw 網頁登入,請更新應用", "当前没有可领取的套餐(活动尚未开始)": "當前沒有可領取的套餐(活動尚未開始)", "当前环境不支持领取(桥接方法缺失)": "當前環境不支援領取(橋接方法缺失)", "必填,CatPaw 账号标识": "必填,CatPaw 帳號標識", "恢复 Google / GitHub 入口": "恢復 Google / GitHub 入口", "手机号": "手機號", "手机验证码登录": "手機驗證碼登入", "打开 Trae SOLO 的官方授权页(trae.cn)并用你的 Trae 账号登录:授权完成后官方页面会跳回本机的一个临时端口;同机部署自动接收,Docker / 远程面板请按提示复制地址栏回调地址。": "開啟 Trae SOLO 的官方授權頁(trae.cn)並用你的 Trae 帳號登入:授權完成後官方頁面會跳回本機的一個臨時連接埠;同機部署自動接收,Docker / 遠端面板請按提示覆制位址列回撥地址。", "打开 Accio {label}的官方登录页({site})并用你的 Accio 账号登录:登录成功后官方页面会跳回本机;同机自动完成,Docker / 远程面板按提示粘贴回调地址即可(授权码只在本机传给网关,界面不显示明文 token)。": "開啟 Accio {label}的官方登入頁({site})並用你的 Accio 帳號登入:登入成功後官方頁面會跳回本機;同機自動完成,Docker / 遠端面板按提示貼上回撥地址即可(授權碼只在本機傳給閘道器,介面不顯示明文 token)。", "打开 Accio {label}登录页": "開啟 Accio {label}登入頁", "打开 Antigravity 网页登录": "開啟 Antigravity 網頁登入", "打开 CatPaw 网页登录": "開啟 CatPaw 網頁登入", "打开 Cline 授权页": "開啟 Cline 授權頁", "打开 CodeArts 授权页": "開啟 CodeArts 授權頁", "打开 Qoder 网页登录": "開啟 Qoder 網頁登入", "打开 Trae 授权页": "開啟 Trae 授權頁", "打开 ZCode {label}的官方授权页并用你的账号登录。授权结果由 ZCode 服务端记录,网关在后台自动取回凭证并加入账号列表。": "開啟 ZCode {label}的官方授權頁並用你的帳號登入。授權結果由 ZCode 服務端記錄,閘道器在後臺自動取回憑證並加入帳號列表。", "打开 ZCode {label}授权页": "開啟 ZCode {label}授權頁", "打开华为云 CodeArts 的官方授权页登录:登录完成后官方页面会把浏览器带回网关自己的 /oauth/callback,网关用一次性授权码换取临时凭据并加入账号列表。
网关跑在另一台机器上时,网页端会提示把地址栏中的最终回调地址直接粘贴回面板。": "開啟華為雲 CodeArts 的官方授權頁登入:登入完成後官方頁面會把瀏覽器帶回閘道器自己的 /oauth/callback,閘道器用一次性授權碼換取臨時憑據並加入帳號列表。
閘道器跑在另一臺機器上時,網頁端會提示把位址列中的最終回撥地址直接貼上回面板。", "打开华为云授权页登录:登录完成后网关会自动轮询云端取回授权码并加入账号列表(不需要装 OfficeAce 桌面端,也无需手工回填回调地址)。": "開啟華為雲授權頁登入:登入完成後閘道器會自動輪詢雲端取回授權碼並加入帳號列表(不需要裝 OfficeAce 桌面版,也無需手工回填回撥地址)。", "打开官方授权页完成设备码授权,登录的是{label}({site})的账号。": "開啟官方授權頁完成裝置碼授權,登入的是{label}({site})的帳號。", "打开授权页": "開啟授權頁", "打开授权页完成确认,账号自动加入 {label}{note}": "開啟授權頁完成確認,帳號自動加入 {label}{note}", "打开方式": "開啟方式", "打开网页登录": "開啟網頁登入", "探测失败:{message}": "探測失敗:{message}", "接入一个兼容上游": "接入一個相容上游", "提交中…": "提交中…", "搜索提供商": "搜尋提供商", "搜索提供商…": "搜尋提供商…", "整份粘贴官方插件 / CLIProxyAPI 落盘的凭据 JSON(形如 {\"codearts_provider_credential\":{…}},铺平的也行)。
必填:access_key_id、secret_access_key、security_token。要能自动续期,必须连 refresh_token 与 oauth_context 一起粘 —— 临时凭据约一小时到期,缺这半块就续不回来,只能重新登录。": "整份貼上官方外掛 / CLIProxyAPI 落盤的憑據 JSON(形如 {\"codearts_provider_credential\":{…}},鋪平的也行)。
必填:access_key_id、secret_access_key、security_token。要能自動續期,必須連 refresh_token 與 oauth_context 一起粘 —— 臨時憑據約一小時到期,缺這半塊就續不回來,只能重新登入。", "文件是{edition}凭证,已按该版本导入": "檔案是{edition}憑證,已按該版本匯入", "新建自定义提供商": "新建自定義提供商", "方案:{label}": "方案:{label}", "明文 JWT 或 auth.json 里的 enc: 加密值(自动解密)": "明文 JWT 或 auth.json 裡的 enc: 加密值(自動解密)", "明文 JWT(国际版账号的 access token)": "明文 JWT(國際版帳號的 access token)", "智谱 bigmodel.cn 的 Coding 套餐,Key 在 open.bigmodel.cn/usercenter/apikeys": "智譜 bigmodel.cn 的 Coding 套餐,Key 在 open.bigmodel.cn/usercenter/apikeys", "未知错误": "未知錯誤", "未能获取授权地址,请重试": "未能獲取授權地址,請重試", "未能读取 cc-switch 数据": "未能讀取 cc-switch 資料", "未领取成功": "未領取成功", "本地 Ollama、OpenCode Zen 免费档这类上游要勾上,否则账号不可用": "本地 Ollama、OpenCode Zen 免費檔這類上游要勾上,否則帳號不可用", "本家有两个**互不替代**的凭证,按你要用的功能填,至少填一个:编码套餐 API Key 用于转发推理(打 {site})与查询窗口限额(每 N 小时 / 每周的剩余比例);jwt 用于领取套餐与查询余额(打 zcode.z.ai 的 billing 网关,官方叫 Coding Plan JWT,是一串三段点分的字符串)。余额两把都能查、但读到的东西不同:jwt 读到余额桶与套餐到期,API Key 读到窗口限额;而领取只认 jwt、转发只认 API Key。请填写 {label}账号的凭证 —— {plan}(最容易拿到的办法:直接用上方的「网页登录」—— 它会替你把这个 API Key 换好,两个凭证一起拿到。)": "本家有兩個**互不替代**的憑證,按你要用的功能填,至少填一個:編碼套餐 API Key 用於轉發推理(打 {site})與查詢視窗限額(每 N 小時 / 每週的剩餘比例);jwt 用於領取套餐與查詢餘額(打 zcode.z.ai 的 billing 閘道器,官方叫 Coding Plan JWT,是一串三段點分的字串)。餘額兩把都能查、但讀到的東西不同:jwt 讀到餘額桶與套餐到期,API Key 讀到視窗限額;而領取只認 jwt、轉發只認 API Key。請填寫 {label}帳號的憑證 —— {plan}(最容易拿到的辦法:直接用上方的「網頁登入」—— 它會替你把這個 API Key 換好,兩個憑證一起拿到。)", "本机 Ollama 的 OpenAI 兼容端点,无需 API Key(默认已勾上「该上游无需鉴权」,鉴权头一个都不发)": "本機 Ollama 的 OpenAI 相容端點,無需 API Key(預設已勾上「該上游無需鑑權」,鑑權頭一個都不發)", "本次未确认到账": "本次未確認到賬", "条可导入": "條可匯入", "条配置,其中": "條配置,其中", "桌面运行时不可用(Tauri 未初始化)": "桌面執行時不可用(Tauri 未初始化)", "模型网关基址": "模型閘道器基址", "正在打开百度登录页…": "正在開啟百度登入頁…", "正在扫描本机 cc-switch…": "正在掃描本機 cc-switch…", "正在换发访客凭证…": "正在換髮訪客憑證…", "正在添加…": "正在新增…", "正在等待{name}登录完成;完成或取消后才能发起新的登录": "正在等待{name}登入完成;完成或取消後才能發起新的登入", "每周": "每週", "每日": "每日", "每月": "每月", "没有则无法自动续期": "沒有則無法自動續期", "没有匹配「{keyword}」的提供商": "沒有匹配「{keyword}」的提供商", "添加 {name} 账号": "新增 {name} 帳號", "添加中…": "新增中…", "添加到 ": "新增到 ", "添加失败:{reason}": "新增失敗:{reason}", "添加小浣熊账号": "新增小浣熊帳號", "添加方式": "新增方式", "添加访客账号": "新增訪客帳號", "添加账号": "新增帳號", "火山引擎 Coding 套餐;通用推理接入点为 https://ark.cn-beijing.volces.com/api/v3": "火山引擎 Coding 套餐;通用推理接入點為 https://ark.cn-beijing.volces.com/api/v3", "点击添加账号": "點擊新增帳號", "点开即预填,填 Key 接入": "點開即預填,填 Key 接入", "点按钮后先过一次滑块验证(官方风控),随后打开登录页,登录完成即自动添加账号。
这是国际版官方唯一的登录方式;已在客户端登录过的,用「导入桌面端登录态」更快。": "點按鈕後先過一次滑塊驗證(官方風控),隨後開啟登入頁,登入完成即自動新增帳號。
這是國際版官方唯一的登入方式;已在客戶端登入過的,用「匯入桌面版登入態」更快。", "用 AutoClaw 账号绑定的手机号登录:点击「获取验证码」,收到短信后填入下方并登录。验证码由本机直接提交给官方接口,界面不显示 token。": "用 AutoClaw 帳號繫結的手機號登入:點擊「獲取驗證碼」,收到簡訊後填入下方並登入。驗證碼由本機直接提交給官方介面,介面不顯示 token。", "用 CatPaw 账号完成登录(美团 passport),成功后自动加入账号列表。": "用 CatPaw 帳號完成登入(美團 passport),成功後自動加入帳號列表。", "用 Loomy 账号绑定的手机号登录:点「获取验证码」后填入即可。这是本家最省事的入口。": "用 Loomy 帳號繫結的手機號登入:點「獲取驗證碼」後填入即可。這是本家最省事的入口。", "用于转发;形如 apiKey.secret 两段点分(不填则这个账号不能转发)": "用於轉發;形如 apiKey.secret 兩段點分(不填則這個帳號不能轉發)", "用于领取套餐与查询余额;不填则这个账号不能领取与查余额": "用於領取套餐與查詢餘額;不填則這個帳號不能領取與查餘額", "用户 ID": "使用者 ID", "用绑定的手机号登录:点「获取验证码」后填入即可。这是国内版官方唯一的登录方式。": "用繫結的手機號登入:點「獲取驗證碼」後填入即可。這是國內版官方唯一的登入方式。", "留空则用提供商名称": "留空則用提供商名稱", "登录 / 添加 {name} 账号": "登入 / 新增 {name} 帳號", "登录 session(一长串)": "登入 session(一長串)", "登录中…": "登入中…", "登录失败:{message}": "登入失敗:{message}", "登录已结束": "登入已結束", "登录并添加": "登入並新增", "登录态文件路径:~/.box-agent/config/auth.json(Windows:C:\\Users\\<你的用户名>\\.box-agent\\config\\auth.json)": "登入態檔案路徑:~/.box-agent/config/auth.json(Windows:C:\\Users\\<你的使用者名稱>\\.box-agent\\config\\auth.json)", "确定删除自定义提供商「{name}」?将同时删除该提供商下 {count} 个账号,删除后无法恢复。": "確定刪除自定義提供商「{name}」?將同時刪除該提供商下 {count} 個帳號,刪除後無法恢復。", "等待 Accio {label}登录完成…": "等待 Accio {label}登入完成…", "等待 CatPaw 登录完成…": "等待 CatPaw 登入完成…", "等待 Cline 授权确认…": "等待 Cline 授權確認…", "等待 CodeArts 登录完成…": "等待 CodeArts 登入完成…", "等待 Google 授权完成…": "等待 Google 授權完成…", "等待 KukuAI 登录完成…": "等待 KukuAI 登入完成…", "等待 OfficeAce 登录完成…": "等待 OfficeAce 登入完成…", "等待 OrcaTerm 登录完成…": "等待 OrcaTerm 登入完成…", "等待 Qoder 授权完成…": "等待 Qoder 授權完成…", "等待 Trae 授权完成…": "等待 Trae 授權完成…", "等待 ZCode {label}授权完成…": "等待 ZCode {label}授權完成…", "等待小浣熊登录完成…": "等待小浣熊登入完成…", "等待登录完成…": "等待登入完成…", "等待网页登录…": "等待網頁登入…", "粘贴 API Key": "貼上 API Key", "粘贴 API 令牌": "貼上 API 權杖", "粘贴 Accio 的 accessToken": "貼上 Accio 的 accessToken", "粘贴 Antigravity 的 Google refresh token(以 1// 开头;直接粘贴含 refresh_token= 的整行也行)。
这是网页登录之外的手工入口(例如从已登录的官方 IDE 里导出)。refresh token 不会过期,access token 到期由网关自动续期;令牌丢了只能重新走 Google 授权,请妥善保存。": "貼上 Antigravity 的 Google refresh token(以 1// 開頭;直接貼上含 refresh_token= 的整行也行)。
這是網頁登入之外的手工入口(例如從已登入的官方 IDE 裡匯出)。refresh token 不會過期,access token 到期由閘道器自動續期;權杖丟了只能重新走 Google 授權,請妥善儲存。", "粘贴 Command Code 的 API Key(user_ 开头;从官方 CLI 的 ~/.commandcode/auth.json 或网页 studio 获取)。整行 / 带引号 / 带 Bearer 前缀地粘都行,网关会自己剥成裸 key。key 不过期、也没有续期接口,失效后重新获取即可;添加时网关会做一次轻量探活,失败不影响添加。": "貼上 Command Code 的 API Key(user_ 開頭;從官方 CLI 的 ~/.commandcode/auth.json 或網頁 studio 獲取)。整行 / 帶引號 / 帶 Bearer 字首地粘都行,閘道器會自己剝成裸 key。key 不過期、也沒有續期介面,失效後重新獲取即可;新增時閘道器會做一次輕量探活,失敗不影響新增。", "粘贴 Cookie": "貼上 Cookie", "粘贴 Google refresh token": "貼上 Google refresh token", "粘贴 ModelScope 的 API 令牌(ms- 开头,在 {site} 的「访问令牌」页获取)。
{siteNote}
这枚令牌两用:网关既用它调推理,也用它读账号身份、魔粒余额与每日签到。令牌长期有效、没有续期接口,失效后重新获取再粘一次即可。": "貼上 ModelScope 的 API 權杖(ms- 開頭,在 {site} 的「存取權杖」頁獲取)。
{siteNote}
這枚權杖兩用:閘道器既用它調推理,也用它讀帳號身份、魔粒餘額與每日簽到。權杖長期有效、沒有續期介面,失效後重新獲取再粘一次即可。", "粘贴 OrcaTerm 的 OAuth accessToken(JWT,三段点分;从桌面客户端 data.bin 或 Web 版 Cookie ot_session 获取)。直接粘贴含 Bearer / ot_session= 的整行也行,网关会自己剥成裸 token。添加后由网关自动续期(上游有续期接口),无需跟随 2 小时时效手动更换。": "貼上 OrcaTerm 的 OAuth accessToken(JWT,三段點分;從桌面客戶端 data.bin 或 Web 版 Cookie ot_session 獲取)。直接貼上含 Bearer / ot_session= 的整行也行,閘道器會自己剝成裸 token。新增後由閘道器自動續期(上游有續期介面),無需跟隨 2 小時時效手動更換。", "粘贴 Qoder 个人访问令牌(pt-…)": "貼上 Qoder 個人存取權杖(pt-…)", "粘贴 accessToken": "貼上 accessToken", "粘贴 access_token(一长串 JWT)": "貼上 access_token(一長串 JWT)", "粘贴 session cookie": "貼上 session cookie", "粘贴 token / refreshToken": "貼上 token / refreshToken", "粘贴 workos:… 开头的令牌(不带前缀也会自动补上)": "貼上 workos:… 開頭的權杖(不帶字首也會自動補上)", "粘贴智谱清言的访问令牌(JWT,三段点分)。获取方式:浏览器打开 chatglm.cn 并登录后,在开发者工具的 Application → Cookies 里复制 chatglm_token 的值(也可以直接粘 chatglm_token=…; 整行)。粘贴后会先向上游校验一次,校验通过才落账号;登录账号的积分、签到能力都能用,之后由网关自动续期(上游有续期接口)。": "貼上智譜清言的存取權杖(JWT,三段點分)。獲取方式:瀏覽器開啟 chatglm.cn 並登入後,在開發者工具的 Application → Cookies 裡複製 chatglm_token 的值(也可以直接粘 chatglm_token=…; 整行)。粘貼後會先向上游校驗一次,校驗通過才落帳號;登入帳號的積分、簽到能力都能用,之後由閘道器自動續期(上游有續期介面)。", "粘贴登录凭据": "貼上登入憑據", "粘贴的是登录 session(同时是模型网关的 token)。Loomy 没有续期接口,session 有效期约 14 天,过期后重新登录即可。": "貼上的是登入 session(同時是模型閘道器的 token)。Loomy 沒有續期介面,session 有效期約 14 天,過期後重新登入即可。", "粘贴网关凭据": "貼上閘道器憑據", "粘贴网页登录态 cookie monkeycode_ai_session 的值(在浏览器里复制整段 Cookie 直接粘贴也行,网关会自己剥出值)。
{siteNote}
MonkeyCode 没有续期接口:session 有效期约 30 天(硬限制),过期后重新登录网页、再粘贴一次即可。": "貼上網頁登入態 cookie monkeycode_ai_session 的值(在瀏覽器裡複製整段 Cookie 直接貼上也行,閘道器會自己剝出值)。
{siteNote}
MonkeyCode 沒有續期介面:session 有效期約 30 天(硬限制),過期後重新登入網頁、再貼上一次即可。", "粘贴访问令牌": "貼上存取權杖", "系统浏览器": "系統瀏覽器", "系统浏览器可复用已有登录态(国际版推荐);内嵌窗口更干净。": "系統瀏覽器可複用已有登入態(國際版推薦);內嵌視窗更乾淨。", "系统浏览器打开(复用已登录的 Cline 账号);完成后自动加入列表": "系統瀏覽器開啟(複用已登入的 Cline 帳號);完成後自動加入列表", "系统浏览器打开(复用已登录的 Google 账号);完成后自动加入列表": "系統瀏覽器開啟(複用已登入的 Google 帳號);完成後自動加入列表", "系统浏览器打开(复用已登录的 Zai / Google 账号);完成后自动加入列表": "系統瀏覽器開啟(複用已登入的 Zai / Google 帳號);完成後自動加入列表", "系统浏览器打开(复用已登录的美团账号);完成后自动加入列表": "系統瀏覽器開啟(複用已登入的美團帳號);完成後自動加入列表", "系统浏览器打开(复用已登录账号);完成后自动加入列表": "系統瀏覽器開啟(複用已登入帳號);完成後自動加入列表", "系统默认浏览器": "系統預設瀏覽器", "编码套餐 API Key": "編碼套餐 API Key", "网关 Secret": "閘道器 Secret", "网页登录": "網頁登入", "网页登录的打开方式": "網頁登入的開啟方式", "网页登录(Zai / Google)": "網頁登入(Zai / Google)", "自定义": "自定義", "自建聚合面板:填你自己的站点地址。余额查询用该账号的 API Key 打 {base}/v1/usage,不需要额外配置": "自建聚合面板:填你自己的站點地址。餘額查詢用該帳號的 API Key 打 {base}/v1/usage,不需要額外配置", "自建聚合面板:填你自己的站点地址;余额查询要另填 NewAPI 的个人访问令牌(见下方「余额查询」一段)": "自建聚合面板:填你自己的站點地址;餘額查詢要另填 NewAPI 的個人存取權杖(見下方「餘額查詢」一段)", "获取风控配置失败,将直接尝试领取:{message}": "獲取風控配置失敗,將直接嘗試領取:{message}", "获取验证码": "獲取驗證碼", "访客模式": "訪客模式", "访客模式(免登录)": "訪客模式(免登入)", "该上游无需鉴权(不发送鉴权头)": "該上游無需鑑權(不傳送鑑權頭)", "该提供商": "該提供商", "该提供商账号添加功能即将上线": "該提供商帳號新增功能即將上線", "该自定义提供商已不存在(可能已被删除),请刷新后重试": "該自定義提供商已不存在(可能已被刪除),請重新整理後重試", "请先选择一个自定义提供商": "請先選擇一個自定義提供商", "请在弹出的滑块中完成验证(官方要求的风控步骤)": "請在彈出的滑塊中完成驗證(官方要求的風控步驟)", "请填写 11 位大陆手机号": "請填寫 11 位大陸手機號", "请填写 6 位数字验证码": "請填寫 6 位數字驗證碼", "请填写 Base URL": "請填寫 Base URL", "请填写 {label}": "請填寫 {label}", "请填写名称": "請填寫名稱", "请完成验证…": "請完成驗證…", "读取 %APPDATA%/AutoClaw/auth.json 并解密,仅 Windows": "讀取 %APPDATA%/AutoClaw/auth.json 並解密,僅 Windows", "读取 ~/.cline/data/settings/providers.json,需已在 Cline 客户端登录": "讀取 ~/.cline/data/settings/providers.json,需已在 Cline 客戶端登入", "读取 ~/.meituan-catpaw/auth.json,需已在 CatPaw 客户端登录": "讀取 ~/.meituan-catpaw/auth.json,需已在 CatPaw 客戶端登入", "读取本机 KukuAI 客户端登录态(%APPDATA%\\baidugenflowpro\\Network\\Cookies),需已在 KukuAI 客户端登录": "讀取本機 KukuAI 客戶端登入態(%APPDATA%\\baidugenflowpro\\Network\\Cookies),需已在 KukuAI 客戶端登入", "读取本机 OrcaTerm 客户端登录态(%APPDATA%\\com.orcaterm-desktop.app\\data.bin),需已在 OrcaTerm 客户端登录": "讀取本機 OrcaTerm 客戶端登入態(%APPDATA%\\com.orcaterm-desktop.app\\data.bin),需已在 OrcaTerm 客戶端登入", "读取本机智谱清言客户端登录态(%APPDATA%\\chatglm\\Network\\Cookies),需已在客户端登录": "讀取本機智譜清言客戶端登入態(%APPDATA%\\chatglm\\Network\\Cookies),需已在客戶端登入", "读本机官方客户端(Tencent WorkBuddy / WorkBuddy AI)当前登录的账号:自动定位其凭证目录里最新的登录态文件(需已在本机官方客户端登录)。导入后由网关自动续期,无需跟随 2 小时时效手动换令牌。": "讀本機官方客戶端(Tencent WorkBuddy / WorkBuddy AI)當前登入的帳號:自動定位其憑證目錄裡最新的登入態檔案(需已在本機官方客戶端登入)。匯入後由閘道器自動續期,無需跟隨 2 小時時效手動換權杖。", "读本机客户端当前登录态(明文 Cookie,无需解密)。客户端运行时 Cookies 文件被独占占用,导入前请先关闭 KukuAI 客户端。": "讀本機客戶端當前登入態(明文 Cookie,無需解密)。客戶端執行時 Cookies 檔案被獨佔佔用,匯入前請先關閉 KukuAI 客戶端。", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。": "讀本機客戶端當前登入態,每次即時讀取(刪掉這條記錄不影響客戶端登入態)。", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。客户端重新登录后点「刷新 Token」同步。": "讀本機客戶端當前登入態,每次即時讀取(刪掉這條記錄不影響客戶端登入態)。客戶端重新登入後點「重新整理 Token」同步。", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。客户端重新登录后重新导入即可。": "讀本機客戶端當前登入態,每次即時讀取(刪掉這條記錄不影響客戶端登入態)。客戶端重新登入後重新匯入即可。", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。用 Zai / Google 登录客户端的用户走这一条。": "讀本機客戶端當前登入態,每次即時讀取(刪掉這條記錄不影響客戶端登入態)。用 Zai / Google 登入客戶端的使用者走這一條。", "读本机客户端当前登录态,每次实时读取(删掉这条记录不影响客户端登录态)。这一条归入 {label}。": "讀本機客戶端當前登入態,每次即時讀取(刪掉這條記錄不影響客戶端登入態)。這一條歸入 {label}。", "读本机客户端当前登录的 OAuth 令牌(明文 JSON,无需解密)。导入后由网关自动续期,无需跟随客户端的 2 小时时效手动换令牌。": "讀本機客戶端當前登入的 OAuth 權杖(明文 JSON,無需解密)。匯入後由閘道器自動續期,無需跟隨客戶端的 2 小時時效手動換權杖。", "读本机客户端当前的登录态。客户端的 Cookies 是 DPAPI 加密的(Chromium os_crypt),因此仅 Windows 可用;客户端正在运行时可能读不到该文件,先退出客户端再试即可(也可改用「填写凭证」粘贴令牌)。": "讀本機客戶端當前的登入態。客戶端的 Cookies 是 DPAPI 加密的(Chromium os_crypt),因此僅 Windows 可用;客戶端正在執行時可能讀不到該檔案,先退出客戶端再試即可(也可改用「填寫憑證」貼上權杖)。", "账号信息": "帳號資訊", "账号信息不完整,请刷新后重试": "帳號資訊不完整,請重新整理後重試", "账号已添加,但请留意:{warning}": "帳號已新增,但請留意:{warning}", "账号版本": "帳號版本", "账号类型": "帳號型別", "账号:{name}
": "帳號:{name}
", "走 Inference Providers 路由,Key 在 hf.co/settings/tokens 创建": "走 Inference Providers 路由,Key 在 hf.co/settings/tokens 建立", "还没有账号": "還沒有帳號", "这一家当前不支持网页登录,请改用填写凭证": "這一家當前不支援網頁登入,請改用填寫憑證", "这个账号当前没有可自动领的活动(只自动领每日登录赠送积分)": "這個帳號當前沒有可自動領的活動(只自動領每日登入贈送積分)", "这份额度走「活动套餐」通道:若转发时提示编码套餐已到期,": "這份額度走「活動套餐」通道:若轉發時提示編碼套餐已到期,", "这里填国内站(modelscope.cn)的账号:请粘贴国内站的令牌。国际站(modelscope.ai)是另一家 provider、另一套账号,两边的令牌不通用。": "這裡填國內站(modelscope.cn)的帳號:請貼上國內站的權杖。國際站(modelscope.ai)是另一家 provider、另一套帳號,兩邊的權杖不通用。", "这里填国内站(monkeycode-ai.com)的账号:请粘贴国内站的 session。国际站(monkeycode-ai.net)是另一家 provider、另一套账号,两边的凭证不通用。": "這裡填國內站(monkeycode-ai.com)的帳號:請貼上國內站的 session。國際站(monkeycode-ai.net)是另一家 provider、另一套帳號,兩邊的憑證不通用。", "这里填国际站(modelscope.ai)的账号:请粘贴国际站的令牌。国内站(modelscope.cn)是另一家 provider、另一套账号,两边的令牌不通用。": "這裡填國際站(modelscope.ai)的帳號:請貼上國際站的權杖。國內站(modelscope.cn)是另一家 provider、另一套帳號,兩邊的權杖不通用。", "这里填国际站(monkeycode-ai.net)的账号:请粘贴国际站的 session。国内站(monkeycode-ai.com)是另一家 provider、另一套账号,两边的凭证不通用。": "這裡填國際站(monkeycode-ai.net)的帳號:請貼上國際站的 session。國內站(monkeycode-ai.com)是另一家 provider、另一套帳號,兩邊的憑證不通用。", "选择 CatPaw 客户端的登录态文件 auth.json(Windows:C:\\Users\\<你的用户名>\\.meituan-catpaw\\auth.json;macOS / Linux:~/.meituan-catpaw/auth.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端。": "選擇 CatPaw 客戶端的登入態檔案 auth.json(Windows:C:\\Users\\<你的使用者名稱>\\.meituan-catpaw\\auth.json;macOS / Linux:~/.meituan-catpaw/auth.json)。匯入後憑證直接落在閘道器、可獨立轉發,不再依賴本機客戶端。", "选择 Cline 客户端的登录态文件 providers.json(Windows:C:\\Users\\<你的用户名>\\.cline\\data\\settings\\providers.json;macOS / Linux:~/.cline/data/settings/providers.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端;这一条归入 {label}。": "選擇 Cline 客戶端的登入態檔案 providers.json(Windows:C:\\Users\\<你的使用者名稱>\\.cline\\data\\settings\\providers.json;macOS / Linux:~/.cline/data/settings/providers.json)。匯入後憑證直接落在閘道器、可獨立轉發,不再依賴本機客戶端;這一條歸入 {label}。", "选择 KukuAI 客户端的 Cookies 文件(%APPDATA%\\baidugenflowpro\\Network\\Cookies):它是**二进制** SQLite 数据库(无扩展名,不是 JSON)。导入时读的是你选中文件的副本、不和运行中的客户端抢占用,因此**无需先关闭客户端**。导入后凭证直接落在网关、可独立转发。": "選擇 KukuAI 客戶端的 Cookies 檔案(%APPDATA%\\baidugenflowpro\\Network\\Cookies):它是**二進位制** SQLite 資料庫(無副檔名,不是 JSON)。匯入時讀的是你選中檔案的副本、不和執行中的客戶端搶佔用,因此**無需先關閉客戶端**。匯入後憑證直接落在閘道器、可獨立轉發。", "选择凭证文件导入": "選擇憑證檔案匯入", "选择官方客户端的登录态凭证文件(workbuddy-desktop.info / workbuddy-desktop-ai.info)或 wb2api 导出的账号 JSON(嵌套 / 扁平形均可)。": "選擇官方客戶端的登入態憑證檔案(workbuddy-desktop.info / workbuddy-desktop-ai.info)或 wb2api 匯出的帳號 JSON(巢狀 / 扁平形均可)。", "选择小浣熊客户端的登录态文件 auth.json(Windows:C:\\Users\\<你的用户名>\\.box-agent\\config\\auth.json;macOS / Linux:~/.box-agent/config/auth.json)。导入后凭证直接落在网关、可独立转发,不再依赖本机客户端。": "選擇小浣熊客戶端的登入態檔案 auth.json(Windows:C:\\Users\\<你的使用者名稱>\\.box-agent\\config\\auth.json;macOS / Linux:~/.box-agent/config/auth.json)。匯入後憑證直接落在閘道器、可獨立轉發,不再依賴本機客戶端。", "选择提供商": "選擇提供商", "选择的文件不是合法 JSON": "選擇的檔案不是合法 JSON", "选择要添加账号的提供商": "選擇要新增帳號的提供商", "重新扫描": "重新掃描", "鉴权": "鑑權", "阿里云 Token Plan 套餐(国际站)": "阿里雲 Token Plan 套餐(國際站)", "阿里云百炼 Coding 套餐(国内站)": "阿里雲百鍊 Coding 套餐(國內站)", "阿里云百炼 Coding 套餐(国际站)": "阿里雲百鍊 Coding 套餐(國際站)", "阿里云百炼模型服务(国际站,OpenAI 兼容模式)": "阿里雲百鍊模型服務(國際站,OpenAI 相容模式)", "需要图形验证码:登录窗口已弹出,请填写后继续": "需要圖形驗證碼:登入視窗已彈出,請填寫後繼續", "预置 API": "預置 API", "领取 CodeArts 每日福利": "領取 CodeArts 每日福利", "领取失败:{message}": "領取失敗:{message}", "领取并让官方确认": "領取並讓官方確認", "风控验证配置不完整,请稍后重试": "風控驗證配置不完整,請稍後重試", "验证码": "驗證碼", "验证码已发送。收到后填入下方并点「登录并添加」": "驗證碼已傳送。收到後填入下方並點「登入並新增」", "验证码已发送,请查看手机短信": "驗證碼已傳送,請檢視手機簡訊", "验证码已发送,请查看手机短信。填入下方并点「登录并添加」即完成登录": "驗證碼已傳送,請檢視手機簡訊。填入下方並點「登入並新增」即完成登入", "验证码已发送,请查看短信": "驗證碼已傳送,請檢視簡訊", "验证码校验失败,请重试": "驗證碼校驗失敗,請重試", "验证码校验超时,请重试": "驗證碼校驗超時,請重試", "验证码组件不可用,请重试": "驗證碼元件不可用,請重試", "验证码组件初始化超时,请重试": "驗證碼元件初始化超時,請重試", "验证码组件加载失败,请检查网络后重试": "驗證碼元件載入失敗,請檢查網路後重試", "验证码组件加载异常,请重试": "驗證碼元件載入異常,請重試", "验证码组件加载超时,请检查网络后重试": "驗證碼元件載入超時,請檢查網路後重試", "验证码组件未加载,请重启应用后重试": "驗證碼元件未載入,請重啟應用後重試", "(免费额度池,模型名带 cline-free/ 前缀)。": "(免費額度池,模型名帶 cline-free/ 字首)。", "(其中 {n} 把恢复为不限制)": "(其中 {n} 把恢復為不限制)", "(必填)": "(必填)", "(有效期 {window})": "(有效期 {window})", "(订阅池,模型名带 cline-pass/ 前缀,需要账号有对应订阅)。": "(訂閱池,模型名帶 cline-pass/ 字首,需要帳號有對應訂閱)。", ",下一次最快 {minutes} 分钟后": ",下一次最快 {minutes} 分鐘後", ",并从 {n} 把 Key 的可用提供商里移除": ",並從 {n} 把 Key 的可用提供商裡移除" });
diff --git a/desktop-tauri/ui/i18n/zh-Hant/checkin.js b/desktop-tauri/ui/i18n/zh-Hant/checkin.js
index da5289f0..7318c0ab 100644
--- a/desktop-tauri/ui/i18n/zh-Hant/checkin.js
+++ b/desktop-tauri/ui/i18n/zh-Hant/checkin.js
@@ -1,2 +1,2 @@
/* Agent2API 词典构建产物:zh-Hant/checkin —— 由 desktop-tauri/i18n/build.mjs 生成,请勿手改;源头是 i18n-src/*.json */
-window.wbI18nDict = window.wbI18nDict || {}; Object.assign(window.wbI18nDict, { " · ": " · ", "SOLO 的 checkin_credits 领取 · 按自然日 0 点刷新": "SOLO 的 checkin_credits 領取 · 按自然日 0 點重新整理", "UMID 组件安装失败:{error}": "UMID 元件安裝失敗:{error}", "WorkBuddy 国内版 · 查询任务树后一键点亮 / 领奖 · 含开学季与猫猫旅行 · 点击行展开明细": "WorkBuddy 國內版 · 查詢任務樹後一鍵點亮/領獎 · 含開學季與貓貓旅行 · 點擊行展開明細", "WorkBuddy 国际版保活模型,按顺序回退": "WorkBuddy 國際版保活模型,按順序回退", "WorkBuddy 国际版日活任务的免费模型 · 全局一份,与条目无关": "WorkBuddy 國際版日活任務的免費模型 · 全域一份,與條目無關", "{date}(每天 {time})": "{date}(每天 {time})", "{label} ×{count}({reason})": "{label} ×{count}({reason})", "{n} 项可完成": "{n} 項可完成", "{n} 项待领": "{n} 項待領", "{total} 账号 · {done} 已签": "{total} 帳號 · {done} 已籤", "{total} 项任务 · {pending} 项可完成": "{total} 項任務 · {pending} 項可完成", "✅ UMID 组件已安装,下轮签到即可领取国际版积分": "✅ UMID 元件已安裝,下輪簽到即可領取國際版積分", "✅ {message}": "✅ {message}", "✅ 定时签到已开启": "✅ 定時簽到已開啟", "✅ 开学季任务执行完成": "✅ 開學季任務執行完成", "✅ 成长任务执行完成:积分 +{credit} 能量 +{energy}": "✅ 成長任務執行完成:積分 +{credit} 能量 +{energy}", "✅ 新手福利领取完成,累计 {n} 积分": "✅ 新手福利領取完成,累計 {n} 積分", "✅ 签到完成:{succeeded}/{total} 个账号成功领取{active}": "✅ 簽到完成:{succeeded}/{total} 個帳號成功領取{active}", "「保活模型链」是 WorkBuddy 国际版领日活时用来保活的免费模型,按顺序逐个尝试、 第一个成功即止;清空提交恢复缺省({defaults})。 当天去重 + 幂等领取:重复执行只会拿到「已领取」,不会重复加分。": "「保活模型鏈」是 WorkBuddy 國際版領日活時用來保活的免費模型,按順序逐個嘗試、 第一個成功即止;清空提交恢復預設({defaults})。 當天去重 + 冪等領取:重複執行只會拿到「已領取」,不會重複加分。", "「保活模型链」是 WorkBuddy 国际版领日活时用来保活的免费模型,按顺序逐个尝试、 第一个成功即止;清空清单并保存 = 恢复缺省链(当前缺省:{defaults})。 当天去重 + 幂等领取:重复执行只会拿到「已领取」,不会重复加分。": "「保活模型鏈」是 WorkBuddy 國際版領日活時用來保活的免費模型,按順序逐個嘗試、 第一個成功即止;清空清單並儲存 = 恢復預設鏈(當前預設:{defaults})。 當天去重 + 冪等領取:重複執行只會拿到「已領取」,不會重複加分。", "「免费领积分」的每日任务 · 逐个领取": "「免費領積分」的每日任務 · 逐個領取", "一次性福利 · 签到后自动查询并领取,领完记在本机不再查上游 · 点击行展开任务清单": "一次性福利 · 簽到後自動查詢並領取,領完記在本機不再查上游 · 點擊行展開任務清單", "一次领当天全部奖励(每日签到 + 新人礼) · 幂等由上游保证": "一次領當天全部獎勵(每日簽到 + 新人禮) · 冪等由上游保證", "一键安装组件": "一鍵安裝元件", "一键完成": "一鍵完成", "一键领取({n})": "一鍵領取({n})", "上次执行:{line}": "上次執行:{line}", "上次签到时间": "上次簽到時間", "上次领取 {time} · 领取需通过滑块验证码": "上次領取 {time} · 領取需通過滑塊驗證碼", "下次 {date}": "下次 {date}", "下次 {date} · 点此管理条目": "下次 {date} · 點此管理條目", "不参与每日签到:{list}。CodeArts 的一次性奖励在下方「新手福利」,它与 ZCode 的每日/套餐福利领取见「活动福利」。": "不參與每日簽到:{list}。CodeArts 的一次性獎勵在下方「新手福利」,它與 ZCode 的每日/套餐福利領取見「活動福利」。", "不参与每日签到:{list}。CodeArts 的一次性奖励在下方「新手福利」,它的每日福利就在上方「每日签到」里;ZCode 的套餐领取见「活动福利」。": "不參與每日簽到:{list}。CodeArts 的一次性獎勵在下方「新手福利」,它的每日福利就在上方「每日簽到」裡;ZCode 的套餐領取見「活動福利」。", "与国内版同一套任务接口 · 站点不同": "與國內版同一套任務介面 · 站點不同", "今天已领 {n} 份": "今天已領 {n} 份", "今天未领": "今天未領", "今天(北京时间 {day})已领取 · 官方确认到账 {n} 项 · 明天可再领": "今天(北京時間 {day})已領取 · 官方確認到賬 {n} 項 · 明天可再領", "今日已执行": "今日已執行", "今日已派出": "今日已派出", "今日已领取": "今日已領取", "今日签到": "今日簽到", "今日签到进度": "今日簽到進度", "从清单里移除": "從清單裡移除", "保活": "保活", "保活 {n}": "保活 {n}", "保活+领取": "保活+領取", "保活中…": "保活中…", "保活模型链": "保活模型鏈", "全选": "全選", "全部 {n} 家": "全部 {n} 家", "全部完成": "全部完成", "全部查询": "全部查詢", "全部结果": "全部結果", "全部账号均可签到": "全部帳號均可簽到", "全部领取": "全部領取", "关着:所有条目都不执行": "關著:所有條目都不執行", "删除失败:{error}": "刪除失敗:{error}", "删除定时条目": "刪除定時條目", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活并在网页通道建会话点亮日活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;CodeArts 领当日的运营福利(领取 → 确认 → 回读核实,自动执行受每天 6 次 / 间隔 10 分钟的写请求限流);OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "到點後自動簽到勾選提供商的可用帳號(WorkBuddy 國內版走每日簽到介面,國際版走每日活躍任務:探測活動、領日活獎勵、再用免費模型保活並在網頁通道建會話點亮日活;小浣熊走桌面版每日積分鏈路;AutoClaw 走官方客戶端的每日簽到任務;Qoder 中國版走活動領取,沒被下發活動的帳號會得到中性提示;Qoder 國際版要先帶裝置風控身份(本機 Qoder 客戶端 / qodercli 的 UMID 元件生成)才能看到「每日 100 Credits」活動,缺元件時會得到明確的說明而不是報錯;Trae 領 SOLO 的每日簽到積分(按自然日 0 點重置),上游沒對該帳號開活動、或憑據裡沒有裝置號時得到的是「未領取 + 具體原因」而不是報錯;Loomy 每天替帳號打一次首次登入積分;KukuAI 領「免費領積分」的每日任務;CodeArts 領當日的運營福利(領取 → 確認 → 回讀核實,自動執行受每天 6 次 / 間隔 10 分鐘的寫請求限流);OfficeAce 果辦一次領當天全部獎勵(每日簽到 + 新人禮))。錯過時點開機後會自動補籤,不會因為當時沒開機而漏掉。各家簽到介面都是冪等的,重複執行不會重複領取。", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;CodeArts 领当日的运营福利(领取 → 确认 → 回读核实,自动执行受每天 6 次 / 间隔 10 分钟的写请求限流);OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "到點後自動簽到勾選提供商的可用帳號(WorkBuddy 國內版走每日簽到介面,國際版走每日活躍任務:探測活動、領日活獎勵、再用免費模型保活;小浣熊走桌面版每日積分鏈路;AutoClaw 走官方客戶端的每日簽到任務;Qoder 中國版走活動領取,沒被下發活動的帳號會得到中性提示;Qoder 國際版要先帶裝置風控身份(本機 Qoder 客戶端 / qodercli 的 UMID 元件生成)才能看到「每日 100 Credits」活動,缺元件時會得到明確的說明而不是報錯;Trae 領 SOLO 的每日簽到積分(按自然日 0 點重置),上游沒對該帳號開活動、或憑據裡沒有裝置號時得到的是「未領取 + 具體原因」而不是報錯;Loomy 每天替帳號打一次首次登入積分;KukuAI 領「免費領積分」的每日任務;CodeArts 領當日的運營福利(領取 → 確認 → 回讀核實,自動執行受每天 6 次 / 間隔 10 分鐘的寫請求限流);OfficeAce 果辦一次領當天全部獎勵(每日簽到 + 新人禮))。錯過時點開機後會自動補籤,不會因為當時沒開機而漏掉。各家簽到介面都是冪等的,重複執行不會重複領取。", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "到點後自動簽到勾選提供商的可用帳號(WorkBuddy 國內版走每日簽到介面,國際版走每日活躍任務:探測活動、領日活獎勵、再用免費模型保活;小浣熊走桌面版每日積分鏈路;AutoClaw 走官方客戶端的每日簽到任務;Qoder 中國版走活動領取,沒被下發活動的帳號會得到中性提示;Qoder 國際版要先帶裝置風控身份(本機 Qoder 客戶端 / qodercli 的 UMID 元件生成)才能看到「每日 100 Credits」活動,缺元件時會得到明確的說明而不是報錯;Trae 領 SOLO 的每日簽到積分(按自然日 0 點重置),上游沒對該帳號開活動、或憑據裡沒有裝置號時得到的是「未領取 + 具體原因」而不是報錯;Loomy 每天替帳號打一次首次登入積分;KukuAI 領「免費領積分」的每日任務;OfficeAce 果辦一次領當天全部獎勵(每日簽到 + 新人禮))。錯過時點開機後會自動補籤,不會因為當時沒開機而漏掉。各家簽到介面都是冪等的,重複執行不會重複領取。", "到点时逐个签到,已勾 {n} / {total} 家": "到點時逐個簽到,已勾 {n} / {total} 家", "北京时间 · 错过时点开机后会自动补签": "北京時間 · 錯過時點開機後會自動補籤", "去领取": "去領取", "另有 {n} 个账号不参与每日签到": "另有 {n} 個帳號不參與每日簽到", "只领取已完成任务的奖励(幂等,重复点不会重复入账)": "只領取已完成任務的獎勵(冪等,重複點不會重複入帳)", "可完成": "可完成", "可派出": "可派出", "可选 · 缺省显示时刻": "可選 · 預設顯示時刻", "可领奖": "可領獎", "后端未返回定时签到数据": "後端未返回定時簽到資料", "后端未返回签到中心数据": "後端未返回簽到中心資料", "国际版签到需要 UMID 组件生成设备风控身份(本机未检测到)。": "國際版簽到需要 UMID 元件生成裝置風控身份(本機未檢測到)。", "在途": "在途", "填入缺省链": "填入預設鏈", "填好时刻与签到范围后点「保存」;名称可以留空(界面显示时刻)": "填好時刻與簽到範圍後點「儲存」;名稱可以留空(介面顯示時刻)", "失败 {n}": "失敗 {n}", "套餐明细": "套餐明細", "安装 Qoder 客户端或 qodercli 后即可(无需重启网关)。": "安裝 Qoder 客戶端或 qodercli 後即可(無需重啟閘道器)。", "安装中…": "安裝中…", "官方客户端的每日签到任务": "官方客戶端的每日簽到任務", "定时签到": "定時簽到", "定时签到已关闭": "定時簽到已關閉", "尚未查询": "尚未查詢", "尚未查询任务状态": "尚未查詢任務狀態", "巡检一次": "巡檢一次", "已保存:{label}": "已儲存:{label}", "已保存:保活模型链": "已儲存:保活模型鏈", "已保存:定时条目": "已儲存:定時條目", "已删除定时条目": "已刪除定時條目", "已完成活跃上报(连登已点亮),但活动未开启(本次没有可领的奖励)": "已完成活躍上報(連登已點亮),但活動未開啟(本次沒有可領的獎勵)", "已抽 {n} 次": "已抽 {n} 次", "已有结果 {checked} / 共 {total} 个账号": "已有結果 {checked} / 共 {total} 個帳號", "已签": "已籤", "已领 {claimed}/{total} · 累计 {earned} 积分": "已領 {claimed}/{total} · 累計 {earned} 積分", "已领养": "已領養", "已领取": "已領取", "带设备风控身份领取「每日 100 Credits」 · 需要 UMID 组件": "帶裝置風控身份領取「每日 100 Credits」 · 需要 UMID 元件", "开学季执行失败:{error}": "開學季執行失敗:{error}", "开学季执行完成:{message}": "開學季執行完成:{message}", "开学季活动": "開學季活動", "开着:启用的条目按各自时刻执行": "開著:啟用的條目按各自時刻執行", "待签": "待籤", "待领新手福利": "待領新手福利", "总开关": "總開關", "总开关已关闭 · 在「定时签到」页打开": "總開關已關閉 · 在「定時簽到」頁開啟", "成功 {n}": "成功 {n}", "成长任务": "成長任務", "成长任务完成({done} 项成功、{failed} 项失败),积分 +{credit} 能量 +{energy}": "成長任務完成({done} 項成功、{failed} 項失敗),積分 +{credit} 能量 +{energy}", "成长任务执行失败:{error}": "成長任務執行失敗:{error}", "执行失败:{error}": "執行失敗:{error}", "执行并抽奖": "執行並抽獎", "执行开学季任务并抽空抽奖机会(分享 / 对话 / 专家事件)": "執行開學季任務並抽空抽獎機會(分享/對話/專家事件)", "把缺省链填进清单,再点「保存」生效": "把預設鏈填進清單,再點「儲存」生效", "抽奖机会 {n} 次": "抽獎機會 {n} 次", "按住拖动调整顺序": "按住拖動調整順序", "按住拖动,调整这个模型在链里的顺序": "按住拖動,調整這個模型在鏈裡的順序", "按序逐个尝试,共 {n} 个": "按序逐個嘗試,共 {n} 個", "按结果筛选": "按結果篩選", "探测 + 领取 + 保活 · 与定时签到同一套组合": "探測 + 領取 + 保活 · 與定時簽到同一套組合", "探测活动并领取日活奖励 · 不做保活": "探測活動並領取日活獎勵 · 不做保活", "接单 + 点亮 + 领奖(只处理已实测沉淀的任务)": "接單+點亮+領獎(只處理已實測沉澱的任務)", "搜账号 / 收益 / 错误 / 触发原因": "搜帳號 / 收益 / 錯誤 / 觸發原因", "收起新建": "收起新建", "新建定时条目": "新建定時條目", "新手福利": "新手福利", "新手福利有 {n} 项领取失败,可重试": "新手福利有 {n} 項領取失敗,可重試", "无": "無", "无独立签到接口 · 每天替账号打一次首次登录积分": "無獨立簽到介面 · 每天替帳號打一次首次登入積分", "无账号": "無帳號", "暂不可领": "暫不可領", "暂不支持": "暫不支援", "暂无启用的条目 · 点此添加": "暫無啟用的條目 · 點此新增", "有未保存的改动": "有未儲存的改動", "未勾选提供商": "未勾選提供商", "未开启": "未開啟", "未解锁": "未解鎖", "未领养(领养需先完成当日对话量)": "未領養(領養需先完成當日對話量)", "未领取": "未領取", "本地台账里今天还没领过;活动期内每天发一份新套餐": "本地臺賬裡今天還沒領過;活動期內每天發一份新套餐", "本地台账里今天(北京时间)领过的套餐:{plans}": "本地臺賬裡今天(北京時間)領過的套餐:{plans}", "条启用": "條啟用", "查询于 {time}": "查詢於 {time}", "查询任务": "查詢任務", "查询任务树并一键点亮 / 领奖(含开学季与猫猫旅行)": "查詢任務樹並一鍵點亮/領獎(含開學季與貓貓旅行)", "查询失败:{error}": "查詢失敗:{error}", "桌面端每日积分链路": "桌面版每日積分鏈路", "正在读取定时签到数据…": "正在讀取定時簽到資料…", "正在读取签到数据…": "正在讀取簽到資料…", "每天 {time}": "每天 {time}", "每天 {time} · {scope}": "每天 {time} · {scope}", "每天时刻": "每天時刻", "每执行一次签到 · 每个账号一条明细 · 结果与收益以后端落账为准": "每執行一次簽到 · 每個帳號一條明細 · 結果與收益以後端落賬為準", "每日活跃任务 · 网页会话保活点亮日活,领取才加积分 · 两者可分开执行": "每日活躍任務 · 網頁會話保活點亮日活,領取才加積分 · 兩者可分開執行", "每日登录积分 · 顺带领取会员活动 · 访客账号无积分体系(跳过)": "每日登入積分 · 順帶領取會員活動 · 訪客帳號無積分體系(跳過)", "每日福利 · 领取 → 确认 → 回读核实 · 按北京时间自然日重置": "每日福利 · 領取 → 確認 → 回讀核實 · 按北京時間自然日重置", "每日签到": "每日簽到", "每条条目各有时刻与范围 · 各自当天去重 · 错过时点开机自动补签": "每條條目各有時刻與範圍 · 各自當天去重 · 錯過時點開機自動補籤", "每账号一条明细 · 点此查看「签到记录」": "每帳號一條明細 · 點此檢視「簽到記錄」", "没有可领套餐的账号(ZCode 未添加)。": "沒有可領套餐的帳號(ZCode 未新增)。", "没有可领福利的账号(CodeArts / ZCode 未添加)。": "沒有可領福利的帳號(CodeArts / ZCode 未新增)。", "没有支持成长任务的账号(需要 WorkBuddy 国内版)。": "沒有支援成長任務的帳號(需要 WorkBuddy 國內版)。", "没有支持新手福利的账号": "沒有支援新手福利的帳號", "没有支持新手福利的账号 —— 目前有 Loomy、小浣熊、CodeArts 三家。": "沒有支援新手福利的帳號 —— 目前有 Loomy、小浣熊、CodeArts 三家。", "没有符合筛选条件的签到记录": "沒有符合篩選條件的簽到記錄", "没有需要执行的任务": "沒有需要執行的任務", "活动福利": "活動福利", "活动(campaign)领取 · 每天 10:00 刷新": "活動(campaign)領取 · 每天 10:00 重新整理", "活跃上报与保活均未成功,且活动未开启": "活躍上報與保活均未成功,且活動未開啟", "活跃上报完成,但保活未成功且活动未开启": "活躍上報完成,但保活未成功且活動未開啟", "活跃上报完成,但活动未开启": "活躍上報完成,但活動未開啟", "活跃上报成功": "活躍上報成功", "活跃保活失败": "活躍保活失敗", "活跃保活完成": "活躍保活完成", "活跃保活完成,但活动未开启": "活躍保活完成,但活動未開啟", "活跃保活完成,但活跃上报失败且活动未开启": "活躍保活完成,但活躍上報失敗且活動未開啟", "添加条目": "新增條目", "添加模型": "新增模型", "清单为空 —— 保存后恢复缺省链": "清單為空 —— 儲存後恢復預設鏈", "清单里已经有「{name}」": "清單裡已經有「{name}」", "清空失败:{error}": "清空失敗:{error}", "清空签到记录": "清空簽到記錄", "点「套餐明细」看领到了哪几份、什么时候生效;活动期内每天可再领": "點「套餐明細」看領到了哪幾份、什麼時候生效;活動期內每天可再領", "点击行展开账号明细 · 单账号签到不受范围限制": "點擊行展開帳號明細 · 單帳號簽到不受範圍限制", "独立链路 · 只提供手动入口 · 不进自动签到": "獨立鏈路 · 只提供手動入口 · 不進自動簽到", "猫猫旅行": "貓貓旅行", "猫猫旅行失败:{error}": "貓貓旅行失敗:{error}", "猫猫旅行失败:{message}": "貓貓旅行失敗:{message}", "猫猫旅行:{message}": "貓貓旅行:{message}", "用免费模型与网页会话维持账号活跃 · 不领取奖励": "用免費模型與網頁會話維持帳號活躍 · 不領取獎勵", "确定删除「{name}」?删除后到点不再执行。": "確定刪除「{name}」?刪除後到點不再執行。", "确定清空全部签到记录?清空后无法恢复。": "確定清空全部簽到記錄?清空後無法恢復。", "确定清空当前筛选出的签到记录?清空后无法恢复。": "確定清空當前篩選出的簽到記錄?清空後無法恢復。", "移除 {name}": "移除 {name}", "立即全部签到": "立即全部簽到", "签到": "簽到", "签到中…": "簽到中…", "签到中心分区": "簽到中心分割槽", "签到失败:{error}": "簽到失敗:{error}", "签到完成:{succeeded}/{total} 成功{active},{failed} 个失败": "簽到完成:{succeeded}/{total} 成功{active},{failed} 個失敗", "签到成功": "簽到成功", "签到提供商": "簽到提供商", "签到范围": "簽到範圍", "签到触发时刻": "簽到觸發時刻", "签到记录": "簽到記錄", "签到记录时间范围": "簽到記錄時間範圍", "签到记录表": "簽到記錄表", "累计签到记录": "累計簽到記錄", "结算于 {time}": "結算於 {time}", "能量 {n}": "能量 {n}", "腾讯每日签到接口 · 仅国内版": "騰訊每日簽到介面 · 僅國內版", "至少勾一家才能保存(不勾等于这条条目不签到)": "至少勾一家才能儲存(不勾等於這條條目不簽到)", "读取定时签到数据失败:{error}": "讀取定時簽到資料失敗:{error}", "读取签到数据失败:{error}": "讀取簽到資料失敗:{error}", "读取签到记录失败:{error}": "讀取簽到記錄失敗:{error}", "跳过 {n}": "跳過 {n}", "运营活动交付(领取 → 确认 → 回读核实)· 领的是套餐赠送积分": "運營活動交付(領取 → 確認 → 回讀核實)· 領的是套餐贈送積分", "还没执行过": "還沒執行過", "还没有定时条目 —— 点「添加条目」建一条,或到「签到中心」手动签到。": "還沒有定時條目 —— 點「新增條目」建一條,或到「簽到中心」手動簽到。", "还没有签到记录 —— 手动签到或等定时条目执行后,明细会出现在这里。": "還沒有簽到記錄 —— 手動簽到或等定時條目執行後,明細會出現在這裡。", "连登 {n} 天": "連登 {n} 天", "部分": "部分", "重签": "重籤", "重试": "重試", "限时体验套餐 · 领取需滑块验证码 · 逐份查看与领取": "限時體驗套餐 · 領取需滑塊驗證碼 · 逐份檢視與領取", "限时体验套餐(start-plan),活动期内每天一份 · 领取需滑块验证码": "限時體驗套餐(start-plan),活動期內每天一份 · 領取需滑塊驗證碼", "需真实操作": "需真實操作", "非活动期": "非活動期", "项": "項", "领取": "領取", "领取中": "領取中", "领取中…": "領取中…", "领取失败": "領取失敗", "领取失败:{error}": "領取失敗:{error}", "(共 {n} 个账号)": "(共 {n} 個帳號)", "(能量 / 连登读数本次未取到)": "(能量/連登讀數本次未取到)", ",日活保活 {n} 个": ",日活保活 {n} 個" });
+window.wbI18nDict = window.wbI18nDict || {}; Object.assign(window.wbI18nDict, { " · ": " · ", "SOLO 的 checkin_credits 领取 · 按自然日 0 点刷新": "SOLO 的 checkin_credits 領取 · 按自然日 0 點重新整理", "UMID 组件安装失败:{error}": "UMID 元件安裝失敗:{error}", "WorkBuddy 国内版 · 查询任务树后一键点亮 / 领奖 · 含开学季与猫猫旅行 · 点击行展开明细": "WorkBuddy 國內版 · 查詢任務樹後一鍵點亮/領獎 · 含開學季與貓貓旅行 · 點擊行展開明細", "WorkBuddy 国际版保活模型,按顺序回退": "WorkBuddy 國際版保活模型,按順序回退", "WorkBuddy 国际版日活任务的免费模型 · 全局一份,与条目无关": "WorkBuddy 國際版日活任務的免費模型 · 全域一份,與條目無關", "{date}(每天 {time})": "{date}(每天 {time})", "{label} ×{count}({reason})": "{label} ×{count}({reason})", "{n} 项可完成": "{n} 項可完成", "{n} 项待领": "{n} 項待領", "{total} 账号 · {done} 已签": "{total} 帳號 · {done} 已籤", "{total} 项任务 · {pending} 项可完成": "{total} 項任務 · {pending} 項可完成", "✅ UMID 组件已安装,下轮签到即可领取国际版积分": "✅ UMID 元件已安裝,下輪簽到即可領取國際版積分", "✅ {message}": "✅ {message}", "✅ 定时签到已开启": "✅ 定時簽到已開啟", "✅ 开学季任务执行完成": "✅ 開學季任務執行完成", "✅ 成长任务执行完成:积分 +{credit} 能量 +{energy}": "✅ 成長任務執行完成:積分 +{credit} 能量 +{energy}", "✅ 新手福利领取完成,累计 {n} 积分": "✅ 新手福利領取完成,累計 {n} 積分", "✅ 签到完成:{succeeded}/{total} 个账号成功领取{active}": "✅ 簽到完成:{succeeded}/{total} 個帳號成功領取{active}", "「保活模型链」是 WorkBuddy 国际版领日活时用来保活的免费模型,按顺序逐个尝试、 第一个成功即止;清空提交恢复缺省({defaults})。 当天去重 + 幂等领取:重复执行只会拿到「已领取」,不会重复加分。": "「保活模型鏈」是 WorkBuddy 國際版領日活時用來保活的免費模型,按順序逐個嘗試、 第一個成功即止;清空提交恢復預設({defaults})。 當天去重 + 冪等領取:重複執行只會拿到「已領取」,不會重複加分。", "「保活模型链」是 WorkBuddy 国际版领日活时用来保活的免费模型,按顺序逐个尝试、 第一个成功即止;清空清单并保存 = 恢复缺省链(当前缺省:{defaults})。 当天去重 + 幂等领取:重复执行只会拿到「已领取」,不会重复加分。": "「保活模型鏈」是 WorkBuddy 國際版領日活時用來保活的免費模型,按順序逐個嘗試、 第一個成功即止;清空清單並儲存 = 恢復預設鏈(當前預設:{defaults})。 當天去重 + 冪等領取:重複執行只會拿到「已領取」,不會重複加分。", "「免费领积分」的每日任务 · 逐个领取": "「免費領積分」的每日任務 · 逐個領取", "一次性福利 · 签到后自动查询并领取,领完记在本机不再查上游 · 点击行展开任务清单": "一次性福利 · 簽到後自動查詢並領取,領完記在本機不再查上游 · 點擊行展開任務清單", "一次领当天全部奖励(每日签到 + 新人礼) · 幂等由上游保证": "一次領當天全部獎勵(每日簽到 + 新人禮) · 冪等由上游保證", "一键安装组件": "一鍵安裝元件", "一键完成": "一鍵完成", "一键领取({n})": "一鍵領取({n})", "上次执行:{line}": "上次執行:{line}", "上次签到时间": "上次簽到時間", "上次领取 {time} · 领取需通过滑块验证码": "上次領取 {time} · 領取需通過滑塊驗證碼", "下次 {date}": "下次 {date}", "下次 {date} · 点此管理条目": "下次 {date} · 點此管理條目", "不参与每日签到:{list}。CodeArts 的一次性奖励在下方「新手福利」,它与 ZCode 的每日/套餐福利领取见「活动福利」。": "不參與每日簽到:{list}。CodeArts 的一次性獎勵在下方「新手福利」,它與 ZCode 的每日/套餐福利領取見「活動福利」。", "不参与每日签到:{list}。CodeArts 的一次性奖励在下方「新手福利」,它的每日福利就在上方「每日签到」里;ZCode 的套餐领取见「活动福利」。": "不參與每日簽到:{list}。CodeArts 的一次性獎勵在下方「新手福利」,它的每日福利就在上方「每日簽到」裡;ZCode 的套餐領取見「活動福利」。", "与国内版同一套任务接口 · 站点不同": "與國內版同一套任務介面 · 站點不同", "与国内版同一套链路 · 站点不同、令牌不通用": "與國內版同一套鏈路 · 站點不同、權杖不通用", "今天已领 {n} 份": "今天已領 {n} 份", "今天未领": "今天未領", "今天(北京时间 {day})已领取 · 官方确认到账 {n} 项 · 明天可再领": "今天(北京時間 {day})已領取 · 官方確認到賬 {n} 項 · 明天可再領", "今日已执行": "今日已執行", "今日已派出": "今日已派出", "今日已领取": "今日已領取", "今日签到": "今日簽到", "今日签到进度": "今日簽到進度", "从清单里移除": "從清單裡移除", "保活": "保活", "保活 {n}": "保活 {n}", "保活+领取": "保活+領取", "保活中…": "保活中…", "保活模型链": "保活模型鏈", "全选": "全選", "全部 {n} 家": "全部 {n} 家", "全部完成": "全部完成", "全部查询": "全部查詢", "全部结果": "全部結果", "全部账号均可签到": "全部帳號均可簽到", "全部领取": "全部領取", "关着:开机后等到窗口起点再签,随机窗口当天生效": "關著:開機後等到視窗起點再籤,隨機視窗當天生效", "关着:所有条目都不执行": "關著:所有條目都不執行", "分钟 · 窗口内逐个账号随机执行,0 = 到点立即执行": "分鐘 · 視窗內逐個帳號隨機執行,0 = 到點立即執行", "删除失败:{error}": "刪除失敗:{error}", "删除定时条目": "刪除定時條目", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活并在网页通道建会话点亮日活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;CodeArts 领当日的运营福利(领取 → 确认 → 回读核实,自动执行受每天 6 次 / 间隔 10 分钟的写请求限流);OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。设了「随机前后 N 分钟」时,本轮账号在各自窗口内分散执行(窗口夹在当天 0 点到 23:59 之间),不再全部挤在同一分钟;窗口已过则立即全部执行。错过时点开机后会自动补签,不会因为当时没开机而漏掉(可在「启动补签」关掉,改为等到窗口起点)。各家签到接口都是幂等的,重复执行不会重复领取。": "到點後自動簽到勾選提供商的可用帳號(WorkBuddy 國內版走每日簽到介面,國際版走每日活躍任務:探測活動、領日活獎勵、再用免費模型保活並在網頁通道建會話點亮日活;小浣熊走桌面版每日積分鏈路;AutoClaw 走官方客戶端的每日簽到任務;Qoder 中國版走活動領取,沒被下發活動的帳號會得到中性提示;Qoder 國際版要先帶裝置風控身份(本機 Qoder 客戶端 / qodercli 的 UMID 元件生成)才能看到「每日 100 Credits」活動,缺元件時會得到明確的說明而不是報錯;Trae 領 SOLO 的每日簽到積分(按自然日 0 點重置),上游沒對該帳號開活動、或憑據裡沒有裝置號時得到的是「未領取 + 具體原因」而不是報錯;Loomy 每天替帳號打一次首次登入積分;KukuAI 領「免費領積分」的每日任務;CodeArts 領當日的運營福利(領取 → 確認 → 回讀核實,自動執行受每天 6 次 / 間隔 10 分鐘的寫請求限流);OfficeAce 果辦一次領當天全部獎勵(每日簽到 + 新人禮))。設了「隨機前後 N 分鐘」時,本輪帳號在各自視窗內分散執行(視窗夾在當天 0 點到 23:59 之間),不再全部擠在同一分鐘;視窗已過則立即全部執行。錯過時點開機後會自動補籤,不會因為當時沒開機而漏掉(可在「啟動補籤」關掉,改為等到視窗起點)。各家簽到介面都是冪等的,重複執行不會重複領取。", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;CodeArts 领当日的运营福利(领取 → 确认 → 回读核实,自动执行受每天 6 次 / 间隔 10 分钟的写请求限流);OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "到點後自動簽到勾選提供商的可用帳號(WorkBuddy 國內版走每日簽到介面,國際版走每日活躍任務:探測活動、領日活獎勵、再用免費模型保活;小浣熊走桌面版每日積分鏈路;AutoClaw 走官方客戶端的每日簽到任務;Qoder 中國版走活動領取,沒被下發活動的帳號會得到中性提示;Qoder 國際版要先帶裝置風控身份(本機 Qoder 客戶端 / qodercli 的 UMID 元件生成)才能看到「每日 100 Credits」活動,缺元件時會得到明確的說明而不是報錯;Trae 領 SOLO 的每日簽到積分(按自然日 0 點重置),上游沒對該帳號開活動、或憑據裡沒有裝置號時得到的是「未領取 + 具體原因」而不是報錯;Loomy 每天替帳號打一次首次登入積分;KukuAI 領「免費領積分」的每日任務;CodeArts 領當日的運營福利(領取 → 確認 → 回讀核實,自動執行受每天 6 次 / 間隔 10 分鐘的寫請求限流);OfficeAce 果辦一次領當天全部獎勵(每日簽到 + 新人禮))。錯過時點開機後會自動補籤,不會因為當時沒開機而漏掉。各家簽到介面都是冪等的,重複執行不會重複領取。", "到点后自动签到勾选提供商的可用账号(WorkBuddy 国内版走每日签到接口,国际版走每日活跃任务:探测活动、领日活奖励、再用免费模型保活;小浣熊走桌面端每日积分链路;AutoClaw 走官方客户端的每日签到任务;Qoder 中国版走活动领取,没被下发活动的账号会得到中性提示;Qoder 国际版要先带设备风控身份(本机 Qoder 客户端 / qodercli 的 UMID 组件生成)才能看到「每日 100 Credits」活动,缺组件时会得到明确的说明而不是报错;Trae 领 SOLO 的每日签到积分(按自然日 0 点重置),上游没对该账号开活动、或凭据里没有设备号时得到的是「未领取 + 具体原因」而不是报错;Loomy 每天替账号打一次首次登录积分;KukuAI 领「免费领积分」的每日任务;OfficeAce 果办一次领当天全部奖励(每日签到 + 新人礼))。错过时点开机后会自动补签,不会因为当时没开机而漏掉。各家签到接口都是幂等的,重复执行不会重复领取。": "到點後自動簽到勾選提供商的可用帳號(WorkBuddy 國內版走每日簽到介面,國際版走每日活躍任務:探測活動、領日活獎勵、再用免費模型保活;小浣熊走桌面版每日積分鏈路;AutoClaw 走官方客戶端的每日簽到任務;Qoder 中國版走活動領取,沒被下發活動的帳號會得到中性提示;Qoder 國際版要先帶裝置風控身份(本機 Qoder 客戶端 / qodercli 的 UMID 元件生成)才能看到「每日 100 Credits」活動,缺元件時會得到明確的說明而不是報錯;Trae 領 SOLO 的每日簽到積分(按自然日 0 點重置),上游沒對該帳號開活動、或憑據裡沒有裝置號時得到的是「未領取 + 具體原因」而不是報錯;Loomy 每天替帳號打一次首次登入積分;KukuAI 領「免費領積分」的每日任務;OfficeAce 果辦一次領當天全部獎勵(每日簽到 + 新人禮))。錯過時點開機後會自動補籤,不會因為當時沒開機而漏掉。各家簽到介面都是冪等的,重複執行不會重複領取。", "到点时逐个签到,已勾 {n} / {total} 家": "到點時逐個簽到,已勾 {n} / {total} 家", "北京时间 · 错过时点开机后会自动补签": "北京時間 · 錯過時點開機後會自動補籤", "去领取": "去領取", "另有 {n} 个账号不参与每日签到": "另有 {n} 個帳號不參與每日簽到", "只领取已完成任务的奖励(幂等,重复点不会重复入账)": "只領取已完成任務的獎勵(冪等,重複點不會重複入帳)", "可完成": "可完成", "可派出": "可派出", "可选 · 缺省显示时刻": "可選 · 預設顯示時刻", "可领奖": "可領獎", "后端未返回定时签到数据": "後端未返回定時簽到資料", "后端未返回签到中心数据": "後端未返回簽到中心資料", "启动补签": "啟動補籤", "启动补签已关闭": "啟動補籤已關閉", "启动补签已开启": "啟動補籤已開啟", "国际版签到需要 UMID 组件生成设备风控身份(本机未检测到)。": "國際版簽到需要 UMID 元件生成裝置風控身份(本機未檢測到)。", "在途": "在途", "填入缺省链": "填入預設鏈", "填好时刻与签到范围后点「保存」;名称可以留空(界面显示时刻)": "填好時刻與簽到範圍後點「儲存」;名稱可以留空(介面顯示時刻)", "失败 {n}": "失敗 {n}", "套餐明细": "套餐明細", "安装 Qoder 客户端或 qodercli 后即可(无需重启网关)。": "安裝 Qoder 客戶端或 qodercli 後即可(無需重啟閘道器)。", "安装中…": "安裝中…", "官方客户端的每日签到任务": "官方客戶端的每日簽到任務", "定时签到": "定時簽到", "定时签到已关闭": "定時簽到已關閉", "尚未查询": "尚未查詢", "尚未查询任务状态": "尚未查詢任務狀態", "巡检一次": "巡檢一次", "已保存:{label}": "已儲存:{label}", "已保存:保活模型链": "已儲存:保活模型鏈", "已保存:定时条目": "已儲存:定時條目", "已删除定时条目": "已刪除定時條目", "已完成活跃上报(连登已点亮),但活动未开启(本次没有可领的奖励)": "已完成活躍上報(連登已點亮),但活動未開啟(本次沒有可領的獎勵)", "已抽 {n} 次": "已抽 {n} 次", "已有结果 {checked} / 共 {total} 个账号": "已有結果 {checked} / 共 {total} 個帳號", "已签": "已籤", "已领 {claimed}/{total} · 累计 {earned} 积分": "已領 {claimed}/{total} · 累計 {earned} 積分", "已领养": "已領養", "已领取": "已領取", "带设备风控身份领取「每日 100 Credits」 · 需要 UMID 组件": "帶裝置風控身份領取「每日 100 Credits」 · 需要 UMID 元件", "开学季执行失败:{error}": "開學季執行失敗:{error}", "开学季执行完成:{message}": "開學季執行完成:{message}", "开学季活动": "開學季活動", "开着:启用的条目按各自时刻执行": "開著:啟用的條目按各自時刻執行", "开着:开机后今天没签过的条目立刻补签,不看随机窗口": "開著:開機後今天沒簽過的條目立刻補籤,不看隨機視窗", "待签": "待籤", "待领新手福利": "待領新手福利", "总开关": "總開關", "总开关已关闭 · 在「定时签到」页打开": "總開關已關閉 · 在「定時簽到」頁開啟", "成功 {n}": "成功 {n}", "成长任务": "成長任務", "成长任务完成({done} 项成功、{failed} 项失败),积分 +{credit} 能量 +{energy}": "成長任務完成({done} 項成功、{failed} 項失敗),積分 +{credit} 能量 +{energy}", "成长任务执行失败:{error}": "成長任務執行失敗:{error}", "执行失败:{error}": "執行失敗:{error}", "执行并抽奖": "執行並抽獎", "执行开学季任务并抽空抽奖机会(分享 / 对话 / 专家事件)": "執行開學季任務並抽空抽獎機會(分享/對話/專家事件)", "把缺省链填进清单,再点「保存」生效": "把預設鏈填進清單,再點「儲存」生效", "抽奖机会 {n} 次": "抽獎機會 {n} 次", "按住拖动调整顺序": "按住拖動調整順序", "按住拖动,调整这个模型在链里的顺序": "按住拖動,調整這個模型在鏈裡的順序", "按序逐个尝试,共 {n} 个": "按序逐個嘗試,共 {n} 個", "按结果筛选": "按結果篩選", "探测 + 领取 + 保活 · 与定时签到同一套组合": "探測 + 領取 + 保活 · 與定時簽到同一套組合", "探测活动并领取日活奖励 · 不做保活": "探測活動並領取日活獎勵 · 不做保活", "接单 + 点亮 + 领奖(只处理已实测沉淀的任务)": "接單+點亮+領獎(只處理已實測沉澱的任務)", "搜账号 / 收益 / 错误 / 触发原因": "搜帳號 / 收益 / 錯誤 / 觸發原因", "收起新建": "收起新建", "新建定时条目": "新建定時條目", "新手福利": "新手福利", "新手福利有 {n} 项领取失败,可重试": "新手福利有 {n} 項領取失敗,可重試", "无": "無", "无独立签到接口 · 每天替账号打一次登录信息(即当日魔粒)": "無獨立簽到介面 · 每天替帳號打一次登入資訊(即當日魔粒)", "无独立签到接口 · 每天替账号打一次首次登录积分": "無獨立簽到介面 · 每天替帳號打一次首次登入積分", "无账号": "無帳號", "暂不可领": "暫不可領", "暂不支持": "暫不支援", "暂无启用的条目 · 点此添加": "暫無啟用的條目 · 點此新增", "有未保存的改动": "有未儲存的改動", "未勾选提供商": "未勾選提供商", "未开启": "未開啟", "未解锁": "未解鎖", "未领养(领养需先完成当日对话量)": "未領養(領養需先完成當日對話量)", "未领取": "未領取", "本地台账里今天还没领过;活动期内每天发一份新套餐": "本地臺賬裡今天還沒領過;活動期內每天發一份新套餐", "本地台账里今天(北京时间)领过的套餐:{plans}": "本地臺賬裡今天(北京時間)領過的套餐:{plans}", "条启用": "條啟用", "查询于 {time}": "查詢於 {time}", "查询任务": "查詢任務", "查询任务树并一键点亮 / 领奖(含开学季与猫猫旅行)": "查詢任務樹並一鍵點亮/領獎(含開學季與貓貓旅行)", "查询失败:{error}": "查詢失敗:{error}", "桌面端每日积分链路": "桌面版每日積分鏈路", "正在读取定时签到数据…": "正在讀取定時簽到資料…", "正在读取签到数据…": "正在讀取簽到資料…", "每天 {time}": "每天 {time}", "每天 {time} · {scope}": "每天 {time} · {scope}", "每天 {time} · 随机前后 {n} 分钟 · {scope}": "每天 {time} · 隨機前後 {n} 分鐘 · {scope}", "每天时刻": "每天時刻", "每执行一次签到 · 每个账号一条明细 · 结果与收益以后端落账为准": "每執行一次簽到 · 每個帳號一條明細 · 結果與收益以後端落賬為準", "每日活跃任务 · 网页会话保活点亮日活,领取才加积分 · 两者可分开执行": "每日活躍任務 · 網頁會話保活點亮日活,領取才加積分 · 兩者可分開執行", "每日登录积分 · 顺带领取会员活动 · 访客账号无积分体系(跳过)": "每日登入積分 · 順帶領取會員活動 · 訪客帳號無積分體系(跳過)", "每日福利 · 领取 → 确认 → 回读核实 · 按北京时间自然日重置": "每日福利 · 領取 → 確認 → 回讀核實 · 按北京時間自然日重置", "每日签到": "每日簽到", "每条条目各有时刻与范围 · 各自当天去重 · 错过时点开机自动补签": "每條條目各有時刻與範圍 · 各自當天去重 · 錯過時點開機自動補籤", "每账号一条明细 · 点此查看「签到记录」": "每帳號一條明細 · 點此檢視「簽到記錄」", "没有可领套餐的账号(ZCode 未添加)。": "沒有可領套餐的帳號(ZCode 未新增)。", "没有可领福利的账号(CodeArts / ZCode 未添加)。": "沒有可領福利的帳號(CodeArts / ZCode 未新增)。", "没有支持成长任务的账号(需要 WorkBuddy 国内版)。": "沒有支援成長任務的帳號(需要 WorkBuddy 國內版)。", "没有支持新手福利的账号": "沒有支援新手福利的帳號", "没有支持新手福利的账号 —— 目前有 Loomy、小浣熊、CodeArts 三家。": "沒有支援新手福利的帳號 —— 目前有 Loomy、小浣熊、CodeArts 三家。", "没有符合筛选条件的签到记录": "沒有符合篩選條件的簽到記錄", "没有需要执行的任务": "沒有需要執行的任務", "活动福利": "活動福利", "活动(campaign)领取 · 每天 10:00 刷新": "活動(campaign)領取 · 每天 10:00 重新整理", "活跃上报与保活均未成功,且活动未开启": "活躍上報與保活均未成功,且活動未開啟", "活跃上报完成,但保活未成功且活动未开启": "活躍上報完成,但保活未成功且活動未開啟", "活跃上报完成,但活动未开启": "活躍上報完成,但活動未開啟", "活跃上报成功": "活躍上報成功", "活跃保活失败": "活躍保活失敗", "活跃保活完成": "活躍保活完成", "活跃保活完成,但活动未开启": "活躍保活完成,但活動未開啟", "活跃保活完成,但活跃上报失败且活动未开启": "活躍保活完成,但活躍上報失敗且活動未開啟", "添加条目": "新增條目", "添加模型": "新增模型", "清单为空 —— 保存后恢复缺省链": "清單為空 —— 儲存後恢復預設鏈", "清单里已经有「{name}」": "清單裡已經有「{name}」", "清空失败:{error}": "清空失敗:{error}", "清空签到记录": "清空簽到記錄", "点「套餐明细」看领到了哪几份、什么时候生效;活动期内每天可再领": "點「套餐明細」看領到了哪幾份、什麼時候生效;活動期內每天可再領", "点击行展开账号明细 · 单账号签到不受范围限制": "點擊行展開帳號明細 · 單帳號簽到不受範圍限制", "独立链路 · 只提供手动入口 · 不进自动签到": "獨立鏈路 · 只提供手動入口 · 不進自動簽到", "猫猫旅行": "貓貓旅行", "猫猫旅行失败:{error}": "貓貓旅行失敗:{error}", "猫猫旅行失败:{message}": "貓貓旅行失敗:{message}", "猫猫旅行:{message}": "貓貓旅行:{message}", "用免费模型与网页会话维持账号活跃 · 不领取奖励": "用免費模型與網頁會話維持帳號活躍 · 不領取獎勵", "确定删除「{name}」?删除后到点不再执行。": "確定刪除「{name}」?刪除後到點不再執行。", "确定清空全部签到记录?清空后无法恢复。": "確定清空全部簽到記錄?清空後無法恢復。", "确定清空当前筛选出的签到记录?清空后无法恢复。": "確定清空當前篩選出的簽到記錄?清空後無法恢復。", "移除 {name}": "移除 {name}", "立即全部签到": "立即全部簽到", "签到": "簽到", "签到中…": "簽到中…", "签到中心分区": "簽到中心分割槽", "签到失败:{error}": "簽到失敗:{error}", "签到完成:{succeeded}/{total} 成功{active},{failed} 个失败": "簽到完成:{succeeded}/{total} 成功{active},{failed} 個失敗", "签到成功": "簽到成功", "签到提供商": "簽到提供商", "签到范围": "簽到範圍", "签到触发时刻": "簽到觸發時刻", "签到记录": "簽到記錄", "签到记录时间范围": "簽到記錄時間範圍", "签到记录表": "簽到記錄表", "累计签到记录": "累計簽到記錄", "结算于 {time}": "結算於 {time}", "能量 {n}": "能量 {n}", "腾讯每日签到接口 · 仅国内版": "騰訊每日簽到介面 · 僅國內版", "至少勾一家才能保存(不勾等于这条条目不签到)": "至少勾一家才能儲存(不勾等於這條條目不簽到)", "读取定时签到数据失败:{error}": "讀取定時簽到資料失敗:{error}", "读取签到数据失败:{error}": "讀取簽到資料失敗:{error}", "读取签到记录失败:{error}": "讀取簽到記錄失敗:{error}", "跳过 {n}": "跳過 {n}", "运营活动交付(领取 → 确认 → 回读核实)· 领的是套餐赠送积分": "運營活動交付(領取 → 確認 → 回讀核實)· 領的是套餐贈送積分", "还没执行过": "還沒執行過", "还没有定时条目 —— 点「添加条目」建一条,或到「签到中心」手动签到。": "還沒有定時條目 —— 點「新增條目」建一條,或到「簽到中心」手動簽到。", "还没有签到记录 —— 手动签到或等定时条目执行后,明细会出现在这里。": "還沒有簽到記錄 —— 手動簽到或等定時條目執行後,明細會出現在這裡。", "连登 {n} 天": "連登 {n} 天", "部分": "部分", "重签": "重籤", "重试": "重試", "限时体验套餐 · 领取需滑块验证码 · 逐份查看与领取": "限時體驗套餐 · 領取需滑塊驗證碼 · 逐份檢視與領取", "限时体验套餐(start-plan),活动期内每天一份 · 领取需滑块验证码": "限時體驗套餐(start-plan),活動期內每天一份 · 領取需滑塊驗證碼", "随机前后": "隨機前後", "需真实操作": "需真實操作", "非活动期": "非活動期", "项": "項", "领取": "領取", "领取中": "領取中", "领取中…": "領取中…", "领取失败": "領取失敗", "领取失败:{error}": "領取失敗:{error}", "(共 {n} 个账号)": "(共 {n} 個帳號)", "(能量 / 连登读数本次未取到)": "(能量/連登讀數本次未取到)", ",日活保活 {n} 个": ",日活保活 {n} 個" });
diff --git a/desktop-tauri/ui/islands/ui.js b/desktop-tauri/ui/islands/ui.js
index a19f297d..1eb026a3 100644
--- a/desktop-tauri/ui/islands/ui.js
+++ b/desktop-tauri/ui/islands/ui.js
@@ -1,29 +1,29 @@
-var lre=Object.defineProperty;var ore=(Si,xl,so)=>xl in Si?lre(Si,xl,{enumerable:!0,configurable:!0,writable:!0,value:so}):Si[xl]=so;var cn=(Si,xl,so)=>ore(Si,typeof xl!="symbol"?xl+"":xl,so);(function(){"use strict";function Si(e,t){for(var a=0;ao[c]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}function xl(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var so={exports:{}},Yd={};var gC;function Z5(){if(gC)return Yd;gC=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function a(o,c,d){var f=null;if(d!==void 0&&(f=""+d),c.key!==void 0&&(f=""+c.key),"key"in c){d={};for(var p in c)p!=="key"&&(d[p]=c[p])}else d=c;return c=d.ref,{$$typeof:e,type:o,key:f,ref:c!==void 0?c:null,props:d}}return Yd.Fragment=t,Yd.jsx=a,Yd.jsxs=a,Yd}var xC;function W5(){return xC||(xC=1,so.exports=Z5()),so.exports}var s=W5(),Cv={exports:{}},ct={};var bC;function J5(){if(bC)return ct;bC=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),c=Symbol.for("react.profiler"),d=Symbol.for("react.consumer"),f=Symbol.for("react.context"),p=Symbol.for("react.forward_ref"),h=Symbol.for("react.suspense"),b=Symbol.for("react.memo"),y=Symbol.for("react.lazy"),v=Symbol.for("react.activity"),j=Symbol.for("react.view_transition"),w=Symbol.iterator;function S(M){return M===null||typeof M!="object"?null:(M=w&&M[w]||M["@@iterator"],typeof M=="function"?M:null)}var N={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},k=Object.assign,A={};function P(M,U,Z){this.props=M,this.context=U,this.refs=A,this.updater=Z||N}P.prototype.isReactComponent={},P.prototype.setState=function(M,U){if(typeof M!="object"&&typeof M!="function"&&M!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,M,U,"setState")},P.prototype.forceUpdate=function(M){this.updater.enqueueForceUpdate(this,M,"forceUpdate")};function R(){}R.prototype=P.prototype;function C(M,U,Z){this.props=M,this.context=U,this.refs=A,this.updater=Z||N}var E=C.prototype=new R;E.constructor=C,k(E,P.prototype),E.isPureReactComponent=!0;var D=Array.isArray;function I(){}var O={H:null,A:null,T:null,S:null},_=Object.prototype.hasOwnProperty;function z(M,U,Z){var ae=Z.ref;return{$$typeof:e,type:M,key:U,ref:ae!==void 0?ae:null,props:Z}}function H(M,U){return z(M.type,U,M.props)}function B(M){return typeof M=="object"&&M!==null&&M.$$typeof===e}function L(M){var U={"=":"=0",":":"=2"};return"$"+M.replace(/[=:]/g,function(Z){return U[Z]})}var F=/\/+/g;function $(M,U){return typeof M=="object"&&M!==null&&M.key!=null?L(""+M.key):U.toString(36)}function X(M){switch(M.status){case"fulfilled":return M.value;case"rejected":throw M.reason;default:switch(typeof M.status=="string"?M.then(I,I):(M.status="pending",M.then(function(U){M.status==="pending"&&(M.status="fulfilled",M.value=U)},function(U){M.status==="pending"&&(M.status="rejected",M.reason=U)})),M.status){case"fulfilled":return M.value;case"rejected":throw M.reason}}throw M}function K(M,U,Z,ae,ce){var W=typeof M;(W==="undefined"||W==="boolean")&&(M=null);var ue=!1;if(M===null)ue=!0;else switch(W){case"bigint":case"string":case"number":ue=!0;break;case"object":switch(M.$$typeof){case e:case t:ue=!0;break;case y:return ue=M._init,K(ue(M._payload),U,Z,ae,ce)}}if(ue)return ce=ce(M),ue=ae===""?"."+$(M,0):ae,D(ce)?(Z="",ue!=null&&(Z=ue.replace(F,"$&/")+"/"),K(ce,U,Z,"",function(he){return he})):ce!=null&&(B(ce)&&(ce=H(ce,Z+(ce.key==null||M&&M.key===ce.key?"":(""+ce.key).replace(F,"$&/")+"/")+ue)),U.push(ce)),1;ue=0;var ve=ae===""?".":ae+":";if(D(M))for(var ee=0;ee"u"?!1:e instanceof ShadowRoot||e instanceof Cn(e).ShadowRoot}function Qd(e){const{overflow:t,overflowX:a,overflowY:o,display:c}=yr(e);return/auto|scroll|overlay|hidden|clip/.test(t+o+a)&&c!=="inline"&&c!=="contents"}function tz(e){return/^(table|td|th)$/.test(Fs(e))}function Hm(e){try{if(e.matches(":popover-open"))return!0}catch{}try{return e.matches(":modal")}catch{return!1}}const nz=/transform|translate|scale|rotate|perspective|filter/,sz=/paint|layout|strict|content/,Ni=e=>!!e&&e!=="none";let Ev;function Av(e){const t=Rt(e)?yr(e):e;return Ni(t.transform)||Ni(t.translate)||Ni(t.scale)||Ni(t.rotate)||Ni(t.perspective)||!Rv()&&(Ni(t.backdropFilter)||Ni(t.filter))||nz.test(t.willChange||"")||sz.test(t.contain||"")}function rz(e){let t=ao(e);for(;pn(t)&&!ro(t);){if(Av(t))return t;if(Hm(t))return null;t=ao(t)}return null}function Rv(){return Ev==null&&(Ev=typeof CSS<"u"&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),Ev}function ro(e){return/^(html|body|#document)$/.test(Fs(e))}function yr(e){return Cn(e).getComputedStyle(e)}function Um(e){return Rt(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function ao(e){if(Fs(e)==="html")return e;const t=e.assignedSlot||e.parentNode||Gc(e)&&e.host||bl(e);return Gc(t)?t.host:t}function yC(e){const t=ao(e);return ro(t)?(e.ownerDocument||e).body:pn(t)&&Qd(t)?t:yC(t)}function Kc(e,t,a){var o;t===void 0&&(t=[]),a===void 0&&(a=!0);const c=yC(e),d=c===((o=e.ownerDocument)==null?void 0:o.body),f=Cn(c);if(d){const p=Ov(f);return t.concat(f,f.visualViewport||[],Qd(c)?c:[],p&&a?Kc(p):[])}else return t.concat(c,Kc(c,[],a))}function Ov(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}const Mv={...ez},jC={};function Ps(e,t){const a=x.useRef(jC);return a.current===jC&&(a.current=e(t)),a}const Dv=Mv.useInsertionEffect,az=Dv&&Dv!==Mv.useLayoutEffect?Dv:e=>e();function Ie(e){const t=Ps(lz).current;return t.next=e,az(t.effect),t.trampoline}function lz(){const e={next:void 0,callback:oz,trampoline:(...t)=>e.callback?.(...t),effect:()=>{e.callback=e.next}};return e}function oz(){}const Me=typeof document<"u"?x.useLayoutEffect:()=>{};function Iv(e,t){if(e&&!t)return e;if(!e&&t)return t;if(e||t)return{...e,...t}}const Pv={};function ta(e,t,a,o,c){if(!a&&!o&&!c&&!e)return Vm(t);let d=Vm(e);return t&&(d=Zd(d,t)),a&&(d=Zd(d,a)),o&&(d=Zd(d,o)),c&&(d=Zd(d,c)),d}function iz(e){if(e.length===0)return Pv;if(e.length===1)return Vm(e[0]);let t=Vm(e[0]);for(let a=1;a=65&&c<=90&&(typeof t=="function"||typeof t>"u")}function _v(e){return typeof e=="function"}function SC(e,t){return _v(e)?e(t):e??Pv}function dz(e,t){return t?e?(...a)=>{const o=a[0];if(CC(o)){const d=o;Fm(d);const f=t(...a);return d.baseUIHandlerPrevented||e?.(...a),f}const c=t(...a);return e?.(...a),c}:NC(t):e}function NC(e){return e&&((...t)=>{const a=t[0];return CC(a)&&Fm(a),e(...t)})}function Fm(e){return e.preventBaseUIHandler=()=>{e.baseUIHandlerPrevented=!0},e}function kC(e,t){return t?e?t+" "+e:t:e}function CC(e){return e!=null&&typeof e=="object"&&"nativeEvent"in e}function fz(e,t){return function(o,...c){const d=new URL(e);return d.searchParams.set("code",o.toString()),c.forEach(f=>d.searchParams.append("args[]",f)),`${t} error #${o}; visit ${d} for the full message.`}}const un=fz("https://base-ui.com/production-error","Base UI"),TC=x.createContext(void 0);function EC(e=!1){const t=x.useContext(TC);if(t===void 0&&!e)throw new Error(un(16));return t}function pz(e){const{focusableWhenDisabled:t,disabled:a,composite:o=!1,tabIndex:c=0,isNativeButton:d}=e,f=o&&t!==!1,p=o&&t===!1;return{props:x.useMemo(()=>{const b={onKeyDown(y){a&&t&&y.key!=="Tab"&&y.preventDefault()}};return o||(b.tabIndex=c,!d&&a&&(b.tabIndex=t?c:-1)),(d&&(t||f)||!d&&a)&&(b["aria-disabled"]=a),d&&(!t||p)&&(b.disabled=a),b},[o,a,t,f,p,d,c])}}function Gt(e){return e?.ownerDocument||document}function Yc(e,t,{detail:a=0}={}){e.dispatchEvent(new(Cn(e)).PointerEvent("click",{bubbles:!0,cancelable:!0,composed:!0,detail:a,shiftKey:t.shiftKey,ctrlKey:t.ctrlKey,altKey:t.altKey,metaKey:t.metaKey}))}function na(e={}){const{disabled:t=!1,focusableWhenDisabled:a,tabIndex:o=0,native:c=!0,composite:d}=e,f=x.useRef(null),p=EC(!0),h=d??p!==void 0,{props:b}=pz({focusableWhenDisabled:a,disabled:t,composite:h,tabIndex:o,isNativeButton:c}),y=x.useCallback(()=>{const w=f.current;Lv(w)&&h&&t&&b.disabled===void 0&&w.disabled&&(w.disabled=!1)},[t,b.disabled,h]);Me(y,[y]);const v=x.useCallback((w={})=>{const{onClick:S,onMouseDown:N,onKeyUp:k,onKeyDown:A,onPointerDown:P,...R}=w;return ta({onClick(C){if(t){C.preventDefault();return}S?.(C)},onMouseDown(C){t||N?.(C)},onKeyDown(C){if(t||(Fm(C),A?.(C),C.baseUIHandlerPrevented))return;const E=C.target===C.currentTarget,D=C.currentTarget,I=Lv(D),O=!c&&mz(D),_=E&&(c?I:!O),z=C.key==="Enter",H=C.key===" ",B=D.getAttribute("role"),L=B?.startsWith("menuitem")||B==="option"||B==="gridcell";if(E&&h&&H){if(C.defaultPrevented&&L)return;C.preventDefault(),(!c||I)&&(C.preventBaseUIHandler(),Yc(D,C));return}if(!_||c||!H&&!z){E&&O&&H&&C.preventDefault();return}C.defaultPrevented||(C.preventDefault(),z&&(C.preventBaseUIHandler(),Yc(D,C)))},onKeyUp(C){if(!t){if(Fm(C),k?.(C),C.target===C.currentTarget&&c&&h&&Lv(C.currentTarget)&&C.key===" "){C.preventDefault();return}C.baseUIHandlerPrevented||C.target===C.currentTarget&&!c&&!h&&!C.defaultPrevented&&C.key===" "&&(C.preventBaseUIHandler(),Yc(C.currentTarget,C))}},onPointerDown(C){if(t){C.preventDefault();return}P?.(C)}},c?{type:"button"}:{role:"button"},b,R)},[t,b,h,c]),j=Ie(w=>{f.current=w,y()});return{getButtonProps:v,buttonRef:j}}function Lv(e){return pn(e)&&e.tagName==="BUTTON"}function mz(e){return pn(e)&&e.tagName==="A"&&!!e.href}function sa(e,t,a,o){const c=Ps(AC).current;return gz(c,e,t,a,o)&&RC(c,[e,t,a,o]),c.callback}function hz(e){const t=Ps(AC).current;return xz(t,e)&&RC(t,e),t.callback}function AC(){return{callback:null,cleanup:null,refs:[]}}function gz(e,t,a,o,c){return e.refs[0]!==t||e.refs[1]!==a||e.refs[2]!==o||e.refs[3]!==c}function xz(e,t){return e.refs.length!==t.length||e.refs.some((a,o)=>a!==t[o])}function RC(e,t){if(e.refs=t,t.every(a=>a==null)){e.callback=null;return}e.callback=a=>{if(e.cleanup&&(e.cleanup(),e.cleanup=null),a!=null){const o=Array(t.length).fill(null);for(let c=0;c{for(let c=0;c=e}function OC(e){if(!x.isValidElement(e))return null;const t=e,a=t.props;return(zv(19)?a?.ref:t.ref)??null}function Kt(){}const Ir=Object.freeze([]),mn=Object.freeze({});function vz(e,t){const a={};for(const o in e){const c=e[o];if(t?.hasOwnProperty(o)){const d=t[o](c);d!=null&&Object.assign(a,d);continue}c===!0?a[`data-${o.toLowerCase()}`]="":c&&(a[`data-${o.toLowerCase()}`]=c.toString())}return a}function yz(e,t){return typeof e=="function"?e(t):e}function jz(e,t){return typeof e=="function"?e(t):e}function yt(e,t,a={}){let o=t.render;a.enabled!==!1&&(o=kz(o));const c=wz(t,a,o);if(a.enabled===!1)return null;const d=a.state??mn;return Cz(e,o,c,d)}function wz(e,t,a){const{className:o,style:c}=e,{state:d=mn,ref:f,props:p,stateAttributesMapping:h,enabled:b=!0}=t,y=b?yz(o,d):void 0,v=b?jz(c,d):void 0,j=b?vz(d,h):mn,w=b&&p?Sz(p):void 0,S=b?Iv(j,w)??{}:mn;return typeof document<"u"&&(b?Array.isArray(f)?S.ref=hz([S.ref,OC(a),...f]):S.ref=sa(S.ref,OC(a),f):sa(null,null)),b?(y!==void 0&&(S.className=kC(S.className,y)),v!==void 0&&(S.style=Iv(S.style,v)),S):mn}function Sz(e){return Array.isArray(e)?iz(e):ta(void 0,e)}const Nz=Symbol.for("react.lazy");function kz(e){if(e?.$$typeof!==Nz)return e;const t=x.Children.toArray(e)[0];return x.isValidElement(t)?t:e}function Cz(e,t,a,o){if(t){if(typeof t=="function")return t(a,o);const c=ta(a,t.props);return c.ref=a.ref,x.cloneElement(t,c)}if(e&&typeof e=="string")return Tz(e,a);throw new Error(un(8))}function Tz(e,t){return e==="button"?x.createElement("button",{type:"button",...t,key:t.key}):e==="img"?x.createElement("img",{alt:"",...t,key:t.key}):x.createElement(e,t)}const Ez=x.forwardRef(function(t,a){const{render:o,className:c,disabled:d=!1,focusableWhenDisabled:f=!1,nativeButton:p=!0,style:h,...b}=t,{getButtonProps:y,buttonRef:v}=na({disabled:d,focusableWhenDisabled:f,native:p});return yt("button",t,{state:{disabled:d},ref:[a,v],props:[b,y]})});function MC(e){var t,a,o="";if(typeof e=="string"||typeof e=="number")o+=e;else if(typeof e=="object")if(Array.isArray(e)){var c=e.length;for(t=0;ttypeof e=="boolean"?`${e}`:e===0?"0":e,PC=DC,Xc=(e,t)=>a=>{var o;if(t?.variants==null)return PC(e,a?.class,a?.className);const{variants:c,defaultVariants:d}=t,f=Object.keys(c).map(b=>{const y=a?.[b],v=d?.[b];if(y===null)return null;const j=IC(y)||IC(v);return c[b][j]}),p=a&&Object.entries(a).reduce((b,y)=>{let[v,j]=y;return j===void 0||(b[v]=j),b},{}),h=t==null||(o=t.compoundVariants)===null||o===void 0?void 0:o.reduce((b,y)=>{let{class:v,className:j,...w}=y;return Object.entries(w).every(S=>{let[N,k]=S;return Array.isArray(k)?k.includes({...d,...p}[N]):{...d,...p}[N]===k})?[...b,v,j]:b},[]);return PC(e,f,h,a?.class,a?.className)},Az=(e,t)=>{const a=new Array(e.length+t.length);for(let o=0;o({classGroupId:e,validator:t}),_C=(e=new Map,t=null,a)=>({nextPart:e,validators:t,classGroupId:a}),$m="-",LC=[],Oz="arbitrary..",Mz=e=>{const t=Iz(e),{conflictingClassGroups:a,conflictingClassGroupModifiers:o}=e;return{getClassGroupId:f=>{if(f.startsWith("[")&&f.endsWith("]"))return Dz(f);const p=f.split($m),h=p[0]===""&&p.length>1?1:0;return zC(p,h,t)},getConflictingClassGroupIds:(f,p)=>{if(p){const h=o[f],b=a[f];return h?b?Az(b,h):h:b||LC}return a[f]||LC}}},zC=(e,t,a)=>{if(e.length-t===0)return a.classGroupId;const c=e[t],d=a.nextPart.get(c);if(d){const b=zC(e,t+1,d);if(b)return b}const f=a.validators;if(f===null)return;const p=t===0?e.join($m):e.slice(t).join($m),h=f.length;for(let b=0;be.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const t=e.slice(1,-1),a=t.indexOf(":"),o=t.slice(0,a);return o?Oz+o:void 0})(),Iz=e=>{const{theme:t,classGroups:a}=e;return Pz(a,t)},Pz=(e,t)=>{const a=_C();for(const o in e){const c=e[o];Bv(c,a,o,t)}return a},Bv=(e,t,a,o)=>{const c=e.length;for(let d=0;d{if(typeof e=="string"){Lz(e,t,a);return}if(typeof e=="function"){zz(e,t,a,o);return}Bz(e,t,a,o)},Lz=(e,t,a)=>{const o=e===""?t:BC(t,e);o.classGroupId=a},zz=(e,t,a,o)=>{if(Hz(e)){Bv(e(o),t,a,o);return}t.validators===null&&(t.validators=[]),t.validators.push(Rz(a,e))},Bz=(e,t,a,o)=>{const c=Object.entries(e),d=c.length;for(let f=0;f{let a=e;const o=t.split($m),c=o.length;for(let d=0;d"isThemeGetter"in e&&e.isThemeGetter===!0,Uz=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,a=Object.create(null),o=Object.create(null);const c=(d,f)=>{a[d]=f,t++,t>e&&(t=0,o=a,a=Object.create(null))};return{get(d){let f=a[d];if(f!==void 0)return f;if((f=o[d])!==void 0)return c(d,f),f},set(d,f){d in a?a[d]=f:c(d,f)}}},Hv="!",HC=":",Vz=[],UC=(e,t,a,o,c)=>({modifiers:e,hasImportantModifier:t,baseClassName:a,maybePostfixModifierPosition:o,isExternal:c}),Fz=e=>{const{prefix:t,experimentalParseClassName:a}=e;let o=c=>{const d=[];let f=0,p=0,h=0,b;const y=c.length;for(let N=0;Nh?b-h:void 0;return UC(d,w,j,S)};if(t){const c=t+HC,d=o;o=f=>f.startsWith(c)?d(f.slice(c.length)):UC(Vz,!1,f,void 0,!0)}if(a){const c=o;o=d=>a({className:d,parseClassName:c})}return o},$z=e=>{const t=new Map;return e.orderSensitiveModifiers.forEach((a,o)=>{t.set(a,1e6+o)}),a=>{const o=[];let c=[];for(let d=0;d0&&(c.sort(),o.push(...c),c=[]),o.push(f)):c.push(f)}return c.length>0&&(c.sort(),o.push(...c)),o}},qz=e=>({cache:Uz(e.cacheSize),parseClassName:Fz(e),sortModifiers:$z(e),postfixLookupClassGroupIds:Gz(e),...Mz(e)}),Gz=e=>{const t=Object.create(null),a=e.postfixLookupClassGroups;if(a)for(let o=0;o{const{parseClassName:a,getClassGroupId:o,getConflictingClassGroupIds:c,sortModifiers:d,postfixLookupClassGroupIds:f}=t,p=[],h=e.trim().split(Kz);let b="";for(let y=h.length-1;y>=0;y-=1){const v=h[y],{isExternal:j,modifiers:w,hasImportantModifier:S,baseClassName:N,maybePostfixModifierPosition:k}=a(v);if(j){b=v+(b.length>0?" "+b:b);continue}let A=!!k,P;if(A){const I=N.substring(0,k);P=o(I);const O=P&&f[P]?o(N):void 0;O&&O!==P&&(P=O,A=!1)}else P=o(N);if(!P){if(!A){b=v+(b.length>0?" "+b:b);continue}if(P=o(N),!P){b=v+(b.length>0?" "+b:b);continue}A=!1}const R=w.length===0?"":w.length===1?w[0]:d(w).join(":"),C=S?R+Hv:R,E=C+P;if(p.indexOf(E)>-1)continue;p.push(E);const D=c(P,A);for(let I=0;I0?" "+b:b)}return b},Xz=(...e)=>{let t=0,a,o,c="";for(;t{if(typeof e=="string")return e;let t,a="";for(let o=0;o{let a,o,c,d;const f=h=>{const b=t.reduce((y,v)=>v(y),e());return a=qz(b),o=a.cache.get,c=a.cache.set,d=p,p(h)},p=h=>{const b=o(h);if(b)return b;const y=Yz(h,a);return c(h,y),y};return d=f,(...h)=>d(Xz(...h))},Zz=[],ks=e=>{const t=a=>a[e]||Zz;return t.isThemeGetter=!0,t.themeKey=e,t},FC=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,$C=/^\((?:(\w[\w-]*):)?(.+)\)$/i,Wz=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,Jz=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,eB=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,tB=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix|color|light-dark)\(.+\)$/,nB=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,sB=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,lo=e=>Wz.test(e),Nt=e=>!!e&&!Number.isNaN(Number(e)),qa=e=>!!e&&Number.isInteger(Number(e)),Uv=e=>e.endsWith("%")&&Nt(e.slice(0,-1)),vl=e=>Jz.test(e),qC=()=>!0,rB=e=>eB.test(e)&&!tB.test(e),Vv=()=>!1,aB=e=>nB.test(e),lB=e=>sB.test(e),oB=e=>!Ye(e)&&!Qe(e),iB=e=>e.startsWith("@container")&&(e[10]==="/"&&e[11]!==void 0||e[11]==="s"&&e[16]!==void 0&&e.startsWith("-size/",10)||e[11]==="n"&&e[18]!==void 0&&e.startsWith("-normal/",10)),cB=e=>oo(e,ZC,Vv),Ye=e=>FC.test(e),ki=e=>oo(e,WC,rB),GC=e=>oo(e,xB,Nt),uB=e=>oo(e,e1,qC),dB=e=>oo(e,JC,Vv),KC=e=>oo(e,XC,Vv),fB=e=>oo(e,QC,lB),qm=e=>oo(e,t1,aB),Qe=e=>$C.test(e),Wd=e=>Ci(e,WC),pB=e=>Ci(e,JC),YC=e=>Ci(e,XC),mB=e=>Ci(e,ZC),hB=e=>Ci(e,QC),Gm=e=>Ci(e,t1,!0),gB=e=>Ci(e,e1,!0),oo=(e,t,a)=>{const o=FC.exec(e);return o?o[1]?t(o[1]):a(o[2]):!1},Ci=(e,t,a=!1)=>{const o=$C.exec(e);return o?o[1]?t(o[1]):a:!1},XC=e=>e==="position"||e==="percentage",QC=e=>e==="image"||e==="url",ZC=e=>e==="length"||e==="size"||e==="bg-size",WC=e=>e==="length",xB=e=>e==="number",JC=e=>e==="family-name",e1=e=>e==="number"||e==="weight",t1=e=>e==="shadow",bB=Qz(()=>{const e=ks("color"),t=ks("font"),a=ks("text"),o=ks("font-weight"),c=ks("tracking"),d=ks("leading"),f=ks("breakpoint"),p=ks("container"),h=ks("spacing"),b=ks("radius"),y=ks("shadow"),v=ks("inset-shadow"),j=ks("text-shadow"),w=ks("drop-shadow"),S=ks("blur"),N=ks("perspective"),k=ks("aspect"),A=ks("ease"),P=ks("animate"),R=()=>["auto","avoid","all","avoid-page","page","left","right","column"],C=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],E=()=>[...C(),Qe,Ye],D=()=>["auto","hidden","clip","visible","scroll"],I=()=>["auto","contain","none"],O=()=>[Qe,Ye,h],_=()=>[lo,"full","auto",...O()],z=()=>[qa,"none","subgrid",Qe,Ye],H=()=>["auto",{span:["full",qa,Qe,Ye]},qa,Qe,Ye],B=()=>[qa,"auto",Qe,Ye],L=()=>["auto","min","max","fr",Qe,Ye],F=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],$=()=>["start","end","center","stretch","center-safe","end-safe"],X=()=>["auto",...O()],K=()=>[lo,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...O()],q=()=>[p,lo,"screen","full","dvw","lvw","svw","min","max","fit",...O()],Q=()=>[lo,"screen","full","lh","dvh","lvh","svh","min","max","fit",...O()],G=()=>[e,Qe,Ye],J=()=>[...C(),YC,KC,{position:[Qe,Ye]}],Y=()=>["no-repeat",{repeat:["","x","y","space","round"]}],re=()=>["auto","cover","contain",mB,cB,{size:[Qe,Ye]}],M=()=>[Uv,Wd,ki],U=()=>["","none","full",b,Qe,Ye],Z=()=>["",Nt,Wd,ki],ae=()=>["solid","dashed","dotted","double"],ce=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],W=()=>[Nt,Uv,YC,KC],ue=()=>["","none",S,Qe,Ye],ve=()=>["none",Nt,Qe,Ye],ee=()=>["none",Nt,Qe,Ye],he=()=>[Nt,Qe,Ye],te=()=>[lo,"full",...O()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[vl],breakpoint:[vl],color:[qC],container:[vl],"drop-shadow":[vl],ease:["in","out","in-out"],font:[oB],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[vl],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[vl],shadow:[vl],spacing:["px",Nt],text:[vl],"text-shadow":[vl],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",lo,Ye,Qe,k]}],container:["container"],"container-type":[{"@container":["","normal","size",Qe,Ye]}],"container-named":[iB],columns:[{columns:[Nt,"auto",Ye,Qe,p]}],"break-after":[{"break-after":R()}],"break-before":[{"break-before":R()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:E()}],overflow:[{overflow:D()}],"overflow-x":[{"overflow-x":D()}],"overflow-y":[{"overflow-y":D()}],overscroll:[{overscroll:I()}],"overscroll-x":[{"overscroll-x":I()}],"overscroll-y":[{"overscroll-y":I()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:_()}],"inset-x":[{"inset-x":_()}],"inset-y":[{"inset-y":_()}],start:[{"inset-s":_(),start:_()}],end:[{"inset-e":_(),end:_()}],"inset-bs":[{"inset-bs":_()}],"inset-be":[{"inset-be":_()}],top:[{top:_()}],right:[{right:_()}],bottom:[{bottom:_()}],left:[{left:_()}],visibility:["visible","invisible","collapse"],z:[{z:[qa,"auto",Qe,Ye]}],basis:[{basis:[lo,"full","auto",p,...O()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[Nt,lo,"auto","initial","none",Ye]}],grow:[{grow:["",Nt,Qe,Ye]}],shrink:[{shrink:["",Nt,Qe,Ye]}],order:[{order:[qa,"first","last","none",Qe,Ye]}],"grid-cols":[{"grid-cols":z()}],"col-start-end":[{col:H()}],"col-start":[{"col-start":B()}],"col-end":[{"col-end":B()}],"grid-rows":[{"grid-rows":z()}],"row-start-end":[{row:H()}],"row-start":[{"row-start":B()}],"row-end":[{"row-end":B()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":L()}],"auto-rows":[{"auto-rows":L()}],gap:[{gap:O()}],"gap-x":[{"gap-x":O()}],"gap-y":[{"gap-y":O()}],"justify-content":[{justify:[...F(),"normal"]}],"justify-items":[{"justify-items":[...$(),"normal"]}],"justify-self":[{"justify-self":["auto",...$()]}],"align-content":[{content:["normal",...F()]}],"align-items":[{items:[...$(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...$(),{baseline:["","last"]}]}],"place-content":[{"place-content":F()}],"place-items":[{"place-items":[...$(),"baseline"]}],"place-self":[{"place-self":["auto",...$()]}],p:[{p:O()}],px:[{px:O()}],py:[{py:O()}],ps:[{ps:O()}],pe:[{pe:O()}],pbs:[{pbs:O()}],pbe:[{pbe:O()}],pt:[{pt:O()}],pr:[{pr:O()}],pb:[{pb:O()}],pl:[{pl:O()}],m:[{m:X()}],mx:[{mx:X()}],my:[{my:X()}],ms:[{ms:X()}],me:[{me:X()}],mbs:[{mbs:X()}],mbe:[{mbe:X()}],mt:[{mt:X()}],mr:[{mr:X()}],mb:[{mb:X()}],ml:[{ml:X()}],"space-x":[{"space-x":O()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":O()}],"space-y-reverse":["space-y-reverse"],size:[{size:K()}],"inline-size":[{inline:["auto",...q()]}],"min-inline-size":[{"min-inline":["auto",...q()]}],"max-inline-size":[{"max-inline":["none",...q()]}],"block-size":[{block:["auto",...Q()]}],"min-block-size":[{"min-block":["auto",...Q()]}],"max-block-size":[{"max-block":["none",...Q()]}],w:[{w:[p,"screen",...K()]}],"min-w":[{"min-w":[p,"screen","none",...K()]}],"max-w":[{"max-w":[p,"screen","none","prose",{screen:[f]},...K()]}],h:[{h:["screen","lh",...K()]}],"min-h":[{"min-h":["screen","lh","none",...K()]}],"max-h":[{"max-h":["screen","lh","none",...K()]}],"font-size":[{text:["base",a,Wd,ki]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[o,gB,uB]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",Uv,Ye]}],"font-family":[{font:[pB,dB,t]}],"font-features":[{"font-features":[Ye]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[c,Qe,Ye]}],"line-clamp":[{"line-clamp":[Nt,"none",Qe,GC]}],leading:[{leading:["none",d,...O()]}],"list-image":[{"list-image":["none",Qe,Ye]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",Qe,Ye]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:G()}],"text-color":[{text:G()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...ae(),"wavy"]}],"text-decoration-thickness":[{decoration:[Nt,"from-font","auto",Qe,ki]}],"text-decoration-color":[{decoration:G()}],"underline-offset":[{"underline-offset":[Nt,"auto",Qe,Ye]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:O()}],"tab-size":[{tab:[qa,Qe,Ye]}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",Qe,Ye]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",Qe,Ye]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:J()}],"bg-repeat":[{bg:Y()}],"bg-size":[{bg:re()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},qa,Qe,Ye],radial:["",Qe,Ye],conic:["",qa,Qe,Ye]},hB,fB]}],"bg-color":[{bg:G()}],"gradient-from-pos":[{from:M()}],"gradient-via-pos":[{via:M()}],"gradient-to-pos":[{to:M()}],"gradient-from":[{from:G()}],"gradient-via":[{via:G()}],"gradient-to":[{to:G()}],rounded:[{rounded:U()}],"rounded-s":[{"rounded-s":U()}],"rounded-e":[{"rounded-e":U()}],"rounded-t":[{"rounded-t":U()}],"rounded-r":[{"rounded-r":U()}],"rounded-b":[{"rounded-b":U()}],"rounded-l":[{"rounded-l":U()}],"rounded-ss":[{"rounded-ss":U()}],"rounded-se":[{"rounded-se":U()}],"rounded-ee":[{"rounded-ee":U()}],"rounded-es":[{"rounded-es":U()}],"rounded-tl":[{"rounded-tl":U()}],"rounded-tr":[{"rounded-tr":U()}],"rounded-br":[{"rounded-br":U()}],"rounded-bl":[{"rounded-bl":U()}],"border-w":[{border:Z()}],"border-w-x":[{"border-x":Z()}],"border-w-y":[{"border-y":Z()}],"border-w-s":[{"border-s":Z()}],"border-w-e":[{"border-e":Z()}],"border-w-bs":[{"border-bs":Z()}],"border-w-be":[{"border-be":Z()}],"border-w-t":[{"border-t":Z()}],"border-w-r":[{"border-r":Z()}],"border-w-b":[{"border-b":Z()}],"border-w-l":[{"border-l":Z()}],"divide-x":[{"divide-x":Z()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":Z()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...ae(),"hidden","none"]}],"divide-style":[{divide:[...ae(),"hidden","none"]}],"border-color":[{border:G()}],"border-color-x":[{"border-x":G()}],"border-color-y":[{"border-y":G()}],"border-color-s":[{"border-s":G()}],"border-color-e":[{"border-e":G()}],"border-color-bs":[{"border-bs":G()}],"border-color-be":[{"border-be":G()}],"border-color-t":[{"border-t":G()}],"border-color-r":[{"border-r":G()}],"border-color-b":[{"border-b":G()}],"border-color-l":[{"border-l":G()}],"divide-color":[{divide:G()}],"outline-style":[{outline:[...ae(),"none","hidden"]}],"outline-offset":[{"outline-offset":[Nt,Qe,Ye]}],"outline-w":[{outline:["",Nt,Wd,ki]}],"outline-color":[{outline:G()}],shadow:[{shadow:["","inner","none",y,Gm,qm]}],"shadow-color":[{shadow:G()}],"inset-shadow":[{"inset-shadow":["none",v,Gm,qm]}],"inset-shadow-color":[{"inset-shadow":G()}],"ring-w":[{ring:Z()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:G()}],"ring-offset-w":[{"ring-offset":[Nt,ki]}],"ring-offset-color":[{"ring-offset":G()}],"inset-ring-w":[{"inset-ring":Z()}],"inset-ring-color":[{"inset-ring":G()}],"text-shadow":[{"text-shadow":["none",j,Gm,qm]}],"text-shadow-color":[{"text-shadow":G()}],opacity:[{opacity:[Nt,Qe,Ye]}],"mix-blend":[{"mix-blend":[...ce(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":ce()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[Nt]}],"mask-image-linear-from-pos":[{"mask-linear-from":W()}],"mask-image-linear-to-pos":[{"mask-linear-to":W()}],"mask-image-linear-from-color":[{"mask-linear-from":G()}],"mask-image-linear-to-color":[{"mask-linear-to":G()}],"mask-image-t-from-pos":[{"mask-t-from":W()}],"mask-image-t-to-pos":[{"mask-t-to":W()}],"mask-image-t-from-color":[{"mask-t-from":G()}],"mask-image-t-to-color":[{"mask-t-to":G()}],"mask-image-r-from-pos":[{"mask-r-from":W()}],"mask-image-r-to-pos":[{"mask-r-to":W()}],"mask-image-r-from-color":[{"mask-r-from":G()}],"mask-image-r-to-color":[{"mask-r-to":G()}],"mask-image-b-from-pos":[{"mask-b-from":W()}],"mask-image-b-to-pos":[{"mask-b-to":W()}],"mask-image-b-from-color":[{"mask-b-from":G()}],"mask-image-b-to-color":[{"mask-b-to":G()}],"mask-image-l-from-pos":[{"mask-l-from":W()}],"mask-image-l-to-pos":[{"mask-l-to":W()}],"mask-image-l-from-color":[{"mask-l-from":G()}],"mask-image-l-to-color":[{"mask-l-to":G()}],"mask-image-x-from-pos":[{"mask-x-from":W()}],"mask-image-x-to-pos":[{"mask-x-to":W()}],"mask-image-x-from-color":[{"mask-x-from":G()}],"mask-image-x-to-color":[{"mask-x-to":G()}],"mask-image-y-from-pos":[{"mask-y-from":W()}],"mask-image-y-to-pos":[{"mask-y-to":W()}],"mask-image-y-from-color":[{"mask-y-from":G()}],"mask-image-y-to-color":[{"mask-y-to":G()}],"mask-image-radial":[{"mask-radial":[Qe,Ye]}],"mask-image-radial-from-pos":[{"mask-radial-from":W()}],"mask-image-radial-to-pos":[{"mask-radial-to":W()}],"mask-image-radial-from-color":[{"mask-radial-from":G()}],"mask-image-radial-to-color":[{"mask-radial-to":G()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":C()}],"mask-image-conic-pos":[{"mask-conic":[Nt]}],"mask-image-conic-from-pos":[{"mask-conic-from":W()}],"mask-image-conic-to-pos":[{"mask-conic-to":W()}],"mask-image-conic-from-color":[{"mask-conic-from":G()}],"mask-image-conic-to-color":[{"mask-conic-to":G()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:J()}],"mask-repeat":[{mask:Y()}],"mask-size":[{mask:re()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",Qe,Ye]}],filter:[{filter:["","none",Qe,Ye]}],blur:[{blur:ue()}],brightness:[{brightness:[Nt,Qe,Ye]}],contrast:[{contrast:[Nt,Qe,Ye]}],"drop-shadow":[{"drop-shadow":["","none",w,Gm,qm]}],"drop-shadow-color":[{"drop-shadow":G()}],grayscale:[{grayscale:["",Nt,Qe,Ye]}],"hue-rotate":[{"hue-rotate":[Nt,Qe,Ye]}],invert:[{invert:["",Nt,Qe,Ye]}],saturate:[{saturate:[Nt,Qe,Ye]}],sepia:[{sepia:["",Nt,Qe,Ye]}],"backdrop-filter":[{"backdrop-filter":["","none",Qe,Ye]}],"backdrop-blur":[{"backdrop-blur":ue()}],"backdrop-brightness":[{"backdrop-brightness":[Nt,Qe,Ye]}],"backdrop-contrast":[{"backdrop-contrast":[Nt,Qe,Ye]}],"backdrop-grayscale":[{"backdrop-grayscale":["",Nt,Qe,Ye]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[Nt,Qe,Ye]}],"backdrop-invert":[{"backdrop-invert":["",Nt,Qe,Ye]}],"backdrop-opacity":[{"backdrop-opacity":[Nt,Qe,Ye]}],"backdrop-saturate":[{"backdrop-saturate":[Nt,Qe,Ye]}],"backdrop-sepia":[{"backdrop-sepia":["",Nt,Qe,Ye]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":O()}],"border-spacing-x":[{"border-spacing-x":O()}],"border-spacing-y":[{"border-spacing-y":O()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",Qe,Ye]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[Nt,"initial",Qe,Ye]}],ease:[{ease:["linear","initial",A,Qe,Ye]}],delay:[{delay:[Nt,Qe,Ye]}],animate:[{animate:["none",P,Qe,Ye]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[N,Qe,Ye]}],"perspective-origin":[{"perspective-origin":E()}],rotate:[{rotate:ve()}],"rotate-x":[{"rotate-x":ve()}],"rotate-y":[{"rotate-y":ve()}],"rotate-z":[{"rotate-z":ve()}],scale:[{scale:ee()}],"scale-x":[{"scale-x":ee()}],"scale-y":[{"scale-y":ee()}],"scale-z":[{"scale-z":ee()}],"scale-3d":["scale-3d"],skew:[{skew:he()}],"skew-x":[{"skew-x":he()}],"skew-y":[{"skew-y":he()}],transform:[{transform:[Qe,Ye,"","none","gpu","cpu"]}],"transform-origin":[{origin:E()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:te()}],"translate-x":[{"translate-x":te()}],"translate-y":[{"translate-y":te()}],"translate-z":[{"translate-z":te()}],"translate-none":["translate-none"],zoom:[{zoom:[qa,Qe,Ye]}],accent:[{accent:G()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:G()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",Qe,Ye]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scrollbar-thumb-color":[{"scrollbar-thumb":G()}],"scrollbar-track-color":[{"scrollbar-track":G()}],"scrollbar-gutter":[{"scrollbar-gutter":["auto","stable","both"]}],"scrollbar-w":[{scrollbar:["auto","thin","none"]}],"scroll-m":[{"scroll-m":O()}],"scroll-mx":[{"scroll-mx":O()}],"scroll-my":[{"scroll-my":O()}],"scroll-ms":[{"scroll-ms":O()}],"scroll-me":[{"scroll-me":O()}],"scroll-mbs":[{"scroll-mbs":O()}],"scroll-mbe":[{"scroll-mbe":O()}],"scroll-mt":[{"scroll-mt":O()}],"scroll-mr":[{"scroll-mr":O()}],"scroll-mb":[{"scroll-mb":O()}],"scroll-ml":[{"scroll-ml":O()}],"scroll-p":[{"scroll-p":O()}],"scroll-px":[{"scroll-px":O()}],"scroll-py":[{"scroll-py":O()}],"scroll-ps":[{"scroll-ps":O()}],"scroll-pe":[{"scroll-pe":O()}],"scroll-pbs":[{"scroll-pbs":O()}],"scroll-pbe":[{"scroll-pbe":O()}],"scroll-pt":[{"scroll-pt":O()}],"scroll-pr":[{"scroll-pr":O()}],"scroll-pb":[{"scroll-pb":O()}],"scroll-pl":[{"scroll-pl":O()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",Qe,Ye]}],fill:[{fill:["none",...G()]}],"stroke-w":[{stroke:[Nt,Wd,ki,GC]}],stroke:[{stroke:["none",...G()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{"container-named":["container-type"],overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","inset-bs","inset-be","start","end","top","right","bottom","left"],"inset-x":["start","end","right","left"],"inset-y":["inset-bs","inset-be","top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pbs","pbe","pt","pr","pb","pl"],px:["ps","pe","pr","pl"],py:["pbs","pbe","pt","pb"],m:["mx","my","ms","me","mbs","mbe","mt","mr","mb","ml"],mx:["ms","me","mr","ml"],my:["mbs","mbe","mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-bs","border-w-be","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-s","border-w-e","border-w-r","border-w-l"],"border-w-y":["border-w-bs","border-w-be","border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-bs","border-color-be","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-s","border-color-e","border-color-r","border-color-l"],"border-color-y":["border-color-bs","border-color-be","border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mbs","scroll-mbe","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-ms","scroll-me","scroll-mr","scroll-ml"],"scroll-my":["scroll-mbs","scroll-mbe","scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pbs","scroll-pbe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-ps","scroll-pe","scroll-pr","scroll-pl"],"scroll-py":["scroll-pbs","scroll-pbe","scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},postfixLookupClassGroups:["container-type"],orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}});function Ue(...e){return bB(DC(e))}const vB=Xc(["group/button inline-flex shrink-0 items-center justify-center gap-1.5 whitespace-nowrap border","font-medium transition-[background-color,border-color,color,transform,box-shadow] duration-150 ease-out","outline-none select-none active:translate-y-[0.5px]","disabled:pointer-events-none disabled:opacity-45 disabled:shadow-none","[&_svg]:pointer-events-none [&_svg]:shrink-0"],{variants:{variant:{default:"border-primary bg-primary font-semibold text-primary-on shadow-glow hover:border-primary-hover hover:bg-primary-hover",outline:"border-control-border bg-control text-foreground shadow-1 hover:border-control-border-hover hover:bg-control-hover",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"border-transparent bg-transparent text-subtle shadow-none hover:bg-control-hover hover:text-foreground",destructive:"border-destructive-bd bg-destructive-soft text-destructive hover:bg-destructive-hover",dashed:"border-dashed border-border-strong bg-transparent text-muted-foreground shadow-none hover:border-primary hover:text-primary-fg",link:"border-transparent bg-transparent text-primary shadow-none underline-offset-4 hover:underline"},size:{default:"h-[30px] rounded-md px-3 text-[12.5px]","2xs":"h-4 rounded-pill px-1.5 text-[10px]",xs:"h-6 rounded-sm px-2 text-[11.5px]",sm:"h-[26px] rounded-sm px-2.5 text-[12px]",lg:"h-9 rounded-md px-4 text-[13px]",icon:"h-[30px] w-[30px] rounded-md p-0","icon-2xs":"size-4 rounded-pill p-0","icon-xs":"size-6 rounded-sm p-0","icon-sm":"h-[26px] w-[26px] rounded-sm p-0","icon-lg":"size-9 rounded-md p-0"}},defaultVariants:{variant:"default",size:"default"}});function ne({className:e,variant:t,size:a,...o}){return s.jsx(Ez,{className:Ue(vB({variant:t,size:a}),e),...o})}const yB="data-valid",jB="data-invalid",wB={badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valid:null,valueMissing:!1},n1={valid:null,touched:!1,dirty:!1,filled:!1,focused:!1},SB={disabled:!1,...n1},Ti={valid(e){return e===null?null:e?{[yB]:""}:{[jB]:""}}},s1={invalid:void 0,name:void 0,validityData:{state:wB,errors:[],error:"",value:"",initialValue:null},setValidityData:Kt,disabled:void 0,setTouched:Kt,setDirty:Kt,setFilled:Kt,setFocused:Kt,validationMode:"onSubmit",shouldValidateOnChange:()=>!1,state:SB,registerFieldControl:Kt,validation:{getValidationProps:(e,t=mn)=>t,inputRef:{current:null},registeredInputs:new Map,registerInput:Kt,getInputControl:()=>null,commit:async()=>{},change:Kt}},r1=x.createContext(s1);function Na(e=!0){const t=x.useContext(r1);if(t.setValidityData===Kt&&!e)throw new Error(un(28));return t}const NB=x.createContext(void 0);function kB(e=!1){const t=x.useContext(NB);if(!t&&!e)throw new Error(un(86));return t}const CB=x.createContext({elementRef:{current:null},formRef:{current:{fields:new Map}},errors:{},clearErrors:Kt,validationMode:"onSubmit",submitCountRef:{current:0}});function Qc(){return x.useContext(CB)}let a1=0;function TB(e,t="mui"){const[a,o]=x.useState(e),c=e||a;return x.useEffect(()=>{a==null&&(a1+=1,o(`${t}-${a1}`))},[a,t]),c}const l1=Mv.useId;function Jd(e,t){if(l1!==void 0){const a=l1();return e??(t?`${t}-${a}`:a)}return TB(e,t)}function ka(e){return Jd(e,"base-ui")}const EB=x.createContext({controlId:void 0,registerControlId:Kt,resetControlId:Kt,labelId:void 0,setLabelId:Kt,messageIds:[],setMessageIds:Kt,getDescriptionProps:e=>e});function yl(){return x.useContext(EB)}function Fv(e,t,a,o=!0,c){const[d,f]=x.useState(),p=ka(c?`${c}-label`:void 0),h=e??t??d;return Me(()=>{const b=e||t||!o?void 0:AB(a.current,p);d!==b&&f(b)}),h}function AB(e,t){const a=RB(e);if(a)return!a.id&&t&&(a.id=t),a.id||void 0}function RB(e){if(!e)return;const t=e.parentElement;if(t&&t.tagName==="LABEL")return t;const a=e.id;if(a){const c=e.nextElementSibling;if(c&&c.htmlFor===a)return c}const o=e.labels;return o&&o[0]}function io(e={}){const{id:t,enabled:a=!0}=e,{controlId:o,registerControlId:c,resetControlId:d}=yl(),f=ka(),p=Ps(()=>Symbol()),h=x.useRef(!1),b=x.useRef(!1),y=Ie(()=>{!h.current||c===Kt||(h.current=!1,c(p.current,void 0))});return Me(()=>{if(!a||c===Kt){y();return}let v;if(t!==void 0)b.current=!0,v=t;else if(b.current)v=f;else{d();return}if(v===void 0){y();return}h.current=!0,c(p.current,v)},[t,a,c,d,f,p,y]),Me(()=>y,[y]),(a?o:void 0)??t??f}function OB(){return typeof navigator>"u"?{userAgent:"",platform:"",maxTouchPoints:0}:{userAgent:navigator.userAgent,platform:navigator.platform??"",maxTouchPoints:navigator.maxTouchPoints??0}}const{userAgent:MB,platform:DB,maxTouchPoints:IB}=OB(),Km=MB.toLowerCase(),ef=DB.toLowerCase(),tf=/^i(os$|p)/.test(ef)||ef==="macintel"&&IB>1,o1="android",Ym=ef===o1||Km.includes(o1),i1=!tf&&ef.startsWith("mac");ef.startsWith("win");const PB=i1||tf,jl=typeof CSS<"u"&&!!CSS.supports?.("-webkit-backdrop-filter:none"),c1=!jl&&Km.includes("firefox");!jl&&Km.includes("chrom");const _B=PB,$v=/jsdom|happydom/.test(Km);function ir(e){let t=e.activeElement;for(;t?.shadowRoot?.activeElement!=null;)t=t.shadowRoot.activeElement;return t}function Ze(e,t){if(!e||!t)return!1;const a=t.getRootNode?.();if(e.contains(t))return!0;if(a&&Gc(a)){let o=t;for(;o;){if(e===o)return!0;o=o.parentNode||o.host}}return!1}function fs(e){return"composedPath"in e?e.composedPath()[0]??e.target:e.target}const qv="data-base-ui-focusable",u1="input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])",Ei="ArrowLeft",Ai="ArrowRight",Gv="ArrowUp",Xm="ArrowDown",d1="data-starting-style",LB="data-ending-style",zB={[d1]:""},BB={[LB]:""},co={transitionStatus(e){return e==="starting"?zB:e==="ending"?BB:null}},HB="data-open",UB="data-closed",VB="data-anchor-hidden",f1="data-popup-open",FB="data-pressed",$B={[f1]:""},qB={[f1]:"",[FB]:""},GB={[HB]:""},KB={[UB]:""},YB={[VB]:""},Kv={open(e){return e?$B:null}},Yv={open(e){return e?qB:null}},Zc={open(e){return e?GB:KB},anchorHidden(e){return e?YB:null}},Xv={...Zc,...co},Qv="data-trigger-disabled";function Qm(e,t){if(!Rt(e))return!1;const a=e;if(t.hasElement(a))return!a.hasAttribute(Qv);for(const[,o]of t.entries())if(Ze(o,a))return!o.hasAttribute(Qv);return!1}function Zv(e,t){if(t==null)return!1;if("composedPath"in e)return e.composedPath().includes(t);const a=e;return a.target!=null&&t.contains(a.target)}function XB(e){return e.matches("html,body")}function Zm(e){return pn(e)&&e.matches(u1)}function QB(e){return e?.closest(`button,a[href],[role="button"],select,[tabindex]:not([tabindex="-1"]),${u1}`)!=null}function Wv(e){return e?e.getAttribute("role")==="combobox"&&Zm(e):!1}function ZB(e){if(!e||$v)return!0;try{return e.matches(":focus-visible")}catch{return!0}}function Wm(e){return e?e.hasAttribute(qv)?e:e.querySelector(`[${qv}]`)||e:null}function uo(e,t,a=!0){return e.filter(c=>c.parentId===t).flatMap(c=>[...!a||c.context?.open?[c]:[],...uo(e,c.id,a)])}function p1(e,t){let a=[],o=e.find(c=>c.id===t)?.parentId;for(;o;){const c=e.find(d=>d.id===o);o=c?.parentId,c&&(a=a.concat(c))}return a}function Cs(e){e.preventDefault(),e.stopPropagation()}function WB(e){return"nativeEvent"in e}function Jm(e){return e.pointerType===""&&e.isTrusted?!0:Ym&&e.pointerType?e.type==="click"&&e.buttons===1:e.detail===0&&!e.pointerType}function Jv(e){return $v?!1:!Ym&&e.width===0&&e.height===0||Ym&&e.width===1&&e.height===1&&e.pressure===0&&e.detail===0&&e.pointerType==="mouse"||e.width<1&&e.height<1&&e.pressure===0&&e.detail===0&&e.pointerType==="touch"}function fo(e,t){const a=["mouse","pen"];return t||a.push("",void 0),a.includes(e)}function JB(e){const t=e.type;return t==="click"||t==="mousedown"||t==="keydown"||t==="keyup"}const Wc=Math.min,wl=Math.max,eh=Math.round,Ri=Math.floor,Sl=e=>({x:e,y:e}),e4={left:"right",right:"left",bottom:"top",top:"bottom"};function m1(e,t,a){return wl(e,Wc(t,a))}function po(e,t){return typeof e=="function"?e(t):e}function ra(e){return e.split("-")[0]}function Nl(e){return e.split("-")[1]}function ey(e){return e==="x"?"y":"x"}function ty(e){return e==="y"?"height":"width"}function aa(e){const t=e[0];return t==="t"||t==="b"?"y":"x"}function ny(e){return ey(aa(e))}function t4(e,t,a){a===void 0&&(a=!1);const o=Nl(e),c=ny(e),d=ty(c);let f=c==="x"?o===(a?"end":"start")?"right":"left":o==="start"?"bottom":"top";return t.reference[d]>t.floating[d]&&(f=th(f)),[f,th(f)]}function n4(e){const t=th(e);return[sy(e),t,sy(t)]}function sy(e){return e.includes("start")?e.replace("start","end"):e.replace("end","start")}const h1=["left","right"],g1=["right","left"],s4=["top","bottom"],r4=["bottom","top"];function a4(e,t,a){switch(e){case"top":case"bottom":return a?t?g1:h1:t?h1:g1;case"left":case"right":return t?s4:r4;default:return[]}}function l4(e,t,a,o){const c=Nl(e);let d=a4(ra(e),a==="start",o);return c&&(d=d.map(f=>f+"-"+c),t&&(d=d.concat(d.map(sy)))),d}function th(e){const t=ra(e);return e4[t]+e.slice(t.length)}function o4(e){var t,a,o,c;return{top:(t=e.top)!=null?t:0,right:(a=e.right)!=null?a:0,bottom:(o=e.bottom)!=null?o:0,left:(c=e.left)!=null?c:0}}function x1(e){return typeof e!="number"?o4(e):{top:e,right:e,bottom:e,left:e}}function nf(e){const{x:t,y:a,width:o,height:c}=e;return{width:o,height:c,top:a,left:t,right:t+o,bottom:a+c,x:t,y:a}}function nh(e,t,a){return Math.floor(e/t)!==a}function mo(e,t){return t<0||t>=e.length}function sh(e,t){return _s(e.current,{disabledIndices:t})}function ry(e,t){return _s(e.current,{decrement:!0,startingIndex:e.current.length,disabledIndices:t})}function _s(e,{startingIndex:t=-1,decrement:a=!1,disabledIndices:o,amount:c=1}={}){let d=t;do d+=a?-c:c;while(d>=0&&d<=e.length-1&&ho(e,d,o));return d}function i4(e,{event:t,orientation:a,loopFocus:o,onLoop:c,rtl:d,cols:f,disabledIndices:p,minIndex:h,maxIndex:b,prevIndex:y,stopEvent:v=!1}){let j=y,w;if(t.key===Gv?w="up":t.key===Xm&&(w="down"),w){const S=[],N=[];let k=!1,A=0;{let _=null,z=-1;e.forEach((H,B)=>{if(H==null)return;A+=1;const L=H.closest('[role="row"]');L&&(k=!0),(L!==_||z===-1)&&(_=L,z+=1,S[z]=[]),S[z].push(B),N[B]=z})}let P=!1,R=0;if(k)for(const _ of S){const z=_.length;z>R&&(R=z),z!==f&&(P=!0)}const C=P&&A{if(!P||y===-1)return;const z=N[y];if(z==null)return;const H=S[z].indexOf(y),B=_==="up"?-1:1;for(let L=z+B,F=0;F=S.length){if(!o||C)return;if(L=L<0?S.length-1:0,c){const X=Math.min(H,S[L].length-1),K=S[L][X]??S[L][0],q=c(t,y,K);L=N[q]??L}}const $=S[L];for(let X=Math.min(H,$.length-1);X>=0;X-=1){const K=$[X];if(!ho(e,K,p))return K}}},I=_=>{if(!C||y===-1)return;const z=y%E,H=_==="up"?-E:E,B=b-b%E,L=Ri(b/E)+1;for(let F=y-z+H,$=0;$b){if(!o)return;F=F<0?B:0}const X=Math.min(F+E-1,b);for(let K=Math.min(F+z,X);K>=F;K-=1)if(!ho(e,K,p))return K}};v&&Cs(t);const O=D(w)??I(w);if(O!==void 0)j=O;else if(y===-1)j=w==="up"?b:h;else if(j=_s(e,{startingIndex:y,amount:E,decrement:w==="up",disabledIndices:p}),o){if(w==="up"&&(y-E_?H:H-E,c&&(j=c(t,y,j))}w==="down"&&y+E>b&&(j=_s(e,{startingIndex:y%E-E,amount:E,disabledIndices:p}),c&&(j=c(t,y,j)))}mo(e,j)&&(j=y)}if(a==="both"){const S=Ri(y/f);t.key===(d?Ei:Ai)&&(v&&Cs(t),y%f!==f-1?(j=_s(e,{startingIndex:y,disabledIndices:p}),o&&nh(j,f,S)&&(j=_s(e,{startingIndex:y-y%f-1,disabledIndices:p}),c&&(j=c(t,y,j)))):o&&(j=_s(e,{startingIndex:y-y%f-1,disabledIndices:p}),c&&(j=c(t,y,j))),nh(j,f,S)&&(j=y)),t.key===(d?Ai:Ei)&&(v&&Cs(t),y%f!==0?(j=_s(e,{startingIndex:y,decrement:!0,disabledIndices:p}),o&&nh(j,f,S)&&(j=_s(e,{startingIndex:y+(f-y%f),decrement:!0,disabledIndices:p}),c&&(j=c(t,y,j)))):o&&(j=_s(e,{startingIndex:y+(f-y%f),decrement:!0,disabledIndices:p}),c&&(j=c(t,y,j))),nh(j,f,S)&&(j=y));const N=Ri(b/f)===S;mo(e,j)&&(o&&N?(j=t.key===(d?Ai:Ei)?b:_s(e,{startingIndex:y-y%f-1,disabledIndices:p}),c&&(j=c(t,y,j))):j=y)}return j}function ho(e,t,a){if(typeof a=="function"?a(t):a?.includes(t)??!1)return!0;const c=e[t];return c?!rh(c)||c.matches(":disabled")?!0:!a&&(c.hasAttribute("disabled")||c.getAttribute("aria-disabled")==="true"):!1}function c4(e){return e.visibility==="hidden"||e.visibility==="collapse"}function rh(e,t=e?yr(e):null){return!e||!e.isConnected||!t||c4(t)?!1:typeof e.checkVisibility=="function"?e.checkVisibility():t.display!=="none"&&t.display!=="contents"}const u4='a[href],button,input,select,textarea,summary,details,iframe,object,embed,[tabindex],[contenteditable]:not([contenteditable="false"]),audio[controls],video[controls]';function d4(e){const t=e.assignedSlot;if(t)return t;if(e.parentElement)return e.parentElement;const a=e.getRootNode();return Gc(a)?a.host:null}function ay(e){for(const t of Array.from(e.children))if(Fs(t)==="summary")return t;return null}function f4(e,t){const a=ay(t);return!!a&&(e===a||Ze(a,e))}function b1(e){const t=e?Fs(e):"";return e!=null&&e.matches(u4)&&(t!=="summary"||e.parentElement!=null&&Fs(e.parentElement)==="details"&&ay(e.parentElement)===e)&&(t!=="details"||ay(e)==null)&&(t!=="input"||e.type!=="hidden")}function v1(e){if(!b1(e)||!e.isConnected||e.matches(":disabled"))return!1;for(let t=e;t;t=d4(t)){const a=t!==e,o=Fs(t)==="slot";if(t.hasAttribute("inert")||a&&Fs(t)==="details"&&!t.open&&!f4(e,t)||t.hasAttribute("hidden")||!o&&!p4(t,a))return!1}return!0}function p4(e,t){const a=yr(e);return t?a.display!=="none":rh(e,a)}function y1(e){const t=e.tabIndex;if(t<0){const a=Fs(e);if(a==="details"||a==="audio"||a==="video"||pn(e)&&e.isContentEditable)return 0}return t}function ly(e){if(Fs(e)!=="input")return null;const t=e;return t.type==="radio"&&t.name!==""?t:null}function m4(e,t){const a=ly(e);if(!a)return!0;const o=t.find(c=>{const d=ly(c);return d?.name===a.name&&d.form===a.form&&d.checked});return o?o===a:t.find(c=>{const d=ly(c);return d?.name===a.name&&d.form===a.form})===a}function j1(e){if(pn(e)&&Fs(e)==="slot"){const t=e.assignedElements({flatten:!0});if(t.length>0)return t}return pn(e)&&e.shadowRoot?Array.from(e.shadowRoot.children):Array.from(e.children)}function w1(e,t){j1(e).forEach(a=>{b1(a)&&t.push(a),w1(a,t)})}function S1(e,t,a){j1(e).forEach(o=>{pn(o)&&o.matches(t)&&a.push(o),S1(o,t,a)})}function oy(e){return v1(e)&&y1(e)>=0}function N1(e){const t=[];return w1(e,t),t.filter(v1)}function sf(e){const t=N1(e);return t.filter(a=>y1(a)>=0&&m4(a,t))}function k1(e,t){const a=sf(e),o=a.length;if(o===0)return;const c=ir(Gt(e)),d=a.indexOf(c),f=d===-1?t===1?0:o-1:d+t;return a[f]}function iy(e){return k1(Gt(e).body,1)||e}function C1(e){return k1(Gt(e).body,-1)||e}function T1(e,t){if(!e)return null;const a=sf(Gt(e).body),o=a.length;if(o===0)return null;const c=a.indexOf(e);if(c===-1)return null;const d=(c+t+o)%o;return a[d]}function h4(e){return T1(e,1)}function g4(e){return T1(e,-1)}function Jc(e,t){const a=t||e.currentTarget,o=e.relatedTarget;return!o||!Ze(a,o)}function x4(e){sf(e).forEach(a=>{a.dataset.tabindex=a.getAttribute("tabindex")||"",a.setAttribute("tabindex","-1")})}function E1(e){const t=[];S1(e,"[data-tabindex]",t),t.forEach(a=>{const o=a.dataset.tabindex;delete a.dataset.tabindex,o?a.setAttribute("tabindex",o):a.removeAttribute("tabindex")})}function cy(e){x.useEffect(e,Ir)}const rf=0;class la{constructor(){cn(this,"currentId",rf);cn(this,"clear",()=>{this.currentId!==rf&&(clearTimeout(this.currentId),this.currentId=rf)});cn(this,"disposeEffect",()=>this.clear)}static create(){return new la}start(t,a){this.clear(),this.currentId=setTimeout(()=>{this.currentId=rf,a()},t)}isStarted(){return this.currentId!==rf}}function er(){const e=Ps(la.create).current;return cy(e.disposeEffect),e}function b4(e,t){return e.matches(":disabled")?!1:!t||e.form===t?!0:e.form===null&&!e.hasAttribute("form")}const v4=x.createContext({disabled:!1});function A1(){return x.useContext(v4)}var uy={exports:{}},$s={};var R1;function y4(){if(R1)return $s;R1=1;var e=Xd();function t(y){var v="https://react.dev/errors/"+y;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),uy.exports=y4(),uy.exports}var Ts=M1();const ah=null;class j4{constructor(){cn(this,"callbacks",[]);cn(this,"callbacksCount",0);cn(this,"nextId",1);cn(this,"startId",1);cn(this,"isScheduled",!1);cn(this,"tick",t=>{this.isScheduled=!1;const a=this.callbacks,o=this.callbacksCount;if(this.callbacks=[],this.callbacksCount=0,this.startId=this.nextId,o>0)for(let c=0;c=this.callbacks.length||this.callbacks[a]!==null&&(this.callbacks[a]=null,this.callbacksCount-=1)}}let lh=new j4;class Ga{constructor(){cn(this,"currentId",ah);cn(this,"cancel",()=>{this.currentId!==ah&&(lh.cancel(this.currentId),this.currentId=ah)});cn(this,"disposeEffect",()=>this.cancel)}static create(){return new Ga}static request(t){return lh.request(t)}static cancel(t){return lh.cancel(t)}request(t){this.cancel(),this.currentId=lh.request(()=>{this.currentId=ah,t()})}}function eu(){const e=Ps(Ga.create).current;return cy(e.disposeEffect),e}function kl(e){return e==null?e:"current"in e?e.current:e}let oh=null;function w4(e){if(!oh){const t=[];oh=t,queueMicrotask(()=>{oh=null,Ts.flushSync(()=>{for(const a of t)a()})})}oh.push(e)}function D1(e,t=!1,a=!1){const o=eu();return Ie((c,d=null)=>{o.cancel();const f=kl(e);if(f==null)return;const p=f,h=()=>{if(!a){Ts.flushSync(c);return}w4(()=>{d?.aborted||c()})};if(typeof p.getAnimations!="function"||globalThis.BASE_UI_ANIMATIONS_DISABLED){c();return}function b(){Promise.all(p.getAnimations().map(y=>y.finished)).then(()=>{d?.aborted||h()},()=>{if(d?.aborted)return;if(p.getAnimations().some(v=>v.pending||v.playState!=="finished")){b();return}h()})}if(t){const y=d1;if(!p.hasAttribute(y)){o.request(b);return}const v=new MutationObserver(()=>{p.hasAttribute(y)||(v.disconnect(),b())});v.observe(p,{attributes:!0,attributeFilter:[y]}),d?.addEventListener("abort",()=>v.disconnect(),{once:!0});return}o.request(b)})}function oa(e){const{enabled:t=!0,open:a,ref:o,batch:c=!1,onComplete:d}=e,f=Ie(d),p=D1(o,a,c);x.useEffect(()=>{if(!t)return;const h=new AbortController;return p(f,h.signal),()=>{h.abort()}},[t,a,f,p])}function Oi(e,t=!1,a=!1,o=!1){const[c,d]=x.useState(e&&t?"idle":void 0),[f,p]=x.useState(e&&!o);return e&&!f&&(p(!0),d("starting")),!e&&f&&c!=="ending"&&!a&&d("ending"),!e&&!f&&c==="ending"&&d(void 0),Me(()=>{if(!e&&f&&c!=="ending"&&a){const h=Ga.request(()=>{d("ending")});return()=>{Ga.cancel(h)}}},[e,f,c,a]),Me(()=>{if(!e||t)return;const h=Ga.request(()=>{d(void 0)});return()=>{Ga.cancel(h)}},[t,e]),Me(()=>{if(!e||!t)return;e&&f&&c!=="idle"&&d("starting");const h=Ga.request(()=>{d("idle")});return()=>{Ga.cancel(h)}},[t,e,f,c]),{mounted:f,setMounted:p,transitionStatus:c}}function Ka({controlled:e,default:t,name:a,state:o="value"}){const{current:c}=x.useRef(e!==void 0),[d,f]=x.useState(t),p=c&&e!==void 0?e:d,h=x.useCallback(b=>{c||f(b)},[]);return[p,h]}function tu(e,t,a,o,c=!0,d){const{registerFieldControl:f}=Na(),p=Ps(()=>Symbol());Me(()=>{const h=p.current;if(!c){f(h,void 0);return}f(h,{controlRef:e,getValue:o,id:t,name:d,value:a})},[e,c,o,t,d,f,p,a]),Me(()=>{const h=p.current;return()=>{f(h,void 0)}},[f,p])}function ia(e,t){const a=x.useRef(e),o=Ie(t);Me(()=>{a.current!==e&&o(a.current),a.current=e},[e,o])}const Qn="none",go="trigger-press",qs="trigger-hover",ih="trigger-focus",ch="outside-press",af="item-press",dy="close-press",lf="input-change",Ya="input-clear",S4="input-press",xo="focus-out",nu="escape-key",fy="list-navigation",I1="keyboard",P1="pointer",_1="cancel-open",N4="disabled",py="imperative-action",k4="window-resize";function qe(e,t,a,o){let c=!1,d=!1;const f=o??mn;return{reason:e,event:t??new Event("base-ui"),cancel(){c=!0},allowPropagation(){d=!0},get isCanceled(){return c},get isPropagationAllowed(){return d},trigger:a,...f}}function C4(e,t,a){const o=a??mn;return{reason:e,event:t??new Event("base-ui"),...o}}const T4=x.forwardRef(function(t,a){const{render:o,className:c,id:d,name:f,value:p,disabled:h=!1,onValueChange:b,defaultValue:y,autoFocus:v=!1,style:j,...w}=t,{state:S,name:N,disabled:k,setTouched:A,setDirty:P,validityData:R,setFocused:C,setFilled:E,validationMode:D,validation:I}=Na(),{clearErrors:O,elementRef:_,submitCountRef:z}=Qc(),H=k||h,B=N??f,L={...S,disabled:H},{labelId:F}=yl(),$=io({id:d}),[X]=Ka({controlled:p,default:y,name:"FieldControl",state:"value"}),K=p!==void 0,q=K?X:void 0,Q=q==null?void 0:String(q),G=Ie(()=>I.inputRef.current?.value);tu(I.inputRef,$,Q,G,!H,f),Me(()=>{const M=Q??I.inputRef.current?.value;M!==void 0&&E(M!=="")},[Q,I.inputRef,E]),ia(Q,()=>{Q!==void 0&&(O(B),P(Q!==(R.initialValue??"")),I.change(Q))});const J=x.useRef(null),Y=er();return Me(()=>{v&&J.current===ir(Gt(J.current))&&C(!0)},[v,C]),yt("input",t,{ref:[a,J],state:L,props:[{id:$,disabled:H,name:B,ref:I.inputRef,"aria-labelledby":F,autoFocus:v,...K?{value:q}:{defaultValue:y},onChange(M){const U=M.currentTarget.value,Z=qe(Qn,M.nativeEvent);b?.(U,Z),!K&&(P(U!==(R.initialValue??"")),E(U!==""),!M.nativeEvent.defaultPrevented&&!Z.isCanceled&&(O(B),I.change(U)))},onFocus(){C(!0)},onBlur(M){if(A(!0),C(!1),D==="onBlur"){const U=M.currentTarget.value;I.commit(U),K&&queueMicrotask(()=>{const Z=I.inputRef.current?.value;Z!==void 0&&Z!==U&&Z!==(R.initialValue??"")&&I.commit(Z)})}},onKeyDown(M){if(M.currentTarget.tagName==="INPUT"&&M.key==="Enter"){A(!0);const U=M.currentTarget.value,Z=M.currentTarget.form;if(Z&&Z===_.current&&!M.defaultPrevented){const ae=M.currentTarget,ce=z.current;Y.start(0,()=>{z.current===ce&&I.commit(ae.value)})}else I.commit(U)}}},w,M=>I.getValidationProps(H,M)],stateAttributesMapping:Ti})}),E4=x.forwardRef(function(t,a){return s.jsx(T4,{ref:a,...t})});function Fe({className:e,type:t,ref:a,...o}){return s.jsx(E4,{ref:a,type:t,"data-slot":"input",className:Ue("h-[30px] w-full min-w-0 rounded-md border border-control-border bg-control px-2.5","text-[12.5px] text-foreground outline-none","transition-[border-color,box-shadow] duration-150 ease-out","placeholder:text-muted-foreground","hover:border-control-border-hover","focus:border-primary focus:shadow-focus","disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-surface-3 disabled:text-muted-foreground","file:inline-flex file:border-0 file:bg-transparent file:text-foreground",e),...o})}function Mi({className:e,...t}){return s.jsx("textarea",{"data-slot":"textarea",className:Ue("min-h-26 w-full resize-y rounded-md border border-control-border bg-control px-3 py-2.5","font-mono text-[12px] leading-[1.6] text-foreground outline-none","transition-[border-color,box-shadow] duration-150 ease-out","placeholder:text-muted-foreground","hover:border-control-border-hover","focus:border-primary focus:shadow-focus","disabled:cursor-not-allowed disabled:bg-surface-3 disabled:text-muted-foreground",e),...t})}function Di({className:e,...t}){return s.jsx("div",{"data-slot":"input-group",role:"group",className:Ue("group/input-group relative flex h-[30px] w-full min-w-0 items-center rounded-md border border-control-border bg-control","transition-[border-color,box-shadow] duration-150 ease-out","outline-none","has-[[data-slot=input-group-control]:focus-visible]:border-primary","has-[[data-slot=input-group-control]:focus-visible]:shadow-focus","has-[[data-slot=input-group-control]:hover:not(:focus-visible)]:border-control-border-hover","has-[>textarea]:h-auto","has-[>[data-align=inline-start]]:[&>[data-slot=input-group-control]]:pl-1.5","has-[>[data-align=inline-end]]:[&>[data-slot=input-group-control]]:pr-1.5","has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col","has-[>[data-align=block-start]]:[&>[data-slot=input-group-control]]:pb-1.5","has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col","has-[>[data-align=block-end]]:[&>[data-slot=input-group-control]]:pt-1.5",e),...t})}const A4=Xc(["flex h-auto cursor-text items-center justify-center gap-1.5 select-none","text-[12px] font-medium text-muted-foreground","group-data-[disabled=true]/input-group:opacity-50"],{variants:{align:{"inline-start":"order-first pl-[9px] has-[>button]:-ml-1","inline-end":"order-last pr-[9px] has-[>button]:-mr-1","block-start":"order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-1.5","block-end":"order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-1.5"}},defaultVariants:{align:"inline-start"}});function Ii({className:e,align:t="inline-start",...a}){return s.jsx("div",{role:"group","data-slot":"input-group-addon","data-align":t,className:Ue(A4({align:t}),e),onClick:o=>{o.target.closest("button")||o.currentTarget.parentElement?.querySelector("input")?.focus()},...a})}const R4=Xc("flex items-center shadow-none",{variants:{size:{xs:"h-6 gap-1 rounded-xs px-1.5",sm:"h-8 gap-1.5 rounded-sm px-2.5","icon-xs":"size-6 rounded-xs p-0","icon-sm":"size-8 rounded-sm p-0"}},defaultVariants:{size:"xs"}});function O4({className:e,type:t="button",variant:a="ghost",size:o="xs",...c}){return s.jsx(ne,{type:t,"data-size":o,variant:a,className:Ue(R4({size:o}),e),...c})}function Pi({className:e,...t}){return s.jsx(Fe,{"data-slot":"input-group-control",className:Ue("flex-1 rounded-none border-0 bg-transparent shadow-none focus:border-0 focus:shadow-none",e),...t})}function M4(e){return yt(e.defaultTagName??"div",e,e)}const D4=Xc("inline-flex w-fit shrink-0 items-center justify-center gap-[5px] overflow-hidden whitespace-nowrap border font-semibold",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground",secondary:"border-transparent bg-secondary text-secondary-foreground",destructive:"border-destructive-bd bg-destructive-soft text-destructive",outline:"border-control-border bg-control text-subtle",ghost:"border-transparent bg-transparent text-muted-foreground",link:"border-transparent bg-transparent text-primary underline-offset-4 hover:underline",success:"border-success-bd bg-success-soft text-success",warning:"border-warning-bd bg-warning-soft text-warning",info:"border-info-bd bg-info-soft text-info",brand:"border-primary-bd bg-primary-soft text-primary-fg",cn:"border-cn-bd bg-cn-soft text-cn",intl:"border-intl-bd bg-intl-soft text-intl",sensitive:"border-sensitive-bd bg-sensitive-soft text-sensitive"},shape:{pill:"min-h-[21px] rounded-pill px-[9px] py-px text-[11.5px]",tag:"min-h-[19px] rounded-xs px-2 py-0 text-[11px]"}},defaultVariants:{variant:"default",shape:"pill"}});function ze({className:e,variant:t,shape:a,render:o,...c}){return M4({render:o,defaultTagName:"span",props:ta({"data-slot":"badge"},c,{className:Ue(D4({variant:t,shape:a}),e)})})}function my({className:e,...t}){return s.jsx("span",{className:Ue("size-1.5 flex-none rounded-full bg-current",e),...t})}function bo(e,t){if(typeof window>"u")return e;const a=window.wbI18n;return a?a.t(e,t)??e:e}function of({className:e,...t}){return s.jsx("svg",{"data-slot":"spinner",role:"status","aria-label":bo("加载中"),viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",className:Ue("size-4 animate-spin [animation-duration:0.7s]",e),...t,children:s.jsx("path",{d:"M21 12a9 9 0 1 1-6.219-8.56"})})}function Je({className:e,...t}){return s.jsx("label",{"data-slot":"label",className:Ue("flex items-center gap-[6px] text-[11.5px] text-muted-foreground",e),...t})}const L1={clipPath:"inset(50%)",overflow:"hidden",whiteSpace:"nowrap",border:0,padding:0,width:1,height:1,margin:-1},_i={...L1,position:"fixed",top:0,left:0},su={...L1,position:"absolute"},z1=x.createContext(void 0);function I4(){const e=x.useContext(z1);if(e===void 0)throw new Error(un(63));return e}const P4="data-checked",_4="data-unchecked",B1={...Ti,checked(e){return e?{[P4]:""}:{[_4]:""}}},L4=x.forwardRef(function(t,a){const{checked:o,className:c,defaultChecked:d,"aria-labelledby":f,form:p,id:h,inputRef:b,name:y,nativeButton:v=!1,onCheckedChange:j,readOnly:w=!1,required:S=!1,disabled:N=!1,render:k,uncheckedValue:A,value:P,style:R,...C}=t,{clearErrors:E}=Qc(),{state:D,setTouched:I,setDirty:O,validityData:_,setFilled:z,setFocused:H,validationMode:B,disabled:L,name:F,validation:$}=Na(),{labelId:X}=yl(),K=L||N,q=F??y,Q=x.useRef(null),G=sa(Q,b,$.inputRef),J=x.useRef(null),Y=ka(),re=io({id:h}),M=v?void 0:re,[U,Z]=Ka({controlled:o,default:!!d,name:"Switch",state:"checked"});tu(J,Y,U,void 0,!K,y),Me(()=>{z(U)},[U,z]),ia(U,()=>{E(q),O(U!==_.initialValue),$.change(U)});const{getButtonProps:ae,buttonRef:ce}=na({disabled:K,native:v}),W=Fv(f,X,Q,!v,M),ue={id:v?re:Y,role:"switch","aria-checked":U,"aria-readonly":w||void 0,"aria-required":S||void 0,"aria-labelledby":W,onFocus(){K||H(!0)},onBlur(){const te=Q.current;!te||K||(I(!0),H(!1),B==="onBlur"&&$.commit(te.checked))},onClick(te){if(w||K)return;te.preventDefault();const ke=Q.current;ke&&Yc(ke,te)}},ve={...$.getValidationProps(K),checked:U,disabled:K,form:p,id:M,name:q,required:S,style:q?su:_i,tabIndex:-1,type:"checkbox","aria-hidden":!0,ref:G,onChange(te){if(te.nativeEvent.defaultPrevented)return;if(w){te.preventDefault();return}const ke=te.currentTarget.checked,le=qe(Qn,te.nativeEvent);j?.(ke,le),!le.isCanceled&&Z(ke)},onClick(te){te.stopPropagation()},onFocus(){J.current?.focus()},...P!==void 0?{value:P}:mn},ee=x.useMemo(()=>({...D,checked:U,disabled:K,readOnly:w,required:S}),[D,U,K,w,S]),he=yt("span",t,{state:ee,ref:[a,J,ce],props:[ue,C,ae,te=>$.getValidationProps(K,te)],stateAttributesMapping:B1});return s.jsxs(z1.Provider,{value:ee,children:[he,!U&&q&&A!==void 0&&s.jsx("input",{type:"hidden",form:p,name:q,value:A,disabled:K}),s.jsx("input",{...ve,suppressHydrationWarning:!0})]})}),z4=x.forwardRef(function(t,a){const{render:o,className:c,style:d,...f}=t,p=I4();return yt("span",t,{state:p,ref:a,stateAttributesMapping:B1,props:f})});function ns({className:e,size:t="default",...a}){const o=t==="sm";return s.jsx(L4,{"data-slot":"switch",className:Ue("relative inline-flex flex-none cursor-pointer items-center rounded-pill border-0 bg-border-strong p-0","transition-colors duration-[180ms] ease-out","data-checked:bg-primary","focus-visible:shadow-focus focus-visible:outline-none","data-disabled:cursor-not-allowed data-disabled:opacity-50",o?"h-[14px] w-6":"h-[21px] w-9",e),...a,children:s.jsx(z4,{"data-slot":"switch-thumb",className:Ue("block rounded-full bg-primary-on shadow-1","transition-transform duration-[180ms] [transition-timing-function:cubic-bezier(.3,1.4,.6,1)]",o?"size-[10px] translate-x-0.5 data-checked:translate-x-[10px]":"size-[17px] translate-x-0.5 data-checked:translate-x-[15px]")})})}function B4(e){if(!e)return null;for(const t of e.elements){const a=t.tagName;if(a==="BUTTON"||a==="INPUT"){const o=t;if(o.type==="submit")return o}}return null}const H4="data-checked",U4="data-unchecked";function H1(e){return{checked(t){return e.indeterminate?{}:t?{[H4]:""}:{[U4]:""}},...Ti}}const V4=x.createContext(void 0);function F4(){return x.useContext(V4)}const U1=x.createContext(void 0);function $4(){const e=x.useContext(U1);if(e===void 0)throw new Error(un(14));return e}const q4="data-parent",G4=x.forwardRef(function(t,a){const{checked:o,className:c,defaultChecked:d=!1,"aria-labelledby":f,disabled:p=!1,form:h,id:b,indeterminate:y=!1,inputRef:v,name:j,onCheckedChange:w,parent:S=!1,readOnly:N=!1,render:k,required:A=!1,uncheckedValue:P,value:R,nativeButton:C=!1,style:E,...D}=t,{clearErrors:I}=Qc(),{disabled:O,name:_,setDirty:z,setFilled:H,setFocused:B,setTouched:L,state:F,validationMode:$,validityData:X,validation:K}=Na(),q=A1(),{labelId:Q,registerControlId:G,getDescriptionProps:J}=yl(),Y=F4(),re=Y?.allValues===void 0?void 0:Y.parent,M=re!==void 0,U=O||q.disabled||Y?.disabled||p,Z=_??j,ae=R??Z,ce=ka(),W=Y?.registerControlId!==G,ue=io({id:b||void 0,enabled:W}),ve=C?ue:ce;let ee={};M&&(S?ee=re.getParentProps():ae!==void 0&&(ee=re.getChildProps(ae)));const{checked:he=o,indeterminate:te=y,onCheckedChange:ke,...le}=ee,de=Y?.value,Se=x.useRef(null),{getButtonProps:Te,buttonRef:_e}=na({disabled:U,native:C}),Ae=Y?.validation??K,[oe,me]=Ka({controlled:ae!==void 0&&de!==void 0&&!S?de.includes(ae):he,default:d,name:"Checkbox",state:"checked"}),pe=M?!!he:oe,Ce=M&&te||y;tu(Se,ce,oe,void 0,!Y&&!U,j);const Ne=re?.registerChildId,be=x.useRef(null),De=Ae.registerInput,Ge=Y?ae:void 0,Ct=x.useCallback(it=>De(it,{controlRef:Se,value:Ge}),[De,Ge]),Tt=sa(v,be,S?void 0:Ct),Mt=Fv(f,Q,be,!C,ue);Me(()=>{be.current&&(be.current.indeterminate=Ce),Y||H(oe)},[oe,Ce,Y,H]),ia(oe,()=>{Y||(I(Z),z(oe!==X.initialValue),Ae.change(oe))});const ot=ta({checked:oe,disabled:U,form:h,name:S?void 0:Z,id:C?void 0:ue,required:A,ref:Tt,style:Z?su:_i,tabIndex:-1,type:"checkbox","aria-hidden":!0,onChange(it){if(it.nativeEvent.defaultPrevented)return;if(N){it.preventDefault();return}const $t=it.currentTarget.checked,Vn=qe(Qn,it.nativeEvent);if(w?.($t,Vn),!Vn.isCanceled&&(ke?.($t,Vn),!Vn.isCanceled&&(me($t),ae!==void 0&&Y!==void 0&&!S&&!M))){const rn=$t?[...Y.value,ae]:Y.value.filter(nt=>nt!==ae);Y.setValue(rn,Vn)}},onClick(it){it.stopPropagation()},onFocus(){Se.current?.focus()}},R!==void 0?{value:(Y?oe&&R:R)||""}:mn,J,it=>Ae.getValidationProps(U,it));x.useEffect(()=>{if(!re||ae===void 0)return;const it=re.disabledStatesRef.current;return it.set(ae,U),()=>{it.delete(ae)}},[re,U,ae]);const Kn=x.useMemo(()=>({...F,checked:pe,disabled:U,readOnly:N,required:A,indeterminate:Ce}),[F,pe,U,N,A,Ce]),ms=H1(Kn),Yn=yt("span",t,{state:Kn,ref:[_e,Se,a],props:[{id:ve,role:"checkbox","aria-checked":Ce?"mixed":pe,"aria-readonly":N||void 0,"aria-required":A||void 0,"aria-labelledby":Mt,[q4]:S?"":void 0,onFocus(){U||B(!0)},onBlur(){const it=be.current;it&&(L(!0),B(!1),$==="onBlur"&&Ae.commit(Y?de:it.checked))},onKeyDown(it){if(it.key!=="Enter"||(it.preventBaseUIHandler(),it.defaultPrevented))return;const $t=be.current?.form??null,Vn=it.currentTarget,rn=it.nativeEvent,nt=it.preventDefault,Dt=rn.preventDefault;let qt=!1;it.preventDefault=()=>{qt=!0,nt.call(it)},rn.preventDefault=()=>{qt=!0,Dt.call(rn)},Dt.call(rn),Cn(Vn).queueMicrotask(()=>{it.preventDefault=nt,rn.preventDefault=Dt,qt||B4($t)?.click()})},onClick(it){if(N||U)return;it.preventDefault();const $t=be.current;$t&&Yc($t,it)}},D,le,Te,J,it=>Ae.getValidationProps(U,it)],stateAttributesMapping:ms}),vs=Yn.props.id;return Me(()=>{if(!(!Ne||S||ae===void 0||vs===void 0))return Ne(ae,vs)},[Ne,S,ae,vs]),s.jsxs(U1.Provider,{value:Kn,children:[Yn,!oe&&!Y&&Z&&!S&&P!==void 0&&s.jsx("input",{type:"hidden",form:h,name:Z,value:P,disabled:U}),s.jsx("input",{...ot,suppressHydrationWarning:!0})]})}),K4=x.forwardRef(function(t,a){const{render:o,className:c,style:d,keepMounted:f=!1,...p}=t,h=$4(),b=h.checked||h.indeterminate,{mounted:y,transitionStatus:v,setMounted:j}=Oi(b),w=x.useRef(null),S={...h,transitionStatus:v};oa({batch:!0,enabled:!b,open:b,ref:w,onComplete(){b||j(!1)}});const k={...H1(h),...co},A=f||y,P=yt("span",t,{ref:[a,w],state:S,stateAttributesMapping:k,props:p});return A?P:null});function Pr({className:e,...t}){return s.jsx(G4,{"data-slot":"checkbox",className:Ue("group/checkbox relative inline-flex size-3.5 shrink-0 cursor-pointer items-center justify-center rounded-[3px] border border-control-border bg-control","outline-none transition-colors duration-150 ease-out","hover:border-control-border-hover","data-checked:border-primary data-checked:bg-primary","focus-visible:shadow-focus","data-disabled:cursor-not-allowed data-disabled:opacity-45",e),...t,children:s.jsx(K4,{"data-slot":"checkbox-indicator",className:"grid place-content-center text-primary-foreground data-unchecked:hidden",children:s.jsxs("svg",{viewBox:"0 0 12 12",className:"size-2.5","aria-hidden":"true",children:[s.jsx("path",{d:"M2 6h8",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",fill:"none",className:"hidden group-aria-[checked=indeterminate]/checkbox:block"}),s.jsx("path",{d:"M2.5 6.2 4.8 8.5 9.5 3.8",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",fill:"none",className:"group-aria-[checked=indeterminate]/checkbox:hidden"})]})})})}function hy(e){return Array.isArray(e)?e.map(t=>hy(t)).join(","):e==null?"":String(e)}const V1=new Map;function Y4(e,t){const a=JSON.stringify({locale:hy(e),options:t}),o=V1.get(a);if(o)return o;const c=new Intl.NumberFormat(e,t);return V1.set(a,c),c}function F1(e,t,a){return e==null?"":Y4(t,a).format(e)}function Li(e,t=Number.MIN_SAFE_INTEGER,a=Number.MAX_SAFE_INTEGER){return Math.max(t,Math.min(e,a))}function X4(e,t,a){return(e-t)*100/(a-t)}const $1=x.createContext(void 0);function q1(){const e=x.useContext($1);if(e===void 0)throw new Error(un(51));return e}const Q4="data-complete",Z4="data-indeterminate",W4="data-progressing",gy={status(e){return e==="progressing"?{[W4]:""}:e==="complete"?{[Q4]:""}:e==="indeterminate"?{[Z4]:""}:null}},J4=x.forwardRef(function(t,a){const{format:o,getAriaValueText:c,locale:d,max:f=100,min:p=0,value:h,render:b,className:y,children:v,style:j,...w}=t,[S,N]=x.useState();let k="indeterminate",A=null,P=null,R="",C="indeterminate progress";if(h!=null&&Number.isFinite(h)){const _=X4(h,p,f);A=Li(Number.isNaN(_)?0:_,0,100),P=Li(h,p,f),k=P===f?"complete":"progressing",R=o?F1(P,d,o):F1(A/100,d,{style:"percent"}),C=R}const E=x.useMemo(()=>({status:k}),[k]),D={"aria-labelledby":S,"aria-valuemax":f,"aria-valuemin":p,"aria-valuenow":P??void 0,"aria-valuetext":c?c(R,h):C,role:"progressbar",children:s.jsxs(x.Fragment,{children:[v,s.jsx("span",{role:"presentation",style:_i,children:"x"})]})},I=x.useMemo(()=>({formattedValue:R,percentageValue:A,setLabelId:N,state:E,value:h}),[R,A,N,E,h]),O=yt("div",t,{state:E,ref:a,props:[D,w],stateAttributesMapping:gy});return s.jsx($1.Provider,{value:I,children:O})}),eH=x.forwardRef(function(t,a){const{render:o,className:c,style:d,...f}=t,{state:p}=q1();return yt("div",t,{state:p,ref:a,props:f,stateAttributesMapping:gy})}),tH=x.forwardRef(function(t,a){const{render:o,className:c,style:d,...f}=t,{percentageValue:p,state:h}=q1(),b=p==null?{}:{insetInlineStart:0,height:"inherit",width:`${p}%`};return yt("div",t,{state:h,ref:a,props:[{style:b},f],stateAttributesMapping:gy})});function cf({className:e,children:t,value:a,...o}){return s.jsxs(J4,{value:a,"data-slot":"progress",className:Ue("flex w-full flex-wrap items-center gap-3",e),...o,children:[t,s.jsx(nH,{children:s.jsx(sH,{})})]})}function nH({className:e,...t}){return s.jsx(eH,{"data-slot":"progress-track",className:Ue("relative flex h-1.5 w-full items-center overflow-x-hidden overflow-y-hidden rounded-pill bg-surface-3",e),...t})}function sH({className:e,...t}){return s.jsx(tH,{"data-slot":"progress-indicator",className:Ue("h-full rounded-[inherit] bg-primary transition-[width] duration-300 ease-out",e),...t})}const xy=[];let by;function rH(){return by}function aH(e){xy.push(e)}function uh(e){const t=(a,o)=>{const c=Ps(lH).current;let d;try{by=c;for(const f of xy)f.before(c);d=e(a,o);for(const f of xy)f.after(c);c.didInitialize=!0}finally{by=void 0}return d};return t.displayName=e.displayName||e.name,t}function G1(e){return x.forwardRef(uh(e))}function lH(){return{didInitialize:!1}}const K1=x.createContext(void 0);function uf(e){const t=x.useContext(K1);if(t===void 0&&!e)throw new Error(un(72));return t}function oH(e,t){return t!=null&&!fo(t)?0:typeof e=="function"?e():e}function zi(e,t,a){const o=oH(e,a);return typeof o=="number"?o:o?.[t]}function Y1(e){return typeof e=="function"?e():e}function X1(e,t){return t||e==="click"||e==="mousedown"}function iH(e){return e?.includes("mouse")&&e!=="mousedown"}const Q1=x.createContext({hasProvider:!1,timeoutMs:0,delayRef:{current:0},initialDelayRef:{current:0},timeout:new la,currentIdRef:{current:null},currentContextRef:{current:null}});function cH(e,t){e.current=t.current}function uH(e){const{children:t,delay:a,timeoutMs:o=0}=e,c=x.useRef(a),d=x.useRef(a),f=x.useRef(null),p=x.useRef(null),h=er();return Me(()=>{if(d.current=a,!f.current){c.current=a;return}c.current={open:zi(c.current,"open"),close:zi(a,"close")}},[a,f,c,d]),s.jsx(Q1.Provider,{value:x.useMemo(()=>({hasProvider:!0,delayRef:c,initialDelayRef:d,currentIdRef:f,timeoutMs:o,currentContextRef:p,timeout:h}),[o,h]),children:t})}function dH(e,t={open:!1}){const{open:a}=t,o="rootStore"in e?e.rootStore:e,c=o.useState("floatingId"),d=x.useContext(Q1),{currentIdRef:f,delayRef:p,timeoutMs:h,initialDelayRef:b,currentContextRef:y,hasProvider:v,timeout:j}=d,[w,S]=x.useState(!1),N=x.useRef(a);return Me(()=>{N.current=a},[a]),Me(()=>{function k(){y.current?.setIsInstantPhase(!1),f.current=null,y.current=null,p.current=b.current,j.clear()}if(f.current&&!a&&f.current===c){if(S(!1),h){const A=c;return j.start(h,()=>{o.select("open")||f.current&&f.current!==A||k()}),()=>{(N.current||f.current!==A)&&j.clear()}}k()}},[a,c,f,p,h,b,y,j,o]),Me(()=>{if(!a)return;const k=y.current,A=f.current;j.clear(),y.current={onOpenChange:o.setOpen,setIsInstantPhase:S},f.current=c,p.current={open:0,close:zi(b.current,"close")},A!==null&&A!==c?(S(!0),k?.setIsInstantPhase(!0),k?.onOpenChange(!1,qe(Qn))):(S(!1),k?.setIsInstantPhase(!1))},[a,c,o,f,p,b,y,j]),Me(()=>()=>{if(f.current===c){if(y.current=null,!N.current)return;f.current=null,cH(p,b),j.clear()}},[y,f,p,c,b,j]),x.useMemo(()=>({activeIdRef:f,hasProvider:v,delayRef:p,isInstantPhase:w}),[f,v,p,w])}function St(e,t,a,o){return e.addEventListener(t,a,o),()=>{e.removeEventListener(t,a,o)}}function Xa(...e){return()=>{for(let t=0;t{t.current=t.next}};return t}const ru=x.forwardRef(function(t,a){const[o,c]=x.useState();Me(()=>{_B&&jl&&c("button")},[]);const d={tabIndex:0,role:o};return s.jsx("span",{...t,ref:a,style:_i,"aria-hidden":o?void 0:!0,...d,"data-base-ui-focus-guard":""})});function df(e){return`data-base-ui-${e}`}let dh=0;function fh(e,t={}){const{preventScroll:a=!1,sync:o=!1,shouldFocus:c}=t;cancelAnimationFrame(dh);function d(){c&&!c()||e?.focus({preventScroll:a})}if(o)return d(),Kt;const f=requestAnimationFrame(d);return dh=f,()=>{dh===f&&(cancelAnimationFrame(f),dh=0)}}const vy={inert:new WeakMap,"aria-hidden":new WeakMap},Z1="data-base-ui-inert",yy={inert:new WeakSet,"aria-hidden":new WeakSet};let ff=new WeakMap,jy=0;function pH(e){return yy[e]}function W1(e){return e?Gc(e)?e.host:W1(e.parentNode):null}const J1=(e,t)=>t.map(a=>{if(e.contains(a))return a;const o=W1(a);return e.contains(o)?o:null}).filter(a=>a!=null),eT=e=>{const t=new Set;return e.forEach(a=>{let o=a;for(;o&&!t.has(o);)t.add(o),o=o.parentNode}),t},tT=(e,t,a)=>{const o=[],c=d=>{!d||a.has(d)||Array.from(d.children).forEach(f=>{Fs(f)!=="script"&&(t.has(f)?c(f):o.push(f))})};return c(e),o};function mH(e,t,a,o,{mark:c=!0}){let d=null;o?d="inert":a&&(d="aria-hidden");let f=null,p=null;const h=J1(t,e),b=c?tT(t,eT(h),new Set(h)):[],y=[],v=[];if(d){const j=vy[d],w=pH(d);p=w,f=j;const S=J1(t,Array.from(t.querySelectorAll("[aria-live]"))),N=h.concat(S);tT(t,eT(N),new Set(N)).forEach(A=>{const P=A.getAttribute(d),R=P!==null&&P!=="false",C=(j.get(A)||0)+1;j.set(A,C),y.push(A),C===1&&R&&w.add(A),R||A.setAttribute(d,d==="inert"?"":"true")})}return c&&b.forEach(j=>{const w=(ff.get(j)||0)+1;ff.set(j,w),v.push(j),w===1&&j.setAttribute(Z1,"")}),jy+=1,()=>{f&&y.forEach(j=>{const S=(f.get(j)||0)-1;f.set(j,S),S||(!p?.has(j)&&d&&j.removeAttribute(d),p?.delete(j))}),c&&v.forEach(j=>{const w=(ff.get(j)||0)-1;ff.set(j,w),w||j.removeAttribute(Z1)}),jy-=1,jy||(vy.inert=new WeakMap,vy["aria-hidden"]=new WeakMap,yy.inert=new WeakSet,yy["aria-hidden"]=new WeakSet,ff=new WeakMap)}}function nT(e,t={}){const{ariaHidden:a=!1,inert:o=!1,mark:c=!0}=t,d=Gt(e[0]).body;return mH(e,d,a,o,{mark:c})}const hH=500,gH={style:{transition:"none"}},sT="data-base-ui-click-trigger",rT={fallbackAxisSide:"none"},aT={fallbackAxisSide:"end"},xH={clipPath:"inset(50%)",position:"fixed",top:0,left:0},lT=x.createContext(null),oT=()=>x.useContext(lT),bH=df("portal");function iT(e={}){const{ref:t,container:a,componentProps:o=mn,elementProps:c}=e,d=Jd(),p=oT()?.portalNode,[h,b]=x.useState(null),[y,v]=x.useState(null),j=Ie(k=>{k!==null&&v(k)}),w=x.useRef(null);Me(()=>{if(a===null){w.current&&(w.current=null,v(null),b(null));return}const k=(a&&(Tv(a)?a:a.current))??p??document.body;if(k==null){w.current&&(w.current=null,v(null),b(null));return}w.current!==k&&(w.current=k,v(null),b(k))},[a,p]);const S=yt("div",o,{ref:[t,j],props:[{id:d,[bH]:""},c]}),N=h&&S?Ts.createPortal(S,h):null;return{node:y,nodeId:x.isValidElement(S)?S.props.id:void 0,subtree:N}}const ph=x.forwardRef(function(t,a){const{render:o,className:c,style:d,children:f,container:p,portalOwnerRole:h,...b}=t,{node:y,nodeId:v,subtree:j}=iT({container:p,ref:a,componentProps:t,elementProps:b}),w=x.useRef(null),S=x.useRef(null),N=x.useRef(null),k=x.useRef(null),[A,P]=x.useState(null),R=x.useRef(!1),C=A?.modal,E=A?.open,D=!!A&&!A.modal&&A.open&&!!y;x.useEffect(()=>{if(!y||C)return;function O(_){y&&_.relatedTarget&&Jc(_)&&(_.type==="focusin"?R.current&&(E1(y),R.current=!1):(x4(y),R.current=!0))}return Xa(St(y,"focusin",O,!0),St(y,"focusout",O,!0))},[y,C]),Me(()=>{!y||E!==!0||!R.current||(E1(y),R.current=!1)},[E,y]);const I=x.useMemo(()=>({beforeOutsideRef:w,afterOutsideRef:S,beforeInsideRef:N,afterInsideRef:k,portalNode:y,setFocusManagerState:P}),[y]);return s.jsxs(x.Fragment,{children:[j,s.jsxs(lT.Provider,{value:I,children:[D&&y&&s.jsx(ru,{"data-type":"outside",ref:w,onFocus:O=>{if(Jc(O,y))N.current?.focus();else{const _=A?A.domReference:null;C1(_)?.focus()}}}),D&&y&&s.jsx("span",{role:h,"aria-owns":v,style:xH}),y&&Ts.createPortal(f,y),D&&y&&s.jsx(ru,{"data-type":"outside",ref:S,onFocus:O=>{if(Jc(O,y))k.current?.focus();else{const _=A?A.domReference:null;iy(_)?.focus(),A?.closeOnFocusOut&&A?.onOpenChange(!1,qe(xo,O.nativeEvent))}}})]})]})});function cT(){const e=new Map;return{emit(t,a){e.get(t)?.forEach(o=>o(a))},on(t,a){e.has(t)||e.set(t,new Set),e.get(t).add(a)},off(t,a){e.get(t)?.delete(a)}}}class vH{constructor(){cn(this,"nodesRef",{current:[]});cn(this,"events",cT())}addNode(t){this.nodesRef.current.push(t)}removeNode(t){const a=this.nodesRef.current.findIndex(o=>o===t);a!==-1&&this.nodesRef.current.splice(a,1)}}const uT=x.createContext(null),dT=x.createContext(null),au=()=>x.useContext(uT)?.id||null,Bi=e=>{const t=x.useContext(dT);return e??t};function yH(e){const t=Jd(),a=Bi(e),o=au();return Me(()=>{if(!t)return;const c={id:t,parentId:o};return a?.addNode(c),()=>{a?.removeNode(c)}},[a,t,o]),t}function jH(e){const{children:t,id:a}=e,o=au();return s.jsx(uT.Provider,{value:x.useMemo(()=>({id:a,parentId:o}),[a,o]),children:t})}function wH(e){const{children:t,externalTree:a}=e,o=Ps(()=>a??new vH).current;return s.jsx(dT.Provider,{value:o,children:t})}function SH(e,t){const a=Cn(fs(e));return e instanceof a.KeyboardEvent?"keyboard":e instanceof a.FocusEvent?t||"keyboard":"pointerType"in e?e.pointerType||"keyboard":"touches"in e?"touch":e instanceof a.MouseEvent?t||(e.detail===0?"keyboard":"mouse"):""}const fT=20;let vo=[];function wy(){vo=vo.filter(e=>e.deref()?.isConnected)}function pT(e){wy(),e&&Fs(e)!=="body"&&(vo.push(new WeakRef(e)),vo.length>fT&&(vo=vo.slice(-fT)))}function mT(){return wy(),vo[vo.length-1]?.deref()}function NH(e){return e?oy(e)?e:sf(e)[0]||e:null}function hT(e){if(e.hasAttribute("tabindex")&&!e.hasAttribute("data-tabindex")||!e.getAttribute("role")?.includes("dialog"))return;const a=N1(e).filter(c=>{const d=c.getAttribute("data-tabindex")||"";return oy(c)||c.hasAttribute("data-tabindex")&&!d.startsWith("-")}),o=e.getAttribute("tabindex");a.length===0?o!=="0"&&(e.setAttribute("tabindex","0"),e.setAttribute("data-tabindex","0")):(o!=="-1"||e.hasAttribute("data-tabindex")&&e.getAttribute("data-tabindex")!=="-1")&&(e.setAttribute("tabindex","-1"),e.setAttribute("data-tabindex","-1"))}function mh(e){const{context:t,children:a,disabled:o=!1,initialFocus:c=!0,returnFocus:d=!0,restoreFocus:f=!1,modal:p=!0,closeOnFocusOut:h=!0,openInteractionType:b="",nextFocusableElement:y,previousFocusableElement:v,beforeContentFocusGuardRef:j,externalTree:w,getInsideElements:S}=e,N="rootStore"in t?t.rootStore:t,k=N.useState("open"),A=N.useState("domReferenceElement"),P=N.useState("floatingElement"),{events:R,dataRef:C}=N.context,E=Ie(()=>C.current.floatingContext?.nodeId),D=c===!1,I=Wv(A)&&D,O=Zn(c),_=Zn(d),z=Zn(b),H=Zn(k),B=Bi(w),L=oT(),F=x.useRef(!1),$=x.useRef(!1),X=x.useRef(!1),K=x.useRef(null),q=x.useRef(""),Q=x.useRef(""),G=x.useRef(null),J=x.useRef(null),Y=sa(G,j,L?.beforeInsideRef),re=sa(J,L?.afterInsideRef),M=er(),U=er(),Z=eu(),ae=L!=null,ce=Wm(P),W=Ie((ee=ce)=>ee?sf(ee):[]),ue=Ie(()=>S?.().filter(ee=>ee!=null)??[]);x.useEffect(()=>{if(o||!p)return;function ee(te){te.key==="Tab"&&Ze(ce,ir(Gt(ce)))&&W().length===0&&!I&&Cs(te)}const he=Gt(ce);return St(he,"keydown",ee)},[o,ce,p,I,W]),x.useEffect(()=>{if(o||!k)return;const ee=Gt(ce);function he(){X.current=!1}function te(le){const de=fs(le),Se=ue(),Te=Ze(P,de)||Ze(A,de)||Ze(L?.portalNode,de)||Se.some(_e=>_e===de||Ze(_e,de));X.current=!Te,Q.current=le.pointerType||"keyboard",de?.closest(`[${sT}]`)&&($.current=!0,U.start(0,()=>{$.current=!1}))}function ke(){Q.current="keyboard"}return Xa(St(ee,"pointerdown",te,!0),St(ee,"pointerup",he,!0),St(ee,"pointercancel",he,!0),St(ee,"keydown",ke,!0),he)},[o,P,A,ce,k,L,U,ue]),x.useEffect(()=>{if(o||!h)return;const ee=Gt(ce);function he(){$.current=!0,U.start(0,()=>{$.current=!1})}function te(Se){const Te=fs(Se);oy(Te)&&(K.current=Te)}function ke(Se){const Te=Se.relatedTarget,_e=Se.currentTarget,Ae=fs(Se);p&&Te==null&&Ae!=null&&Ze(P,Ae)&&pT(Ae),queueMicrotask(()=>{const oe=E(),me=N.context.triggerElements,pe=ue(),Ce=Te?.hasAttribute(df("focus-guard"))&&[G.current,J.current,L?.beforeInsideRef.current,L?.afterInsideRef.current,L?.beforeOutsideRef.current,L?.afterOutsideRef.current,kl(v),kl(y)].includes(Te),Ne=!(Ze(A,Te)||Ze(P,Te)||Ze(Te,P)||Ze(L?.portalNode,Te)||pe.some(be=>be===Te||Ze(be,Te))||me.hasMatchingElement(be=>Ze(be,Te))||Ce||B&&(uo(B.nodesRef.current,oe).find(be=>Ze(be.context?.elements.floating,Te)||Ze(be.context?.elements.domReference,Te))||p1(B.nodesRef.current,oe).find(be=>[be.context?.elements.floating,Wm(be.context?.elements.floating)].includes(Te)||be.context?.elements.domReference===Te)));if(_e===A&&ce&&hT(ce),f&&_e!==A&&!rh(Ae)&&ir(ee)===ee.body){if(pn(ce)&&(ce.focus(),f==="popup")){Z.request(()=>{ce.focus()});return}const be=W(),De=K.current,Ge=(De&&be.includes(De)?De:null)||be[be.length-1]||ce;pn(Ge)&&Ge.focus()}if(C.current.insideReactTree){C.current.insideReactTree=!1;return}(I||!p)&&Te&&Ne&&!$.current&&(I||Te!==mT())&&(F.current=!0,N.setOpen(!1,qe(xo,Se)))})}function le(){X.current||(C.current.insideReactTree=!0,M.start(0,()=>{C.current.insideReactTree=!1}))}const de=pn(A)?A:null;if(!(!P&&!de))return Xa(de&&St(de,"focusout",ke),de&&St(de,"pointerdown",he),P&&St(P,"focusin",te),P&&St(P,"focusout",ke),P&&L&&St(P,"focusout",le,!0))},[o,A,P,ce,p,B,L,N,h,f,W,I,E,C,M,U,Z,y,v,ue]),x.useEffect(()=>{if(o||!P||!k)return;const ee=Array.from(L?.portalNode?.querySelectorAll(`[${df("portal")}]`)||[]),te=(B?p1(B.nodesRef.current,E()):[]).find(_e=>Wv(_e.context?.elements.domReference||null))?.context?.elements.domReference,le=[...[P,...ee,G.current,J.current,L?.beforeOutsideRef.current,L?.afterOutsideRef.current,...ue()],te,kl(v),kl(y),I?A:null].filter(_e=>_e!=null),de=nT(le,{ariaHidden:p||I,mark:!1}),Se=[P,...ee].filter(_e=>_e!=null),Te=nT(Se);return()=>{Te(),de()}},[k,o,A,P,p,L,I,B,E,y,v,ue]),Me(()=>{if(!k||o||!pn(ce))return;q.current="",Q.current="";const ee=Gt(ce),he=ir(ee);queueMicrotask(()=>{const te=O.current,ke=typeof te=="function"?te(z.current||""):te;if(ke===void 0||ke===!1||Ze(ce,he))return;let de=null;const Se=()=>(de==null&&(de=W(ce)),de[0]||ce);let Te;ke===!0||ke===null?Te=Se():Te=kl(ke),Te=Te||Se();const _e=Ze(ce,ir(ee));fh(Te,{preventScroll:Te===ce,shouldFocus(){if(!H.current)return!1;if(_e)return!0;const Ae=ir(ee);return!(Ae!==Te&&Ze(ce,Ae))}})})},[o,k,ce,W,O,z,H]),Me(()=>{if(o||!ce)return;const ee=Gt(ce),he=ir(ee),te=z.current==null;pT(he);function ke(de){if(de.open||(q.current=SH(de.nativeEvent,Q.current)),de.reason===qs&&de.nativeEvent.type==="mouseleave"&&(F.current=!0),de.reason===ch)if(de.nested)F.current=!1;else if(Jm(de.nativeEvent)||Jv(de.nativeEvent))F.current=!1;else{let Se=!1;Gt(ce).createElement("div").focus({get preventScroll(){return Se=!0,!1}}),Se?F.current=!1:F.current=!0}}R.on("openchange",ke);function le(de){const Se=_.current;let Te=typeof Se=="function"?Se(de):Se;if(Te===void 0||Te===!1)return null;Te===null&&(Te=!0);const _e=A?.isConnected?A:null,Ae=he?.isConnected&&Fs(he)!=="body"?he:null;let oe=te?Ae||_e:_e||Ae;return oe||(oe=mT()||null),typeof Te=="boolean"?oe:kl(Te)||oe||null}return()=>{R.off("openchange",ke);const de=ir(ee),Se=ue(),Te=Ze(P,de)||Se.some(me=>me===de||Ze(me,de))||B&&uo(B.nodesRef.current,E(),!1).some(me=>Ze(me.context?.elements.floating,de)),_e=_.current,Ae=q.current,oe=le(Ae);queueMicrotask(()=>{const me=NH(oe),pe=typeof _e!="boolean";if(_e&&!F.current&&pn(me)&&(!(!pe&&me!==de&&de!==ee.body)||Te)){const Ce={preventScroll:!0};Ae==="keyboard"&&(Ce.focusVisible=!0),me.focus(Ce)}F.current=!1})}},[o,P,ce,_,z,R,B,A,E,ue]),Me(()=>{if(!jl||k||!P)return;const ee=ir(Gt(P));!pn(ee)||!Zm(ee)||Ze(P,ee)&&ee.blur()},[k,P]),Me(()=>{if(!(o||!L))return L.setFocusManagerState({modal:p,closeOnFocusOut:h,open:k,onOpenChange:N.setOpen,domReference:A}),()=>{L.setFocusManagerState(null)}},[o,L,p,k,N,h,A]),Me(()=>{if(!(o||!ce))return hT(ce),()=>{queueMicrotask(wy)}},[o,ce]);const ve=!o&&(p?!I:!0)&&(ae||p);return s.jsxs(x.Fragment,{children:[ve&&s.jsx(ru,{"data-type":"inside",ref:Y,onFocus:ee=>{if(p){const he=W();fh(he[he.length-1])}else L?.portalNode&&(F.current=!1,Jc(ee,L.portalNode)?iy(A)?.focus():kl(v??L.beforeOutsideRef)?.focus())}}),a,ve&&s.jsx(ru,{"data-type":"inside",ref:re,onFocus:ee=>{p?fh(W()[0]):L?.portalNode&&(h&&(F.current=!0),Jc(ee,L.portalNode)?C1(A)?.focus():kl(y??L.afterOutsideRef)?.focus())}})]})}function hh(e,t={}){const{enabled:a=!0,event:o="click",toggle:c=!0,ignoreMouse:d=!1,stickIfOpen:f=!0,touchOpenDelay:p=0,reason:h=go}=t,b="rootStore"in e?e.rootStore:e,y=b.context.dataRef,v=x.useRef(void 0),j=eu(),w=er(),S=x.useMemo(()=>{function N(A,P,R,C){const E=qe(h,P,R);A&&C==="touch"&&p>0?w.start(p,()=>{b.setOpen(!0,E)}):b.setOpen(A,E)}function k(A,P,R){const C=y.current.openEvent,E=b.select("domReferenceElement")!==P;return A&&E||!A||!c?!0:C&&f?!R(C.type):!1}return{onPointerDown(A){v.current=fo(A.pointerType,!0)&&Jv(A.nativeEvent)?"virtual":A.pointerType},onMouseDown(A){const P=v.current,R=A.nativeEvent,C=b.select("open");if(A.button!==0||o==="click"||fo(P,!0)&&d)return;const E=k(C,A.currentTarget,O=>O==="click"||O==="mousedown"),D=fs(R);if(Zm(D)){N(E,R,D,P);return}const I=A.currentTarget;j.request(()=>{N(E,R,I,P)})},onClick(A){if(o==="mousedown-only")return;const P=v.current;if(o==="mousedown"&&P){v.current=void 0;return}if(fo(P,!0)&&d)return;const R=b.select("open"),C=k(R,A.currentTarget,E=>E==="click"||E==="mousedown"||E==="keydown"||E==="keyup");N(C,A.nativeEvent,A.currentTarget,P)},onKeyDown(){v.current=void 0}}},[y,o,d,h,b,f,c,j,w,p]);return x.useMemo(()=>a?{reference:S}:mn,[a,S])}function kH(e,t){let a=null,o=null,c=!1;return{contextElement:e||void 0,getBoundingClientRect(){const d=e?.getBoundingClientRect()||{width:0,height:0,x:0,y:0},f=t.axis==="x"||t.axis==="both",p=t.axis==="y"||t.axis==="both",h=["mouseenter","mousemove"].includes(t.dataRef.current.openEvent?.type||"")&&t.pointerType!=="touch";let b=d.width,y=d.height,v=d.x,j=d.y;return a==null&&t.x&&f&&(a=d.x-t.x),o==null&&t.y&&p&&(o=d.y-t.y),v-=a||0,j-=o||0,b=0,y=0,!c||h?(b=t.axis==="y"?d.width:0,y=t.axis==="x"?d.height:0,v=f&&t.x!=null?t.x:v,j=p&&t.y!=null?t.y:j):c&&!h&&(y=t.axis==="x"?d.height:y,b=t.axis==="y"?d.width:b),c=!0,{width:b,height:y,x:v,y:j,top:j,right:v+b,bottom:j+y,left:v}}}}function gT(e){return e!=null&&e.clientX!=null}function CH(e,t={}){const{enabled:a=!0,axis:o="both"}=t,c="rootStore"in e?e.rootStore:e,d=c.useState("open"),f=c.useState("floatingElement"),p=c.useState("domReferenceElement"),h=c.context.dataRef,b=x.useRef(!1),y=x.useRef(null),[v,j]=x.useState(),[w,S]=x.useState([]),N=Ie(C=>{c.set("positionReference",C)}),k=Ie((C,E,D)=>{b.current||h.current.openEvent&&!gT(h.current.openEvent)||c.set("positionReference",kH(D??p,{x:C,y:E,axis:o,dataRef:h,pointerType:v}))}),A=Ie(C=>{d?y.current||(k(C.clientX,C.clientY,C.currentTarget),S([])):k(C.clientX,C.clientY,C.currentTarget)}),P=fo(v)?f:d;x.useEffect(()=>{if(!a){N(p);return}if(!P)return;function C(){y.current?.(),y.current=null}const E=Cn(f);function D(I){const O=fs(I);Ze(f,O)?C():k(I.clientX,I.clientY)}return!h.current.openEvent||gT(h.current.openEvent)?y.current=St(E,"mousemove",D):N(p),C},[P,a,f,h,p,c,k,N,w]),x.useEffect(()=>()=>{c.set("positionReference",null)},[c]),x.useEffect(()=>{a&&!f&&(b.current=!1)},[a,f]),x.useEffect(()=>{!a&&d&&(b.current=!0)},[a,d]);const R=x.useMemo(()=>{function C(E){j(E.pointerType)}return{onPointerDown:C,onPointerEnter:C,onMouseMove:A,onMouseEnter:A}},[A]);return x.useMemo(()=>a?{reference:R,trigger:R}:{},[a,R])}function TH(){return!1}function EH(e){return{escapeKey:typeof e=="boolean"?e:e?.escapeKey??!1,outsidePress:typeof e=="boolean"?e:e?.outsidePress??!0}}function pf(e,t={}){const{enabled:a=!0,escapeKey:o=!0,outsidePress:c=!0,outsidePressEvent:d="sloppy",referencePress:f=TH,bubbles:p,externalTree:h}=t,b="rootStore"in e?e.rootStore:e,y=b.useState("open"),v=b.useState("floatingElement"),{dataRef:j,events:w}=b.context,S=Bi(h),N=Ie(typeof c=="function"?c:()=>!1),k=typeof c=="function"?N:c,A=k!==!1,P=Ie(()=>d),{escapeKey:R,outsidePress:C}=EH(p),E=x.useRef(!1),D=x.useRef(!1),I=x.useRef(!1),O=x.useRef(!1),_=x.useRef(!1),z=x.useRef(""),H=x.useRef(null),B=er(),L=er(),F=Ie(()=>{L.clear(),j.current.insideReactTree=!1}),$=Ie(M=>{const U=j.current.floatingContext?.nodeId;return(S?uo(S.nodesRef.current,U):[]).some(ae=>ae.context?.open&&!ae.context.dataRef.current[M])}),X=Ie(M=>Zv(M,b.select("floatingElement"))||Zv(M,b.select("domReferenceElement"))),K=Ie(M=>{f()&&b.setOpen(!1,qe(go,M.nativeEvent))}),q=Ie(M=>{if(!y||!a||!o||M.key!=="Escape"||_.current||!R&&$("__escapeKeyBubbles"))return;const U=WB(M)?M.nativeEvent:M,Z=qe(nu,U);b.setOpen(!1,Z),Z.isCanceled||M.preventDefault(),!R&&!Z.isPropagationAllowed&&M.stopPropagation()}),Q=Ie(()=>{j.current.insideReactTree=!0,L.start(0,F)}),G=Ie(M=>{if(!y||!a||M.button!==0)return;const U=fs(M.nativeEvent);Ze(b.select("floatingElement"),U)&&(E.current||(E.current=!0,D.current=!1))}),J=Ie(M=>{!y||!a||(M.defaultPrevented||M.nativeEvent.defaultPrevented)&&E.current&&(D.current=!0)});x.useEffect(()=>{function M(U){U.open||(O.current=!1)}return w.on("openchange",M),()=>{w.off("openchange",M)}},[w]),x.useEffect(()=>{if(!y||!a)return y||(O.current=!1),F;j.current.__escapeKeyBubbles=R,j.current.__outsidePressBubbles=C;const M=new la,U=new la,Z=Gt(v);function ae(){M.clear(),_.current=!0}function ce(){M.start(jl?5:0,()=>{_.current=!1})}function W(){I.current=!0,U.start(0,()=>{I.current=!1})}function ue(){E.current=!1,D.current=!1}function ve(){const Ne=z.current,be=Ne==="pen"||!Ne?"mouse":Ne,De=P(),Ge=typeof De=="function"?De():De;return typeof Ge=="string"?Ge:Ge[be]}function ee(Ne){const be=ve();return be==="intentional"&&Ne.type!=="click"||be==="sloppy"&&Ne.type==="click"}function he(Ne){const be=j.current.floatingContext?.nodeId,De=S&&uo(S.nodesRef.current,be).some(Ge=>Zv(Ne,Ge.context?.elements.floating));return X(Ne)||De}function te(Ne){if(ee(Ne)){Ne.type!=="click"&&!X(Ne)&&(U.clear(),I.current=!1),F();return}if(j.current.insideReactTree){F();return}const be=fs(Ne),De=`[${df("inert")}]`,Ge=Rt(be)?be.getRootNode():null,Ct=Array.from((Gc(Ge)?Ge:Gt(b.select("floatingElement"))).querySelectorAll(De)),Tt=b.context.triggerElements;if(be&&(Tt.hasElement(be)||Tt.hasMatchingElement(ot=>Ze(ot,be))))return;let Mt=Rt(be)?be:null;for(;Mt&&!ro(Mt);){const ot=ao(Mt);if(ro(ot)||!Rt(ot))break;Mt=ot}if(!(Ct.length&&Rt(be)&&!XB(be)&&!Ze(be,b.select("floatingElement"))&&Ct.every(ot=>!Ze(Mt,ot)))){if(pn(be)&&!("touches"in Ne)){const ot=ro(be),Kn=yr(be),ms=/auto|scroll/,Yn=ot||ms.test(Kn.overflowX),vs=ot||ms.test(Kn.overflowY),it=Yn&&be.clientWidth>0&&be.scrollWidth>be.clientWidth,$t=vs&&be.clientHeight>0&&be.scrollHeight>be.clientHeight,Vn=Kn.direction==="rtl",rn=$t&&(Vn?Ne.offsetX<=be.offsetWidth-be.clientWidth:Ne.offsetX>be.clientWidth),nt=it&&Ne.offsetY>be.clientHeight;if(rn||nt)return}if(!he(Ne)){if(ve()==="intentional"){if(Ne.detail!==0&&!Jm(Ne)&&!O.current)return;if(I.current){U.clear(),I.current=!1;return}}typeof k=="function"&&!k(Ne)||$("__outsidePressBubbles")||(b.setOpen(!1,qe(ch,Ne)),F())}}}function ke(Ne){ve()!=="sloppy"||Ne.pointerType==="touch"||!b.select("open")||!a||X(Ne)||te(Ne)}function le(Ne){if(ve()!=="sloppy"||!b.select("open")||!a||X(Ne))return;const be=Ne.touches[0];be&&(H.current={startTime:Date.now(),startX:be.clientX,startY:be.clientY,dismissOnTouchEnd:!1,dismissOnMouseDown:!0},B.start(1e3,()=>{H.current&&(H.current.dismissOnTouchEnd=!1,H.current.dismissOnMouseDown=!1)}))}function de(Ne,be){const De=fs(Ne);if(!De)return;const Ge=St(De,Ne.type,()=>{be(Ne),Ge()})}function Se(Ne){z.current="touch",de(Ne,le)}function Te(Ne){B.clear(),Ne.type==="pointerdown"&&(Ne.button===0&&(O.current=!0),z.current=Ne.pointerType),!(Ne.type==="mousedown"&&H.current&&!H.current.dismissOnMouseDown)&&de(Ne,be=>{be.type==="pointerdown"?ke(be):te(be)})}function _e(Ne){if(Ne.type==="pointercancel"&&(O.current=!1),!E.current)return;const be=D.current;if(ue(),ve()==="intentional"){if(Ne.type==="pointercancel"){be&&W();return}if(!he(Ne)){if(be){W();return}typeof k=="function"&&!k(Ne)||(U.clear(),I.current=!0,F())}}}function Ae(Ne){if(ve()!=="sloppy"||!H.current||X(Ne))return;const be=Ne.touches[0];if(!be)return;const De=Math.abs(be.clientX-H.current.startX),Ge=Math.abs(be.clientY-H.current.startY),Ct=Math.sqrt(De*De+Ge*Ge);Ct>5&&(H.current.dismissOnTouchEnd=!0),Ct>10&&(te(Ne),B.clear(),H.current=null)}function oe(Ne){de(Ne,Ae)}function me(Ne){ve()!=="sloppy"||!H.current||X(Ne)||(H.current.dismissOnTouchEnd&&te(Ne),B.clear(),H.current=null)}function pe(Ne){de(Ne,me)}const Ce=Xa(o&&Xa(St(Z,"keydown",q),St(Z,"compositionstart",ae),St(Z,"compositionend",ce)),A&&Xa(St(Z,"click",Te,!0),St(Z,"pointerdown",Te,!0),St(Z,"pointerup",_e,!0),St(Z,"pointercancel",_e,!0),St(Z,"mousedown",Te,!0),St(Z,"mouseup",_e,!0),St(Z,"touchstart",Se,{capture:!0,passive:!0}),St(Z,"touchmove",oe,{capture:!0,passive:!0}),St(Z,"touchend",pe,{capture:!0,passive:!0})));return()=>{Ce(),M.clear(),U.clear(),ue(),I.current=!1,F()}},[j,v,o,A,k,y,a,R,C,q,F,P,$,X,S,b,B]);const Y=x.useMemo(()=>({onKeyDown:q,onPointerDown:K,onClick:K}),[q,K]),re=x.useMemo(()=>({onKeyDown:q,onPointerDown:J,onMouseDown:J,onClickCapture:Q,onMouseDownCapture(M){Q(),G(M)},onPointerDownCapture(M){Q(),G(M)},onMouseUpCapture:Q,onTouchEndCapture:Q,onTouchMoveCapture:Q}),[q,Q,G,J]);return x.useMemo(()=>a?{reference:Y,floating:re,trigger:Y}:{},[a,Y,re])}function xT(e,t,a){let{reference:o,floating:c}=e;const d=aa(t),f=ny(t),p=ty(f),h=ra(t),b=d==="y",y=o.x+o.width/2-c.width/2,v=o.y+o.height/2-c.height/2,j=o[p]/2-c[p]/2;let w;switch(h){case"top":w={x:y,y:o.y-c.height};break;case"bottom":w={x:y,y:o.y+o.height};break;case"right":w={x:o.x+o.width,y:v};break;case"left":w={x:o.x-c.width,y:v};break;default:w={x:o.x,y:o.y}}const S=Nl(t);return S&&(w[f]+=j*(S==="end"?1:-1)*(a&&b?-1:1)),w}async function AH(e,t){var a;t===void 0&&(t={});const{x:o,y:c,platform:d,rects:f,elements:p,strategy:h}=e,{boundary:b="clippingAncestors",rootBoundary:y="viewport",elementContext:v="floating",altBoundary:j=!1,padding:w=0}=po(t,e),S=x1(w),k=p[j?v==="floating"?"reference":"floating":v],A=nf(await d.getClippingRect({element:(a=await(d.isElement==null?void 0:d.isElement(k)))==null||a?k:k.contextElement||await(d.getDocumentElement==null?void 0:d.getDocumentElement(p.floating)),boundary:b,rootBoundary:y,strategy:h})),P=v==="floating"?{x:o,y:c,width:f.floating.width,height:f.floating.height}:f.reference,R=await(d.getOffsetParent==null?void 0:d.getOffsetParent(p.floating)),C=await(d.isElement==null?void 0:d.isElement(R))&&await(d.getScale==null?void 0:d.getScale(R))||{x:1,y:1},E=nf(d.convertOffsetParentRelativeRectToViewportRelativeRect?await d.convertOffsetParentRelativeRectToViewportRelativeRect({elements:p,rect:P,offsetParent:R,strategy:h}):P);return{top:(A.top-E.top+S.top)/C.y,bottom:(E.bottom-A.bottom+S.bottom)/C.y,left:(A.left-E.left+S.left)/C.x,right:(E.right-A.right+S.right)/C.x}}const RH=50,OH=async(e,t,a)=>{const{placement:o="bottom",strategy:c="absolute",middleware:d=[],platform:f}=a,p=f.detectOverflow?f:{...f,detectOverflow:AH},h=await(f.isRTL==null?void 0:f.isRTL(t));let b=await f.getElementRects({reference:e,floating:t,strategy:c}),{x:y,y:v}=xT(b,o,h),j=o,w=0;const S={};for(let N=0;NF<=0)){var H,B;const F=(((H=d.flip)==null?void 0:H.index)||0)+1,$=I[F];if($&&(!(v==="alignment"?P!==aa($):!1)||z.every(q=>aa(q.placement)===P?q.overflows[0]>0:!0)))return{data:{index:F,overflows:z},reset:{placement:$}};let X=(B=z.filter(K=>K.overflows[0]<=0).sort((K,q)=>K.overflows[1]-q.overflows[1])[0])==null?void 0:B.placement;if(!X)switch(w){case"bestFit":{var L;const K=(L=z.filter(q=>{if(D){const Q=aa(q.placement);return Q===P||Q==="y"}return!0}).map(q=>[q.placement,q.overflows.filter(Q=>Q>0).reduce((Q,G)=>Q+G,0)]).sort((q,Q)=>q[1]-Q[1])[0])==null?void 0:L[0];K&&(X=K);break}case"initialPlacement":X=p;break}if(c!==X)return{reset:{placement:X}}}return{}}}},bT=new Set(["left","top"]);async function DH(e,t){const{placement:a,platform:o,elements:c}=e,d=await(o.isRTL==null?void 0:o.isRTL(c.floating)),f=ra(a),p=Nl(a),h=aa(a)==="y",b=bT.has(f)?-1:1,y=d&&h?-1:1,v=po(t,e);let{mainAxis:j,crossAxis:w,alignmentAxis:S}=typeof v=="number"?{mainAxis:v,crossAxis:0,alignmentAxis:null}:{mainAxis:v.mainAxis||0,crossAxis:v.crossAxis||0,alignmentAxis:v.alignmentAxis};return p&&typeof S=="number"&&(w=p==="end"?S*-1:S),h?{x:w*y,y:j*b}:{x:j*b,y:w*y}}const IH=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var a,o;const{x:c,y:d,placement:f,middlewareData:p}=t,h=await DH(t,e);return f===((a=p.offset)==null?void 0:a.placement)&&(o=p.arrow)!=null&&o.alignmentOffset?{}:{x:c+h.x,y:d+h.y,data:{...h,placement:f}}}}},PH=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:a,y:o,placement:c,platform:d}=t,{mainAxis:f=!0,crossAxis:p=!1,limiter:h={fn:P=>{let{x:R,y:C}=P;return{x:R,y:C}}},...b}=po(e,t),y={x:a,y:o},v=await d.detectOverflow(t,b),j=aa(c),w=ey(j);let S=y[w],N=y[j];const k=(P,R)=>m1(R+v[P==="y"?"top":"left"],R,R-v[P==="y"?"bottom":"right"]);f&&(S=k(w,S)),p&&(N=k(j,N));const A=h.fn({...t,[w]:S,[j]:N});return{...A,data:{x:A.x-a,y:A.y-o,enabled:{[w]:f,[j]:p}}}}}},_H=function(e){return e===void 0&&(e={}),{options:e,fn(t){var a,o;const{x:c,y:d,placement:f,rects:p,middlewareData:h}=t,{offset:b=0,mainAxis:y=!0,crossAxis:v=!0}=po(e,t),j={x:c,y:d},w=aa(f),S=ey(w);let N=j[S],k=j[w];const A=po(b,t),P=typeof A=="number"?{mainAxis:A,crossAxis:0}:{mainAxis:(a=A.mainAxis)!=null?a:0,crossAxis:(o=A.crossAxis)!=null?o:0};if(y){const E=S==="y"?"height":"width",D=p.reference[S]-p.floating[E]+P.mainAxis,I=p.reference[S]+p.reference[E]-P.mainAxis;NI&&(N=I)}if(v){var R,C;const E=S==="y"?"width":"height",D=bT.has(ra(f)),I=p.reference[w]-p.floating[E]+(D&&((R=h.offset)==null?void 0:R[w])||0)+(D?0:P.crossAxis),O=p.reference[w]+p.reference[E]+(D?0:((C=h.offset)==null?void 0:C[w])||0)-(D?P.crossAxis:0);kO&&(k=O)}return{[S]:N,[w]:k}}}},LH=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){const{placement:a,rects:o,platform:c,elements:d}=t,{apply:f=()=>{},...p}=po(e,t),h=await c.detectOverflow(t,p),b=ra(a),y=Nl(a),v=aa(a)==="y",{width:j,height:w}=o.floating;let S,N;b==="top"||b==="bottom"?(S=b,N=y===(await(c.isRTL==null?void 0:c.isRTL(d.floating))?"start":"end")?"left":"right"):(N=b,S=y==="end"?"top":"bottom");const k=w-h.top-h.bottom,A=j-h.left-h.right,P=Wc(w-h[S],k),R=Wc(j-h[N],A),C=t.middlewareData.shift,E=!C;let D=P,I=R;C!=null&&C.enabled.x&&(I=A),C!=null&&C.enabled.y&&(D=k),E&&!y&&(v?I=j-2*wl(h.left,h.right):D=w-2*wl(h.top,h.bottom)),await f({...t,availableWidth:I,availableHeight:D});const O=await c.getDimensions(d.floating);return j!==O.width||w!==O.height?{reset:{rects:!0}}:{}}}};function vT(e){const t=yr(e);let a=parseFloat(t.width)||0,o=parseFloat(t.height)||0;const c=pn(e),d=c?e.offsetWidth:a,f=c?e.offsetHeight:o,p=eh(a)!==d||eh(o)!==f;return p&&(a=d,o=f),{width:a,height:o,$:p}}function Sy(e){return Rt(e)?e:e.contextElement}function lu(e){const t=Sy(e);if(!pn(t))return Sl(1);const a=t.getBoundingClientRect(),{width:o,height:c,$:d}=vT(t);let f=(d?eh(a.width):a.width)/o,p=(d?eh(a.height):a.height)/c;return(!f||!Number.isFinite(f))&&(f=1),(!p||!Number.isFinite(p))&&(p=1),{x:f,y:p}}const zH=Sl(0);function yT(e){const t=Cn(e);return!Rv()||!t.visualViewport?zH:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function BH(e,t,a){return t===void 0&&(t=!1),!!a&&t&&a===Cn(e)}function Hi(e,t,a,o){t===void 0&&(t=!1),a===void 0&&(a=!1);const c=e.getBoundingClientRect(),d=Sy(e);let f=Sl(1);t&&(o?Rt(o)&&(f=lu(o)):f=lu(e));const p=BH(d,a,o)?yT(d):Sl(0);let h=(c.left+p.x)/f.x,b=(c.top+p.y)/f.y,y=c.width/f.x,v=c.height/f.y;if(d&&o){const j=Cn(d),w=Rt(o)?Cn(o):o;let S=j,N=Ov(S);for(;N&&w!==S;){const k=lu(N),A=N.getBoundingClientRect(),P=yr(N),R=A.left+(N.clientLeft+parseFloat(P.paddingLeft))*k.x,C=A.top+(N.clientTop+parseFloat(P.paddingTop))*k.y;h*=k.x,b*=k.y,y*=k.x,v*=k.y,h+=R,b+=C,S=Cn(N),N=Ov(S)}}return nf({width:y,height:v,x:h,y:b})}function gh(e,t){const a=Um(e).scrollLeft;return t?t.left+a:Hi(bl(e)).left+a}function jT(e,t){const a=e.getBoundingClientRect(),o=a.left+t.scrollLeft-gh(e,a),c=a.top+t.scrollTop;return{x:o,y:c}}function HH(e){let{elements:t,rect:a,offsetParent:o,strategy:c}=e;const d=c==="fixed",f=bl(o),p=t?Hm(t.floating):!1;if(o===f||p&&d)return a;let h={scrollLeft:0,scrollTop:0},b=Sl(1);const y=Sl(0),v=pn(o);if((v||!d)&&((Fs(o)!=="body"||Qd(f))&&(h=Um(o)),v)){const w=Hi(o);b=lu(o),y.x=w.x+o.clientLeft,y.y=w.y+o.clientTop}const j=f&&!v&&!d?jT(f,h):Sl(0);return{width:a.width*b.x,height:a.height*b.y,x:a.x*b.x-h.scrollLeft*b.x+y.x+j.x,y:a.y*b.y-h.scrollTop*b.y+y.y+j.y}}function UH(e){return e.getClientRects?Array.from(e.getClientRects()):[]}function VH(e){const t=Um(e),a=e.ownerDocument.body,o=wl(e.scrollWidth,e.clientWidth,a.scrollWidth,a.clientWidth),c=wl(e.scrollHeight,e.clientHeight,a.scrollHeight,a.clientHeight);let d=-t.scrollLeft+gh(e);const f=-t.scrollTop;return yr(a).direction==="rtl"&&(d+=wl(e.clientWidth,a.clientWidth)-o),{width:o,height:c,x:d,y:f}}const FH=25;function $H(e,t,a){a===void 0&&(a="viewport");const o=a==="layoutViewport",c=Cn(e),d=bl(e),f=c.visualViewport;let p=d.clientWidth,h=d.clientHeight,b=0,y=0;if(f){const j=!Rv()||t==="fixed";o?j||(b=-f.offsetLeft,y=-f.offsetTop):(p=f.width,h=f.height,j&&(b=f.offsetLeft,y=f.offsetTop))}if(gh(d)<=0){const j=d.ownerDocument,w=j.body,S=getComputedStyle(w),N=j.compatMode==="CSS1Compat"&&parseFloat(S.marginLeft)+parseFloat(S.marginRight)||0,k=Math.abs(d.clientWidth-w.clientWidth-N),A=getComputedStyle(d).scrollbarGutter==="stable both-edges"?k/2:k;A<=FH&&(p-=A)}return{width:p,height:h,x:b,y}}function qH(e,t){const a=Hi(e,!0,t==="fixed"),o=a.top+e.clientTop,c=a.left+e.clientLeft,d=lu(e),f=e.clientWidth*d.x,p=e.clientHeight*d.y,h=c*d.x,b=o*d.y;return{width:f,height:p,x:h,y:b}}function wT(e,t,a){let o;if(t==="viewport"||t==="layoutViewport")o=$H(e,a,t);else if(t==="document")o=VH(bl(e));else if(Rt(t))o=qH(t,a);else{const c=yT(e);o={x:t.x-c.x,y:t.y-c.y,width:t.width,height:t.height}}return nf(o)}function GH(e,t){const a=t.get(e);if(a)return a;let o=Kc(e,[],!1).filter(p=>Rt(p)&&Fs(p)!=="body"),c=null;const d=yr(e).position==="fixed";let f=d?ao(e):e;for(;Rt(f)&&!ro(f);){const p=yr(f),h=Av(f),b=c?c.position:d?"fixed":"";!h&&(b==="fixed"||b==="absolute"&&p.position==="static")?o=o.filter(v=>v!==f):c=p,f=ao(f)}return t.set(e,o),o}function KH(e){let{element:t,boundary:a,rootBoundary:o,strategy:c}=e;const f=[...a==="clippingAncestors"?Hm(t)?[]:GH(t,this._c):[].concat(a),o],p=wT(t,f[0],c);let h=p.top,b=p.right,y=p.bottom,v=p.left;for(let j=1;j{p(!1,1e-7)},1e3)}I=!1}try{o=new IntersectionObserver(O,{...D,root:d.ownerDocument})}catch{o=new IntersectionObserver(O,D)}o.observe(e)}const h=Cn(e),b=()=>p(a);return h.addEventListener("resize",b),p(!0),()=>{h.removeEventListener("resize",b),f()}}function TT(e,t,a,o){o===void 0&&(o={});const{ancestorScroll:c=!0,ancestorResize:d=!0,elementResize:f=typeof ResizeObserver=="function",layoutShift:p=typeof IntersectionObserver=="function",animationFrame:h=!1}=o,b=Sy(e),y=c||d?[...b?Kc(b):[],...t?Kc(t):[]]:[];y.forEach(A=>{c&&A.addEventListener("scroll",a),d&&A.addEventListener("resize",a)});const v=b&&p?WH(b,a,d):null;let j=-1,w=null;f&&(w=new ResizeObserver(A=>{let[P]=A;P&&P.target===b&&w&&t&&(w.unobserve(t),cancelAnimationFrame(j),j=requestAnimationFrame(()=>{var R;(R=w)==null||R.observe(t)})),a()}),b&&!h&&w.observe(b),t&&w.observe(t));let S,N=h?Hi(e):null;h&&k();function k(){const A=Hi(e);N&&!CT(N,A)&&a(),N=A,S=requestAnimationFrame(k)}return a(),()=>{var A;y.forEach(P=>{c&&P.removeEventListener("scroll",a),d&&P.removeEventListener("resize",a)}),v?.(),(A=w)==null||A.disconnect(),w=null,h&&cancelAnimationFrame(S)}}const JH=IH,eU=PH,tU=MH,nU=LH,sU=_H,rU=(e,t,a)=>{const o=new Map,c=a??{},d={...kT,...c.platform,_c:o};return OH(e,t,{...c,platform:d})};var aU=typeof document<"u",lU=function(){},xh=aU?x.useLayoutEffect:lU;function bh(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let a,o,c;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(a=e.length,a!==t.length)return!1;for(o=a;o--!==0;)if(!bh(e[o],t[o]))return!1;return!0}if(c=Object.keys(e),a=c.length,a!==Object.keys(t).length)return!1;for(o=a;o--!==0;)if(!{}.hasOwnProperty.call(t,c[o]))return!1;for(o=a;o--!==0;){const d=c[o];if(!(d==="_owner"&&e.$$typeof)&&!bh(e[d],t[d]))return!1}return!0}return e!==e&&t!==t}function ET(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function AT(e,t){const a=ET(e);return Math.round(t*a)/a}function ky(e){const t=x.useRef(e);return xh(()=>{t.current=e}),t}function oU(e){e===void 0&&(e={});const{placement:t="bottom",strategy:a="absolute",middleware:o=[],platform:c,elements:{reference:d,floating:f}={},transform:p=!0,whileElementsMounted:h,open:b}=e,[y,v]=x.useState({x:0,y:0,strategy:a,placement:t,middlewareData:{},isPositioned:!1}),[j,w]=x.useState(o);bh(j,o)||w(o);const[S,N]=x.useState(null),[k,A]=x.useState(null),P=x.useCallback(q=>{q!==D.current&&(D.current=q,N(q))},[]),R=x.useCallback(q=>{q!==I.current&&(I.current=q,A(q))},[]),C=d||S,E=f||k,D=x.useRef(null),I=x.useRef(null),O=x.useRef(y),_=h!=null,z=ky(h),H=ky(c),B=ky(b),L=x.useCallback(()=>{if(!D.current||!I.current)return;const q={placement:t,strategy:a,middleware:j};H.current&&(q.platform=H.current),rU(D.current,I.current,q).then(Q=>{const G={...Q,isPositioned:B.current!==!1};F.current&&!bh(O.current,G)&&(O.current=G,Ts.flushSync(()=>{v(G)}))})},[j,t,a,H,B]);xh(()=>{b===!1&&O.current.isPositioned&&(O.current.isPositioned=!1,v(q=>({...q,isPositioned:!1})))},[b]);const F=x.useRef(!1);xh(()=>(F.current=!0,()=>{F.current=!1}),[]),xh(()=>{if(C&&(D.current=C),E&&(I.current=E),C&&E){if(z.current)return z.current(C,E,L);L()}},[C,E,L,z,_]);const $=x.useMemo(()=>({reference:D,floating:I,setReference:P,setFloating:R}),[P,R]),X=x.useMemo(()=>({reference:C,floating:E}),[C,E]),K=x.useMemo(()=>{const q={position:a,left:0,top:0};if(!X.floating)return q;const Q=AT(X.floating,y.x),G=AT(X.floating,y.y);return p?{...q,transform:"translate("+Q+"px, "+G+"px)",...ET(X.floating)>=1.5&&{willChange:"transform"}}:{position:a,left:Q,top:G}},[a,p,X.floating,y.x,y.y]);return x.useMemo(()=>({...y,update:L,refs:$,elements:X,floatingStyles:K}),[y,L,$,X,K])}const iU=(e,t)=>{const a=JH(e);return{name:a.name,fn:a.fn,options:[e,t]}},cU=(e,t)=>{const a=eU(e);return{name:a.name,fn:a.fn,options:[e,t]}},uU=(e,t)=>({fn:sU(e).fn,options:[e,t]}),dU=(e,t)=>{const a=tU(e);return{name:a.name,fn:a.fn,options:[e,t]}},fU=(e,t)=>{const a=nU(e);return{name:a.name,fn:a.fn,options:[e,t]}};var Cy={exports:{}},Ty={};var RT;function pU(){if(RT)return Ty;RT=1;var e=Xd();function t(v,j){return v===j&&(v!==0||1/v===1/j)||v!==v&&j!==j}var a=typeof Object.is=="function"?Object.is:t,o=e.useState,c=e.useEffect,d=e.useLayoutEffect,f=e.useDebugValue;function p(v,j){var w=j(),S=o({inst:{value:w,getSnapshot:j}}),N=S[0].inst,k=S[1];return d(function(){N.value=w,N.getSnapshot=j,h(N)&&k({inst:N})},[v,w,j]),c(function(){return h(N)&&k({inst:N}),v(function(){h(N)&&k({inst:N})})},[v]),f(w),w}function h(v){var j=v.getSnapshot;v=v.value;try{var w=j();return!a(v,w)}catch{return!0}}function b(v,j){return j()}var y=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?b:p;return Ty.useSyncExternalStore=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:y,Ty}var OT;function MT(){return OT||(OT=1,Cy.exports=pU()),Cy.exports}var Ey=MT(),Ay={exports:{}},Ry={};var DT;function mU(){if(DT)return Ry;DT=1;var e=Xd(),t=MT();function a(b,y){return b===y&&(b!==0||1/b===1/y)||b!==b&&y!==y}var o=typeof Object.is=="function"?Object.is:a,c=t.useSyncExternalStore,d=e.useRef,f=e.useEffect,p=e.useMemo,h=e.useDebugValue;return Ry.useSyncExternalStoreWithSelector=function(b,y,v,j,w){var S=d(null);if(S.current===null){var N={hasValue:!1,value:null};S.current=N}else N=S.current;S=p(function(){function A(D){if(!P){if(P=!0,R=D,D=j(D),w!==void 0&&N.hasValue){var I=N.value;if(w(I,D))return C=I}return C=D}if(I=C,o(R,D))return I;var O=j(D);return w!==void 0&&w(I,O)?(R=D,I):(R=D,C=O)}var P=!1,R,C,E=v===void 0?null:v;return[function(){return A(y())},E===null?void 0:function(){return A(E())}]},[y,v,j,w]);var k=c(b,S[0],S[1]);return f(function(){N.hasValue=!0,N.value=k},[k]),h(k),k},Ry}var IT;function hU(){return IT||(IT=1,Ay.exports=mU()),Ay.exports}var gU=hU();const xU=zv(19)?vU:yU;function PT(e,t,a,o,c){return xU(e,t,a,o,c)}function bU(e,t,a,o,c){const d=x.useCallback(()=>t(e.getSnapshot(),a,o,c),[e,t,a,o,c]);return Ey.useSyncExternalStore(e.subscribe,d,d)}aH({before(e){e.syncIndex=0,e.didInitialize||(e.syncTick=1,e.syncHooks=[],e.didChangeStore=!0,e.getSnapshot=()=>{let t=!1;for(let a=0;a0&&(e.didChangeStore&&(e.didChangeStore=!1,e.subscribe=t=>{const a=new Set;for(const c of e.syncHooks)a.add(c.store);const o=[];for(const c of a)o.push(c.subscribe(t));return()=>{for(const c of o)c()}}),Ey.useSyncExternalStore(e.subscribe,e.getSnapshot,e.getSnapshot))}});function vU(e,t,a,o,c){const d=rH();if(!d)return bU(e,t,a,o,c);const f=d.syncIndex;d.syncIndex+=1;let p;return d.didInitialize?(p=d.syncHooks[f],(p.store!==e||p.selector!==t||!Object.is(p.a1,a)||!Object.is(p.a2,o)||!Object.is(p.a3,c))&&(p.store!==e&&(d.didChangeStore=!0),p.store=e,p.selector=t,p.a1=a,p.a2=o,p.a3=c,p.value=t(e.getSnapshot(),a,o,c))):(p={store:e,selector:t,a1:a,a2:o,a3:c,value:t(e.getSnapshot(),a,o,c)},d.syncHooks.push(p)),p.value}function yU(e,t,a,o,c){return gU.useSyncExternalStoreWithSelector(e.subscribe,e.getSnapshot,e.getSnapshot,d=>t(d,a,o,c))}class jU{constructor(t){cn(this,"subscribe",t=>(this.listeners.add(t),()=>{this.listeners.delete(t)}));cn(this,"getSnapshot",()=>this.state);this.state=t,this.listeners=new Set,this.updateTick=0}static create(t){return new this(t)}setState(t){if(this.state===t)return;this.state=t,this.updateTick+=1;const a=this.updateTick;for(const o of this.listeners){if(a!==this.updateTick)return;o(t)}}update(t){for(const a in t)if(!Object.is(this.state[a],t[a])){this.setState({...this.state,...t});return}}set(t,a){Object.is(this.state[t],a)||this.setState({...this.state,[t]:a})}notifyAll(){const t={...this.state};this.setState(t)}use(t,a,o,c){return PT(this,t,a,o,c)}}class ou extends jU{constructor(t,a={},o){super(t),this.context=a,this.selectors=o}useSyncedValue(t,a){x.useDebugValue(t);const o=this;Me(()=>{o.state[t]!==a&&o.set(t,a)},[o,t,a])}useSyncedValueWithCleanup(t,a){const o=this;Me(()=>(o.state[t]!==a&&o.set(t,a),()=>{o.set(t,void 0)}),[o,t,a])}useSyncedValues(t){const a=this,o=Object.values(t);Me(()=>{a.update(t)},[a,...o])}useControlledProp(t,a){x.useDebugValue(t);const o=this,c=a!==void 0;Me(()=>{c&&!Object.is(o.state[t],a)&&o.setState({...o.state,[t]:a})},[o,t,a,c])}select(t,a,o,c){const d=this.selectors[t];return d(this.state,a,o,c)}useState(t,a,o,c){return x.useDebugValue(t),PT(this,this.selectors[t],a,o,c)}useContextCallback(t,a){x.useDebugValue(t);const o=Ie(a??Kt);this.context[t]=o}useStateSetter(t){const a=x.useRef(void 0);return a.current===void 0&&(a.current=o=>{this.set(t,o)}),a.current}observe(t,a){let o;typeof t=="function"?o=t:o=this.selectors[t];let c=o(this.state);return a(c,c,this),this.subscribe(d=>{const f=o(d);if(!Object.is(c,f)){const p=c;c=f,a(f,p,this)}})}}const wU={open:e=>e.open,transitionStatus:e=>e.transitionStatus,domReferenceElement:e=>e.domReferenceElement,referenceElement:e=>e.positionReference??e.referenceElement,floatingElement:e=>e.floatingElement,floatingId:e=>e.floatingId};class Oy extends ou{constructor(a){const{syncOnly:o,nested:c,onOpenChange:d,triggerElements:f,...p}=a;super({...p,positionReference:p.referenceElement,domReferenceElement:p.referenceElement},{onOpenChange:d,dataRef:{current:{}},events:cT(),nested:c,triggerElements:f},wU);cn(this,"syncOpenEvent",(a,o)=>{(!a||!this.state.open||o!=null&&JB(o))&&(this.context.dataRef.current.openEvent=a?o:void 0)});cn(this,"dispatchOpenChange",(a,o)=>{this.syncOpenEvent(a,o.event);const c={open:a,reason:o.reason,nativeEvent:o.event,nested:this.context.nested,triggerElement:o.trigger};this.context.events.emit("openchange",c)});cn(this,"setOpen",(a,o)=>{if(this.syncOnly){this.context.onOpenChange?.(a,o);return}this.dispatchOpenChange(a,o),this.context.onOpenChange?.(a,o)});this.syncOnly=o}}function SU(e){const{popupStore:t,treatPopupAsFloatingElement:a=!1,floatingRootContext:o,floatingId:c,nested:d,onOpenChange:f}=e,p=t.useState("open"),h=t.useState("activeTriggerElement"),b=t.useState(a?"popupElement":"positionerElement"),y=t.context.triggerElements,v=f,j=x.useRef(null);o===void 0&&j.current===null&&(j.current=new Oy({open:p,transitionStatus:void 0,referenceElement:h,floatingElement:b,triggerElements:y,onOpenChange:v,floatingId:c,syncOnly:!0,nested:d}));const w=o??j.current;return t.useSyncedValue("floatingId",c),Me(()=>{const S={open:p,floatingId:c,referenceElement:h,floatingElement:b};Rt(h)&&(S.domReferenceElement=h),w.state.positionReference===w.state.referenceElement&&(S.positionReference=h),w.update(S)},[p,c,h,b,w]),w.context.onOpenChange=v,w.context.nested=d,w}const mf={tabIndex:-1,[qv]:""};function _T(e){return t=>t==="touch"?e.current:!0}function My(e,t=!1){const a=Jd(),o=au()!=null,c=Ps(()=>e(a,o)).current;return SU({popupStore:c,treatPopupAsFloatingElement:t,floatingRootContext:c.state.floatingRootContext,floatingId:a,nested:o,onOpenChange:c.setOpen}),c}function Dy({handle:e,store:t}){return Me(()=>e.attachStore(t),[e,t]),null}function LT(e){const t=e.context.triggerElements.size;e.select("open")&&e.state.triggerCount!==t&&e.set("triggerCount",t)}function NU(e,t){const a=x.useRef(null);return Ie(o=>{const c=a.current;if(c!==null){if(c.element===o&&c.store===t&&c.id===e)return;a.current=null;const d=c.store;d.context.triggerElements.getById(c.id)===c.element&&(d.context.triggerElements.delete(c.id),LT(d))}o!==null&&e!==void 0&&(a.current={store:t,id:e,element:o},t.context.triggerElements.add(e,o),LT(t))})}function Iy(e,t,a,o=!1){let c=e.preventUnmountingOnClose;t?c=!1:o&&(c=!0);const d=a?.id??null;let f=e.activeTriggerId,p=e.activeTriggerElement;return(d||t)&&(f=d,p=a??null),{open:t,preventUnmountingOnClose:c,activeTriggerId:f,activeTriggerElement:p}}function zT(e){let t=!1;return e.preventUnmountOnClose=()=>{t=!0},()=>t}function kU(e,t,a,o={}){const c=a.reason,d=c===qs,f=t&&c===ih,p=!t&&(c===go||c===nu),h=zT(a);if(e.context.onOpenChange?.(t,a),a.isCanceled)return;o.onBeforeDispatch?.(),e.state.floatingRootContext.dispatchOpenChange(t,a);const b=()=>{const y=Iy(e.state,t,a.trigger,h()),v={...o.extraState,...y};f?v.instantType="focus":p?v.instantType="dismiss":d&&(v.instantType=void 0),e.update(v)};d?Ts.flushSync(b):b()}function BT(e,t,a,o){const c=a.useState("isMountedByTrigger",e),d=NU(e,a),f=Ie(h=>{const b=a.select("open"),y=a.select("activeTriggerId");if(y===e){const v={activeTriggerElement:h,...b?o:null};a.update(v);return}if(y==null&&b){const v={activeTriggerId:e??null,activeTriggerElement:h,...o};a.update(v)}}),p=Ie(h=>{d(h),h&&f(h)});return Me(()=>(p(t.current),()=>p(null)),[p,t,a,e]),Me(()=>{if(c){const h={activeTriggerElement:t.current,...o};a.update(h)}},[c,a,t,...Object.values(o)]),{registerTrigger:p,isMountedByThisTrigger:c}}function Py(e,t={}){const{closeOnActiveTriggerUnmount:a=!1}=t,o=x.useRef(null),c=e.useState("open"),d=e.useState("triggerCount"),f=e.useState("activeTriggerId"),p=e.useState("activeTriggerElement");Me(()=>{if(!c){o.current=null,e.state.triggerCount!==0&&e.set("triggerCount",0);return}const h=e.context.triggerElements.size,b={};e.state.triggerCount!==h&&(b.triggerCount=h);const y=e.select("activeTriggerId");let v=null;if(y){const j=e.context.triggerElements.getById(y);if(j)o.current=y,j!==e.state.activeTriggerElement&&(b.activeTriggerElement=j);else{for(const[w,S]of e.context.triggerElements.entries())if(S===e.state.activeTriggerElement){b.activeTriggerId=w,b.activeTriggerElement=S,o.current=w;break}b.activeTriggerId===void 0&&(o.current===y?v=y:o.current=null)}}else o.current=null;if(!v&&!y&&h===1){const j=e.context.triggerElements.entries().next();if(!j.done){const[w,S]=j.value;b.activeTriggerId=w,b.activeTriggerElement=S,o.current=w}}(b.triggerCount!==void 0||b.activeTriggerId!==void 0||b.activeTriggerElement!==void 0)&&e.update(b),v&&a&&queueMicrotask(()=>{if(e.select("open")&&e.select("activeTriggerId")===v&&!e.context.triggerElements.getById(v)){const j=qe(Qn);e.setOpen(!1,j),j.isCanceled||e.update({activeTriggerId:null,activeTriggerElement:null})}})},[c,e,d,f,p,a])}function _y(e,t,a,o){const{mounted:c,setMounted:d,transitionStatus:f}=Oi(e,!1,!1,o),p=t.useState("preventUnmountingOnClose"),h=e?!1:p;t.useSyncedValues({mounted:c,transitionStatus:f,preventUnmountingOnClose:h});const b=Ie(()=>{d(!1),t.update({activeTriggerId:null,activeTriggerElement:null,mounted:!1,preventUnmountingOnClose:!1}),a?.(),t.context.onOpenChangeComplete?.(!1)});return oa({enabled:c&&!e&&!h,open:e,ref:t.context.popupRef,onComplete(){e||b()}}),{forceUnmount:b,transitionStatus:f}}function Ly(e,t){e.useSyncedValues(t),Me(()=>()=>{e.update({activeTriggerProps:mn,inactiveTriggerProps:mn,popupProps:mn})},[e])}function HT(e,t){Me(()=>{!t&&e.state.openMethod!==null&&e.set("openMethod",null)},[t,e]),Me(()=>()=>{e.state.openMethod!==null&&e.set("openMethod",null)},[e])}class vh{constructor(){this.idMap=new Map}add(t,a){this.idMap.set(t,a)}delete(t){this.idMap.delete(t)}hasElement(t){for(const a of this.idMap.values())if(a===t)return!0;return!1}hasMatchingElement(t){for(const a of this.idMap.values())if(t(a))return!0;return!1}getById(t){return this.idMap.get(t)}entries(){return this.idMap.entries()}elements(){return this.idMap.values()}get size(){return this.idMap.size}}function zy(e,t,a=!1){return{open:!1,openProp:void 0,mounted:!1,transitionStatus:void 0,floatingRootContext:new Oy({open:!1,transitionStatus:void 0,floatingElement:null,referenceElement:null,triggerElements:e,floatingId:t,syncOnly:!0,nested:a,onOpenChange:void 0}),floatingId:t,triggerCount:0,preventUnmountingOnClose:!1,payload:void 0,activeTriggerId:null,activeTriggerElement:null,triggerIdProp:void 0,popupElement:null,positionerElement:null,activeTriggerProps:mn,inactiveTriggerProps:mn,popupProps:mn}}const hf=e=>e.triggerIdProp??e.activeTriggerId,By=e=>e.openProp??e.open,UT=e=>(e.popupElement?.id??e.floatingId)||void 0;function VT(e,t){return t!==void 0&&By(e)&&hf(e)===t}function CU(e,t){return VT(e,t)?!0:t!==void 0&&By(e)&&hf(e)==null&&e.triggerCount===1}const Hy={open:By,mounted:e=>e.mounted,transitionStatus:e=>e.transitionStatus,floatingRootContext:e=>e.floatingRootContext,triggerCount:e=>e.triggerCount,preventUnmountingOnClose:e=>e.preventUnmountingOnClose,payload:e=>e.payload,activeTriggerId:hf,activeTriggerElement:e=>e.mounted?e.activeTriggerElement:null,popupId:UT,isTriggerActive:(e,t)=>t!==void 0&&hf(e)===t,isOpenedByTrigger:(e,t)=>VT(e,t),isMountedByTrigger:(e,t)=>t!==void 0&&hf(e)===t&&e.mounted,triggerProps:(e,t)=>t?e.activeTriggerProps:e.inactiveTriggerProps,triggerPopupId:(e,t)=>CU(e,t)?UT(e):void 0,popupProps:e=>e.popupProps,popupElement:e=>e.popupElement,positionerElement:e=>e.positionerElement};function FT(e){const t=x.useCallback(o=>e===void 0?Kt:e.subscribeStore(o),[e]),a=x.useCallback(()=>e===void 0?void 0:e.store,[e]);return Ey.useSyncExternalStore(t,a,()=>e?.serverStore)}function $T(e){const{open:t=!1,onOpenChange:a,elements:o={}}=e,c=Jd(),d=au()!=null,f=Ps(()=>new Oy({open:t,transitionStatus:void 0,onOpenChange:a,referenceElement:o.reference??null,floatingElement:o.floating??null,triggerElements:new vh,floatingId:c,syncOnly:!1,nested:d})).current;return Me(()=>{const p={open:t,floatingId:c};o.reference!==void 0&&(p.referenceElement=o.reference,p.domReferenceElement=Rt(o.reference)?o.reference:null),o.floating!==void 0&&(p.floatingElement=o.floating),f.update(p)},[t,c,o.reference,o.floating,f]),f.context.onOpenChange=a,f.context.nested=d,f}function TU(e){return EU(e,e.rootContext)}function EU(e,t){const{nodeId:a,externalTree:o}=e,c=t.useState("referenceElement"),d=t.useState("floatingElement"),f=t.useState("domReferenceElement"),p=t.useState("open"),h=t.useState("floatingId"),[b,y]=x.useState(null),[v,j]=x.useState(void 0),[w,S]=x.useState(void 0),N=x.useRef(null),k=Bi(o),A=x.useMemo(()=>({reference:c,floating:d,domReference:f}),[c,d,f]),P=oU({...e,elements:{...A,...b&&{reference:b}}}),R=Rt(v)?v:null,C=w===void 0?t.state.floatingElement:w;t.useSyncedValue("referenceElement",v??null),t.useSyncedValue("domReferenceElement",v===void 0?f:R),t.useSyncedValue("floatingElement",C);const E=x.useCallback(H=>{const B=Rt(H)?{getBoundingClientRect:()=>H.getBoundingClientRect(),getClientRects:()=>H.getClientRects(),contextElement:H}:H;y(B),P.refs.setReference(B)},[P.refs]),D=x.useCallback(H=>{(Rt(H)||H===null)&&(N.current=H,j(H)),(Rt(P.refs.reference.current)||P.refs.reference.current===null||H!==null&&!Rt(H))&&P.refs.setReference(H)},[P.refs,j]),I=x.useCallback(H=>{S(H),P.refs.setFloating(H)},[P.refs]),O=x.useMemo(()=>({...P.refs,setReference:D,setFloating:I,setPositionReference:E,domReference:N}),[P.refs,D,I,E]),_=x.useMemo(()=>({...P.elements,domReference:f}),[P.elements,f]),z=x.useMemo(()=>({...P,dataRef:t.context.dataRef,open:p,onOpenChange:t.setOpen,events:t.context.events,floatingId:h,refs:O,elements:_,nodeId:a,rootStore:t}),[P,O,_,a,t,p,h]);return Me(()=>{f&&(N.current=f)},[f]),Me(()=>{t.context.dataRef.current.floatingContext=z;const H=k?.nodesRef.current.find(B=>B.id===a);H&&(H.context=z)}),x.useMemo(()=>({...P,context:z,refs:O,elements:_,rootStore:t}),[P,O,_,z,t])}const Uy=i1&&jl;function AU(e,t={}){const{enabled:a=!0,delay:o}=t,c="rootStore"in e?e.rootStore:e,{events:d,dataRef:f}=c.context,p=x.useRef(!1),h=x.useRef(null),b=x.useRef(!0),y=er();x.useEffect(()=>{const j=c.select("domReferenceElement");if(!a)return;const w=Cn(j);function S(){const A=c.select("domReferenceElement");!c.select("open")&&pn(A)&&A===ir(Gt(A))&&(p.current=!0,h.current=A)}function N(){b.current=!0}function k(){b.current=!1}return Xa(St(w,"blur",S),Uy&&St(w,"keydown",N,!0),Uy&&St(w,"pointerdown",k,!0))},[c,a]),x.useEffect(()=>{if(!a)return;function j(w){if(w.reason===go||w.reason===nu){const S=c.select("domReferenceElement");Rt(S)&&(h.current=S,p.current=!0)}}return d.on("openchange",j),()=>{d.off("openchange",j)}},[d,a,c]);const v=x.useMemo(()=>{function j(){p.current=!1,h.current=null}return{onMouseLeave(){j()},onFocus(w){const S=w.currentTarget;if(p.current){if(h.current===S)return;j()}const N=fs(w.nativeEvent);if(Rt(N)){if(Uy&&!w.relatedTarget){if(!b.current&&!Zm(N))return}else if(!ZB(N))return}const k=Qm(w.relatedTarget,c.context.triggerElements),{nativeEvent:A,currentTarget:P}=w,R=typeof o=="function"?o():o;if(c.select("open")&&k||R===0||R===void 0){c.setOpen(!0,qe(ih,A,P));return}y.start(R,()=>{p.current||c.setOpen(!0,qe(ih,A,P))})},onBlur(w){j();const S=w.relatedTarget,N=w.nativeEvent,k=Rt(S)&&S.hasAttribute(df("focus-guard"))&&S.getAttribute("data-type")==="outside";y.start(0,()=>{const A=c.select("domReferenceElement"),P=ir(Gt(A));!S&&P===A||Ze(f.current.floatingContext?.refs.floating.current,P)||Ze(A,P)||k||Qm(S??P,c.context.triggerElements)||c.setOpen(!1,qe(ih,N))})}}},[f,o,c,y]);return x.useMemo(()=>a?{reference:v,trigger:v}:{},[a,v])}class Vy{constructor(){cn(this,"dispose",()=>{this.openChangeTimeout.clear(),this.restTimeout.clear()});cn(this,"disposeEffect",()=>this.dispose);this.pointerType=void 0,this.interactedInside=!1,this.handler=void 0,this.blockMouseMove=!0,this.performedPointerEventsMutation=!1,this.pointerEventsScopeElement=null,this.pointerEventsReferenceElement=null,this.pointerEventsFloatingElement=null,this.restTimeoutPending=!1,this.openChangeTimeout=new la,this.restTimeout=new la,this.handleCloseOptions=void 0}static create(){return new Vy}}const yh=new WeakMap;function jh(e){if(!e.performedPointerEventsMutation)return;const t=e.pointerEventsScopeElement;t&&yh.get(t)===e&&(e.pointerEventsScopeElement?.style.removeProperty("pointer-events"),e.pointerEventsReferenceElement?.style.removeProperty("pointer-events"),e.pointerEventsFloatingElement?.style.removeProperty("pointer-events"),yh.delete(t)),e.performedPointerEventsMutation=!1,e.pointerEventsScopeElement=null,e.pointerEventsReferenceElement=null,e.pointerEventsFloatingElement=null}function qT(e,t){const{scopeElement:a,referenceElement:o,floatingElement:c}=t,d=yh.get(a);d&&d!==e&&jh(d),jh(e),e.performedPointerEventsMutation=!0,e.pointerEventsScopeElement=a,e.pointerEventsReferenceElement=o,e.pointerEventsFloatingElement=c,yh.set(a,e),a.style.pointerEvents="none",o.style.pointerEvents="auto",c.style.pointerEvents="auto"}function Fy(e){const t=e.context.dataRef.current,a=Ps(()=>t.hoverInteractionState??Vy.create()).current;return t.hoverInteractionState||(t.hoverInteractionState=a),cy(t.hoverInteractionState.disposeEffect),t.hoverInteractionState}function GT(e,t={}){const{enabled:a=!0,closeDelay:o=0,nodeId:c}=t,d="rootStore"in e?e.rootStore:e,f=d.useState("open"),p=d.useState("floatingElement"),h=d.useState("domReferenceElement"),{dataRef:b}=d.context,y=Bi(),v=au(),j=Fy(d),w=er(),S=Ie(()=>X1(b.current.openEvent?.type,j.interactedInside)),N=Ie(()=>iH(b.current.openEvent?.type)),k=Ie(()=>{jh(j)});Me(()=>{f||(j.pointerType=void 0,j.restTimeoutPending=!1,j.interactedInside=!1,k())},[f,j,k]),x.useEffect(()=>k,[k]),Me(()=>{if(a&&f&&j.handleCloseOptions?.blockPointerEvents&&N()&&Rt(h)&&p){const A=h,P=p,R=Gt(p),C=y?.nodesRef.current.find(O=>O.id===v)?.context?.elements.floating;C&&(C.style.pointerEvents="");const E=j.pointerEventsScopeElement!==P?j.pointerEventsScopeElement:null,D=C!==P?C:null,I=j.handleCloseOptions?.getScope?.()??E??D??A.closest("[data-rootownerid]")??R.body;return qT(j,{scopeElement:I,referenceElement:A,floatingElement:P}),()=>{k()}}},[a,f,h,p,j,N,y,v,k]),x.useEffect(()=>{if(!a)return;function A(){return!!(y&&v&&uo(y.nodesRef.current,v).length>0)}function P(O){const _=zi(o,"close",j.pointerType),z=()=>{d.setOpen(!1,qe(qs,O)),y?.events.emit("floating.closed",O)};_?j.openChangeTimeout.start(_,z):(j.openChangeTimeout.clear(),z())}function R(O){const _=fs(O);if(!QB(_)){j.interactedInside=!1;return}j.interactedInside=_?.closest("[aria-haspopup]")!=null}function C(){j.openChangeTimeout.clear(),w.clear(),y?.events.off("floating.closed",D),k()}function E(O){if(A()&&y){y.events.on("floating.closed",D);return}if(Qm(O.relatedTarget,d.context.triggerElements))return;const _=b.current.floatingContext?.nodeId??c,z=O.relatedTarget;if(!(y&&_&&Rt(z)&&uo(y.nodesRef.current,_,!1).some(B=>Ze(B.context?.elements.floating,z)))){if(j.handler){j.handler(O);return}k(),N()&&!S()&&P(O)}}function D(O){!y||!v||A()||w.start(0,()=>{y.events.off("floating.closed",D),d.setOpen(!1,qe(qs,O)),y.events.emit("floating.closed",O)})}const I=p;return Xa(I&&St(I,"mouseenter",C),I&&St(I,"mouseleave",E),I&&St(I,"pointerdown",R,!0),()=>{y?.events.off("floating.closed",D)})},[a,p,d,b,o,c,N,S,k,j,y,v,w])}const RU={current:null};function KT(e,t={}){const{enabled:a=!0,delay:o=0,handleClose:c=null,mouseOnly:d=!1,restMs:f=0,move:p=!0,triggerElementRef:h=RU,externalTree:b,isActiveTrigger:y=!0,getHandleCloseContext:v,isClosing:j,shouldOpen:w,guardStaleOpen:S=!1}=t,N="rootStore"in e?e.rootStore:e,{dataRef:k,events:A}=N.context,P=Bi(b),R=Fy(N),C=x.useRef(!1),E=Zn(c),D=Zn(o),I=Zn(f),O=Zn(a),_=Zn(w),z=Zn(j),H=Ie(()=>X1(k.current.openEvent?.type,R.interactedInside)),B=Ie(()=>_.current?.()!==!1),L=Ie((X,K,q)=>{const Q=N.context.triggerElements;if(Q.hasElement(K))return!X||!Ze(X,K);if(!Rt(q))return!1;const G=q;return Q.hasMatchingElement(J=>Ze(J,G))&&(!X||!Ze(X,G))}),F=Ie(()=>{if(!R.handler)return;Gt(N.select("domReferenceElement")).removeEventListener("mousemove",R.handler),R.handler=void 0}),$=Ie(()=>{jh(R)});return y&&(R.handleCloseOptions=c?.__options),x.useEffect(()=>F,[F]),x.useEffect(()=>{if(!a)return;function X(K){K.open?C.current=!1:(C.current=K.reason===qs,F(),R.openChangeTimeout.clear(),R.restTimeout.clear(),R.blockMouseMove=!0,R.restTimeoutPending=!1)}return A.on("openchange",X),()=>{A.off("openchange",X)}},[a,A,R,F]),x.useEffect(()=>{if(!a)return;function X(Y,re=!0){const M=zi(D.current,"close",R.pointerType);M?R.openChangeTimeout.start(M,()=>{N.setOpen(!1,qe(qs,Y)),P?.events.emit("floating.closed",Y)}):re&&(R.openChangeTimeout.clear(),N.setOpen(!1,qe(qs,Y)),P?.events.emit("floating.closed",Y))}const K=h.current??(y?N.select("domReferenceElement"):null);if(!Rt(K))return;function q(Y){if(R.openChangeTimeout.clear(),R.blockMouseMove=!1,d&&!fo(R.pointerType))return;const re=Y1(I.current),M=zi(D.current,"open",R.pointerType),U=fs(Y),Z=Y.currentTarget??null,ae=N.select("domReferenceElement");let ce=Z;if(Rt(U)&&!N.context.triggerElements.hasElement(U)){for(const de of N.context.triggerElements.elements())if(Ze(de,U)){ce=de;break}}Rt(Z)&&Rt(ae)&&!N.context.triggerElements.hasElement(Z)&&Ze(Z,ae)&&(ce=ae);const W=ce==null?!1:L(ae,ce,U),ue=N.select("open"),ve=z.current?.()??N.select("transitionStatus")==="ending",ee=!ue&&ve&&C.current,he=!W&&Rt(ce)&&Rt(ae)&&Ze(ae,ce)&&ee,te=re>0&&!M,ke=W&&(ue||ee)||he,le=!ue||W;if(ke){B()&&N.setOpen(!0,qe(qs,Y,ce));return}te||(M?R.openChangeTimeout.start(M,()=>{le&&B()&&N.setOpen(!0,qe(qs,Y,ce))}):le&&B()&&N.setOpen(!0,qe(qs,Y,ce)))}function Q(Y){if(H()){$();return}F();const re=N.select("domReferenceElement"),M=Gt(re);R.restTimeout.clear(),R.restTimeoutPending=!1;const U=k.current.floatingContext??v?.();if(Qm(Y.relatedTarget,N.context.triggerElements))return;if(E.current&&U){N.select("open")||R.openChangeTimeout.clear();const ae=h.current;R.handler=E.current({...U,tree:P,x:Y.clientX,y:Y.clientY,onClose(){$(),F(),O.current&&!H()&&ae===N.select("domReferenceElement")&&X(Y,!0)}}),M.addEventListener("mousemove",R.handler),R.handler(Y);return}(R.pointerType!=="touch"||!Ze(N.select("floatingElement"),Y.relatedTarget))&&X(Y)}function G(Y){Ze(K,Y.relatedTarget)||(R.openChangeTimeout.clear(),R.restTimeout.clear(),R.restTimeoutPending=!1)}const J=S?St(K,"mouseout",G):void 0;return p?Xa(St(K,"mousemove",q,{once:!0}),St(K,"mouseenter",q),St(K,"mouseleave",Q),J):Xa(St(K,"mouseenter",q),St(K,"mouseleave",Q),J)},[F,$,k,D,N,a,E,R,y,L,H,d,p,I,h,P,O,v,z,B,S]),x.useMemo(()=>{if(!a)return;function X(K){R.pointerType=K.pointerType}return{onPointerDown:X,onPointerEnter:X,onMouseMove(K){const{nativeEvent:q}=K,Q=K.currentTarget,G=N.select("domReferenceElement"),J=N.select("open"),Y=L(G,Q,K.target);if(d&&!fo(R.pointerType))return;if(J&&Y&&R.handleCloseOptions?.blockPointerEvents){const U=N.select("floatingElement");if(U){const Z=R.handleCloseOptions?.getScope?.()??Q.ownerDocument.body;qT(R,{scopeElement:Z,referenceElement:Q,floatingElement:U})}}const re=Y1(I.current);if(J&&!Y||re===0||!Y&&R.restTimeoutPending&&K.movementX**2+K.movementY**2<2)return;R.restTimeout.clear();function M(){if(R.restTimeoutPending=!1,H())return;const U=N.select("open");!R.blockMouseMove&&(!U||Y)&&B()&&N.setOpen(!0,qe(qs,q,Q))}R.pointerType==="touch"?Ts.flushSync(()=>{M()}):Y&&J?M():(R.restTimeoutPending=!0,R.restTimeout.start(re,M))}}},[a,R,H,L,d,N,I,B])}const OU="Escape";function YT(e){return jl&&e.movementX===0&&e.movementY===0}function wh(e,t,a){switch(e){case"vertical":return t;case"horizontal":return a;default:return t||a}}function Sh(e,t){return wh(t,e===Gv||e===Xm,e===Ei||e===Ai)}function $y(e,t,a){return wh(t,e===Xm,a?e===Ei:e===Ai)||e==="Enter"||e===" "||e===""}function MU(e,t,a){return wh(t,a?e===Ei:e===Ai,e===Xm)}function DU(e,t,a,o){const c=a?e===Ai:e===Ei,d=e===Gv;return t==="both"||t==="horizontal"&&o?e===OU:wh(t,c,d)}function XT(e,t){const{listRef:a,activeIndex:o,onNavigate:c=()=>{},enabled:d=!0,selectedIndex:f=null,allowEscape:p=!1,loopFocus:h=!1,nested:b=!1,rtl:y=!1,virtual:v=!1,focusItemOnOpen:j="auto",focusItemOnHover:w=!0,openOnArrowKeyDown:S=!0,disabledIndices:N=void 0,orientation:k="vertical",parentOrientation:A,id:P,resetOnPointerLeave:R=!0,externalTree:C,grid:E}=t,D=E!=null,I="rootStore"in e?e.rootStore:e,O=I.useState("open"),_=I.useState("floatingElement"),z=I.useState("domReferenceElement"),H=I.context.dataRef,B=Wm(_),L=Wv(z),F=Zn(B),$=au(),X=Bi(C),K=x.useRef(j),q=x.useRef(f??-1),Q=x.useRef(null),G=x.useRef(!0),J=Ie(pe=>{c(q.current===-1?null:q.current,pe)}),Y=x.useRef(!!_),re=x.useRef(O),M=x.useRef(!1),U=x.useRef(!1),Z=x.useRef(null),ae=Zn(N),ce=Zn(O),W=Zn(f),ue=Zn(R),ve=eu(),ee=eu(),he=Ie(()=>{function pe(De){v?X?.events.emit("virtualfocus",De):Z.current=fh(De,{sync:M.current,preventScroll:!0})}const Ce=a.current[q.current],Ne=U.current;Ce&&pe(Ce),(M.current?De=>De():De=>ve.request(De))(()=>{const De=a.current[q.current]||Ce;if(!De)return;Ce||pe(De),Te&&(Ne||!G.current)&&De.scrollIntoView?.({block:"nearest",inline:"nearest"})})});Me(()=>{H.current.orientation=k},[H,k]),Me(()=>{d&&(O&&_?(q.current=f??-1,K.current&&f!=null&&(U.current=!0,J())):Y.current&&(q.current=-1,J()))},[d,O,_,f,J]),Me(()=>{if(d){if(!O){M.current=!1;return}if(_)if(o==null){if(M.current=!1,W.current!=null)return;if(Y.current&&(q.current=-1,he()),(!re.current||!Y.current)&&K.current&&(Q.current!=null||K.current===!0&&Q.current==null)){let pe=0;const Ce=()=>{a.current[0]==null?(pe<2&&(pe?be=>ee.request(be):queueMicrotask)(Ce),pe+=1):(q.current=Q.current==null||$y(Q.current,k,y)||b?sh(a):ry(a),Q.current=null,J())};Ce()}}else mo(a.current,o)||(q.current=o,he(),U.current=!1)}},[d,O,_,o,W,b,a,k,y,J,he,ee]),Me(()=>{if(!d||_||!X||v||!Y.current)return;const pe=X.nodesRef.current,Ce=pe.find(De=>De.id===$)?.context?.elements.floating,Ne=ir(Gt(z??Ce??null)),be=pe.some(De=>De.context&&Ze(De.context.elements.floating,Ne));Ce&&!be&&G.current&&Ce.focus({preventScroll:!0})},[d,_,z,X,$,v]),Me(()=>{re.current=O,Y.current=!!_}),Me(()=>{O||(Q.current=null,K.current=j)},[O,j]);const te=o!=null,ke=Ie(pe=>{if(!ce.current)return;const Ce=a.current.indexOf(pe.currentTarget);Ce!==-1&&(q.current!==Ce||o!==Ce)&&(q.current=Ce,J(pe))}),le=Ie(()=>A??X?.nodesRef.current.find(pe=>pe.id===$)?.context?.dataRef?.current.orientation),de=Ie(()=>sh(a,ae.current)),Se=Ie(pe=>{if(G.current=!1,M.current=!0,pe.which===229||!ce.current&&pe.currentTarget===F.current)return;if(b&&DU(pe.key,k,y,D)){Sh(pe.key,le())||Cs(pe),I.setOpen(!1,qe(fy,pe.nativeEvent)),pn(z)&&(v?X?.events.emit("virtualfocus",z):z.focus());return}const Ce=q.current,Ne=sh(a,N),be=ry(a,N);if(L||(pe.key==="Home"&&(Cs(pe),q.current=Ne,J(pe)),pe.key==="End"&&(Cs(pe),q.current=be,J(pe))),E!=null){const De=E(pe,q.current,a,k,h,y,N,Ne,be);if(De!=null&&(q.current=De,J(pe)),k==="both")return}if(Sh(pe.key,k)){if(Cs(pe),O&&!v&&ir(pe.currentTarget.ownerDocument)===pe.currentTarget){q.current=$y(pe.key,k,y)?Ne:be,J(pe);return}$y(pe.key,k,y)?h?Ce>=be?p&&Ce!==a.current.length?q.current=-1:(M.current=!1,q.current=Ne):q.current=_s(a.current,{startingIndex:Ce,disabledIndices:N}):q.current=Math.min(be,_s(a.current,{startingIndex:Ce,disabledIndices:N})):h?Ce<=Ne?p&&Ce!==-1?q.current=a.current.length:(M.current=!1,q.current=be):q.current=_s(a.current,{startingIndex:Ce,decrement:!0,disabledIndices:N}):q.current=Math.max(Ne,_s(a.current,{startingIndex:Ce,decrement:!0,disabledIndices:N})),mo(a.current,q.current)&&(q.current=-1),J(pe)}}),Te=x.useMemo(()=>({onFocus(Ce){M.current=!0,ke(Ce)},onClick:({currentTarget:Ce})=>Ce.focus({preventScroll:!0}),onMouseMove(Ce){YT(Ce)||(M.current=!0,U.current=!1,w&&ke(Ce))},onPointerLeave(Ce){if(!ce.current||!G.current||Ce.pointerType==="touch")return;M.current=!0;const Ne=Ce.relatedTarget;if(!(!w||a.current.includes(Ne))&&ue.current&&(Z.current?.(),Z.current=null,q.current=-1,J(Ce),!v)){const be=F.current,De=ir(Gt(be));be&&Ze(be,De)&&be.focus({preventScroll:!0})}}}),[ke,ce,F,w,a,J,ue,v]),_e=x.useMemo(()=>v&&O&&te&&{"aria-activedescendant":`${P}-${o}`},[v,O,te,P,o]),Ae=x.useMemo(()=>({...L?{}:_e,onKeyDown(pe){if(pe.key==="Tab"&&pe.shiftKey&&O&&!v){const Ce=fs(pe.nativeEvent);if(Ce&&!Ze(F.current,Ce))return;Cs(pe),I.setOpen(!1,qe(xo,pe.nativeEvent)),pn(z)&&z.focus();return}Se(pe)},onPointerMove(pe){YT(pe)||(G.current=!0)}}),[_e,Se,F,L,I,O,v,z]),oe=x.useMemo(()=>{function pe(be){I.setOpen(!0,qe(fy,be.nativeEvent,be.currentTarget))}function Ce(be){j==="auto"&&Jm(be.nativeEvent)&&(K.current=!v)}function Ne(be){K.current=j,j==="auto"&&Jv(be.nativeEvent)&&(K.current=!0)}return{onKeyDown(be){const De=I.select("open");G.current=!1;const Ge=be.key.startsWith("Arrow"),Ct=MU(be.key,le(),y),Tt=Sh(be.key,k),Mt=(b?Ct:Tt)||be.key==="Enter"||be.key.trim()==="";if(v&&De)return Se(be);if(!(!De&&!S&&Ge)){if(Mt){const ot=Sh(be.key,le());Q.current=b&&ot?null:be.key}if(b){Ct&&(Cs(be),De?(q.current=de(),J(be)):pe(be));return}Tt&&(W.current!=null&&(q.current=W.current),Cs(be),!De&&S?pe(be):Se(be),De&&J(be))}},onFocus(be){I.select("open")&&!v&&(q.current=-1,J(be))},onPointerDown:Ne,onPointerEnter:Ne,onMouseDown:Ce,onClick:Ce}},[Se,j,de,b,J,I,S,k,le,y,W,v]),me=x.useMemo(()=>({..._e,...oe}),[_e,oe]);return x.useMemo(()=>d?{reference:me,floating:Ae,item:Te,trigger:oe}:{},[d,me,Ae,oe,Te])}function QT(e,t){const{listRef:a,elementsRef:o,activeIndex:c,onMatch:d,disabledIndices:f,onTyping:p,enabled:h=!0,resetMs:b=750,selectedIndex:y=null}=t,v="rootStore"in e?e.rootStore:e,j=v.useState("open"),w=er(),S=x.useRef(""),N=x.useRef(y??c??-1),k=x.useRef(null),A=Ie(C=>{function E(F){return o?.current[F]}function D(F){const $=E(F);return $&&!rh($)||$?.matches(":disabled")?!1:f==null||!ho(Ir,F,f)}function I(F,$,X=0){if(F.length===0)return-1;const K=(X%F.length+F.length)%F.length,q=$.toLowerCase();for(let Q=0;Q0&&C.key===" "&&(Cs(C),p?.(!0)),S.current.length>0&&S.current[0]!==" "&&I(O,S.current)===-1&&C.key!==" "&&p?.(!1),O==null||C.key.length!==1||C.ctrlKey||C.metaKey||C.altKey)return;j&&C.key!==" "&&(Cs(C),p?.(!0));const _=S.current==="";_&&(N.current=y??c??-1),O.every((F,$)=>F&&D($)?F[0]?.toLowerCase()!==F[1]?.toLowerCase():!0)&&S.current===C.key&&(S.current="",N.current=k.current),S.current+=C.key,w.start(b,()=>{S.current="",N.current=k.current,p?.(!1)});const B=((_?y??c??-1:N.current)??0)+1,L=I(O,S.current,B);L!==-1?(d?.(L),k.current=L):C.key!==" "&&(S.current="",p?.(!1))}),P=Ie(C=>{const E=C.relatedTarget,D=v.select("domReferenceElement"),I=v.select("floatingElement");Ze(D,E)||Ze(I,E)||(w.clear(),S.current="",N.current=k.current,p?.(!1))});Me(()=>{!j&&y!==null||(w.clear(),k.current=null,S.current!==""&&(S.current=""))},[j,y,w]);const R=x.useMemo(()=>({onKeyDown:A,onBlur:P}),[A,P]);return x.useMemo(()=>h?{reference:R,floating:R}:{},[h,R])}const ZT=.1,IU=ZT*ZT,yn=.5;function Nh(e,t,a,o,c,d){return o>=t!=d>=t&&e<=(c-a)*(t-o)/(d-o)+a}function kh(e,t,a,o,c,d,f,p,h,b){let y=!1;return Nh(e,t,a,o,c,d)&&(y=!y),Nh(e,t,c,d,f,p)&&(y=!y),Nh(e,t,f,p,h,b)&&(y=!y),Nh(e,t,h,b,a,o)&&(y=!y),y}function PU(e,t,a){return e>=a.x&&e<=a.x+a.width&&t>=a.y&&t<=a.y+a.height}function Ch(e,t,a,o,c,d){const f=Math.min(a,c),p=Math.max(a,c),h=Math.min(o,d),b=Math.max(o,d);return e>=f&&e<=p&&t>=h&&t<=b}function WT(e={}){const{blockPointerEvents:t=!1}=e,a=new la,o=({x:c,y:d,placement:f,elements:p,onClose:h,nodeId:b,tree:y})=>{const v=f?.split("-")[0];let j=!1,w=null,S=null,N=typeof performance<"u"?performance.now():0;function k(P,R){const C=performance.now(),E=C-N;if(w===null||S===null||E===0)return w=P,S=R,N=C,!1;const D=P-w,I=R-S,O=D*D+I*I,_=E*E*IU;return w=P,S=R,N=C,O<_}function A(){a.clear(),h()}return function(R){a.clear();const C=p.domReference,E=p.floating;if(!C||!E||v==null||c==null||d==null)return;const{clientX:D,clientY:I}=R,O=fs(R),_=R.type==="mouseleave",z=Ze(E,O),H=Ze(C,O);if(z&&(j=!0,!_))return;if(H&&(j=!1,!_)){j=!0;return}if(_&&Rt(R.relatedTarget)&&Ze(E,R.relatedTarget))return;function B(){return!!(y&&uo(y.nodesRef.current,b).length>0)}function L(){B()||A()}if(B())return;const F=C.getBoundingClientRect(),$=E.getBoundingClientRect(),X=c>$.right-$.width/2,K=d>$.bottom-$.height/2,q=$.width>F.width,Q=$.height>F.height,G=(q?F:$).left,J=(q?F:$).right,Y=(Q?F:$).top,re=(Q?F:$).bottom;if(v==="top"&&d>=F.bottom-1||v==="bottom"&&d<=F.top+1||v==="left"&&c>=F.right-1||v==="right"&&c<=F.left+1){L();return}let M=!1;switch(v){case"top":M=Ch(D,I,G,F.top+1,J,$.bottom-1);break;case"bottom":M=Ch(D,I,G,$.top+1,J,F.bottom-1);break;case"left":M=Ch(D,I,$.right-1,re,F.left+1,Y);break;case"right":M=Ch(D,I,F.right-1,re,$.left+1,Y);break}if(M)return;if(j&&!PU(D,I,F)){L();return}if(!_&&k(D,I)){L();return}let U=!1;switch(v){case"top":{const Z=q?yn/2:yn*4,ae=q||X?c+Z:c-Z,ce=q?c-Z:X?c+Z:c-Z,W=d+yn+1,ue=X||q?$.bottom-yn:$.top,ve=X?q?$.bottom-yn:$.top:$.bottom-yn;U=kh(D,I,ae,W,ce,W,$.left,ue,$.right,ve);break}case"bottom":{const Z=q?yn/2:yn*4,ae=q||X?c+Z:c-Z,ce=q?c-Z:X?c+Z:c-Z,W=d-yn,ue=X||q?$.top+yn:$.bottom,ve=X?q?$.top+yn:$.bottom:$.top+yn;U=kh(D,I,ae,W,ce,W,$.left,ue,$.right,ve);break}case"left":{const Z=Q?yn/2:yn*4,ae=Q||K?d+Z:d-Z,ce=Q?d-Z:K?d+Z:d-Z,W=c+yn+1,ue=K||Q?$.right-yn:$.left,ve=K?Q?$.right-yn:$.left:$.right-yn;U=kh(D,I,ue,$.top,ve,$.bottom,W,ae,W,ce);break}case"right":{const Z=Q?yn/2:yn*4,ae=Q||K?d+Z:d-Z,ce=Q?d-Z:K?d+Z:d-Z,W=c-yn,ue=K||Q?$.left+yn:$.right,ve=K?Q?$.left+yn:$.right:$.left+yn;U=kh(D,I,W,ae,W,ce,ue,$.top,ve,$.bottom);break}}U?j||a.start(40,L):L()}};return o.__options={...e,blockPointerEvents:t},o}const _U={...Hy,disabled:e=>e.disabled,instantType:e=>e.instantType,isInstantPhase:e=>e.isInstantPhase,trackCursorAxis:e=>e.trackCursorAxis,disableHoverablePopup:e=>e.disableHoverablePopup,lastOpenChangeReason:e=>e.openChangeReason,closeOnClick:e=>e.closeOnClick,closeDelay:e=>e.closeDelay,adaptiveOrigin:e=>e.adaptiveOrigin};class LU extends ou{constructor(a,o,c){const d=new vh;super(zU(a,d,o,c),BU(d),_U);cn(this,"setOpen",(a,o)=>{kU(this,a,o,{extraState:{openChangeReason:o.reason}})})}cancelPendingOpen(a){this.state.floatingRootContext.dispatchOpenChange(!1,qe(go,a))}}function zU(e,t,a,o=!1){return{...zy(t,a,o),disabled:!1,instantType:void 0,isInstantPhase:!1,trackCursorAxis:"none",disableHoverablePopup:!1,openChangeReason:null,closeOnClick:!0,closeDelay:0,adaptiveOrigin:void 0,...e}}function BU(e){return{popupRef:x.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerElements:e}}const HU=uh(function(t){const{disabled:a=!1,defaultOpen:o=!1,open:c,disableHoverablePopup:d=!1,trackCursorAxis:f="none",actionsRef:p,onOpenChange:h,onOpenChangeComplete:b,handle:y,triggerId:v,defaultTriggerId:j=null,children:w}=t,S=My((H,B)=>new LU({open:o,openProp:c,activeTriggerId:j,triggerIdProp:v},H,B));S.useControlledProp("openProp",c),S.useControlledProp("triggerIdProp",v),S.useContextCallback("onOpenChange",h),S.useContextCallback("onOpenChangeComplete",b);const N=S.useState("open"),k=!a&&N,A=S.useState("activeTriggerId"),P=S.useState("mounted"),R=S.useState("payload");S.useSyncedValues({trackCursorAxis:f,disableHoverablePopup:d,disabled:a}),Py(S,{closeOnActiveTriggerUnmount:!0});const{forceUnmount:C,transitionStatus:E}=_y(k,S),D=S.useState("isInstantPhase"),I=S.useState("instantType"),O=S.useState("lastOpenChangeReason"),_=x.useRef(null);Me(()=>{N&&a&&S.setOpen(!1,qe(N4))},[N,a,S]),Me(()=>{E==="ending"&&O===Qn||E!=="ending"&&D?(I!=="delay"&&(_.current=I),S.set("instantType","delay")):_.current!==null&&(S.set("instantType",_.current),_.current=null)},[E,D,O,I,S]),Me(()=>{k&&A==null&&S.set("payload",void 0)},[S,A,k]),x.useImperativeHandle(p,()=>({unmount:C,close:()=>S.setOpen(!1,qe(py))}),[C,S]);const z=k||P||!a&&f!=="none";return s.jsxs(K1.Provider,{value:S,children:[y&&s.jsx(Dy,{handle:y,store:S}),z&&s.jsx(UU,{store:S,disabled:a,trackCursorAxis:f}),typeof w=="function"?w({payload:R}):w]})});function UU({store:e,disabled:t,trackCursorAxis:a}){const o=e.useState("floatingRootContext"),c=pf(o,{enabled:!t,referencePress:()=>e.select("closeOnClick")}),d=CH(o,{enabled:!t&&a!=="none",axis:a==="none"?void 0:a}),f=x.useMemo(()=>ta(d.reference,c.reference),[d.reference,c.reference]);return Ly(e,{activeTriggerProps:f,inactiveTriggerProps:f,popupProps:c.floating??mn}),null}const JT=x.createContext(void 0);function VU(){return x.useContext(JT)}const FU=600,eE="data-base-ui-tooltip-trigger";function tE(e){if("composedPath"in e){const a=e.composedPath();for(let o=0;ok.select("transitionStatus")==="ending",shouldOpen(){return!G.current}}),ae=AU(C,{enabled:!X}).reference,ce=he=>{const te=G.current,ke=tE(he),le=U(ke),de=E.current,Se=de&&ke&&Ze(de,ke);if(le&&k.select("open")&&k.select("lastOpenChangeReason")===qs){k.setOpen(!1,qe(qs,he));return}if(te&&!le&&Se&&!K.current&&!k.select("open")&&de&&fo(Y.current)){const Te=()=>{!G.current&&!K.current&&!k.select("open")&&k.setOpen(!0,qe(qs,he,de))},_e=re();_e===0?(J.clear(),Te()):J.start(_e,Te)}},W=k.useState("triggerProps",O);return yt("button",t,{state:{open:R},ref:[a,I,E],props:[Z,ae,O||q!=="none"?W:void 0,{onMouseOver(he){ce(he.nativeEvent)},onFocus(he){M(tE(he.nativeEvent))&&he.preventBaseUIHandler()},onMouseLeave(){G.current=!1,J.clear(),Y.current=void 0},onPointerEnter(he){Y.current=he.pointerType},onPointerDown(he){Y.current=he.pointerType,k.set("closeOnClick",y),y&&!k.select("open")&&k.cancelPendingOpen(he.nativeEvent)},onClick(he){y&&!k.select("open")&&k.cancelPendingOpen(he.nativeEvent)},id:A,[Qv]:X?"":void 0,[eE]:X?void 0:""},w],stateAttributesMapping:Kv})}),nE=x.createContext(void 0);function GU(){const e=x.useContext(nE);if(e===void 0)throw new Error(un(70));return e}const KU=x.forwardRef(function(t,a){const{children:o,container:c,className:d,render:f,style:p,...h}=t,{node:b,subtree:y}=iT({container:c,ref:a,componentProps:t,elementProps:h});return!y&&!b?null:s.jsxs(x.Fragment,{children:[y,b&&Ts.createPortal(o,b)]})}),YU=x.forwardRef(function(t,a){const{keepMounted:o=!1,...c}=t;return uf().useState("mounted")||o?s.jsx(nE.Provider,{value:o,children:s.jsx(KU,{ref:a,...c})}):null}),sE=x.createContext(void 0);function rE(){const e=x.useContext(sE);if(e===void 0)throw new Error(un(71));return e}const XU=x.createContext(void 0);function gf(){return x.useContext(XU)?.direction??"ltr"}const QU=e=>({name:"arrow",options:e,async fn(t){const{x:a,y:o,placement:c,rects:d,platform:f,elements:p,middlewareData:h}=t,{element:b,padding:y=0,offsetParent:v="real"}=po(e,t)||{};if(b==null)return{};const j=x1(y),w={x:a,y:o},S=ny(c),N=ty(S),k=await f.getDimensions(b),A=S==="y",P=A?"top":"left",R=A?"bottom":"right",C=A?"clientHeight":"clientWidth",E=d.reference[N]+d.reference[S]-w[S]-d.floating[N],D=w[S]-d.reference[S],I=v==="real"?await f.getOffsetParent?.(b):p.floating;let O=p.floating[C]||d.floating[N];(!O||!await f.isElement?.(I))&&(O=p.floating[C]||d.floating[N]);const _=E/2-D/2,z=O/2-k[N]/2-1,H=Math.min(j[P],z),B=Math.min(j[R],z),L=H,F=O-k[N]-B,$=O/2-k[N]/2+_,X=m1(L,$,F),K=!h.arrow&&Nl(c)!=null&&$!==X&&d.reference[N]/2-(${const{name:a,fn:o}=QU(e);return{name:a,fn:o,options:[e,t]}},WU={name:"hide",async fn(e){const{width:t,height:a,x:o,y:c}=e.rects.reference,d=t===0&&a===0&&o===0&&c===0,f=await e.platform.detectOverflow(e,{elementContext:"reference"});return{data:{referenceHidden:f.top-a>=0||f.right-t>=0||f.bottom-a>=0||f.left-t>=0||d}}}},JU={sideX:"left",sideY:"top"},eV="--available-width",tV="--available-height",nV="--anchor-width",sV="--anchor-height",rV="--transform-origin",aE=eV,lE=tV;function oE(e,t,a){const o=e==="inline-start"||e==="inline-end";return{top:"top",right:o?a?"inline-start":"inline-end":"right",bottom:"bottom",left:o?a?"inline-end":"inline-start":"left"}[t]}function iE(e,t,a){const{rects:o,placement:c}=e;return{side:oE(t,ra(c),a),align:Nl(c)||"center",anchor:{width:o.reference.width,height:o.reference.height},positioner:{width:o.floating.width,height:o.floating.height}}}function Th(e){return aV(e,TU)}function aV(e,t){const{anchor:a,positionMethod:o="absolute",side:c="bottom",sideOffset:d=0,align:f="center",alignOffset:p=0,collisionBoundary:h,collisionPadding:b=5,sticky:y=!1,arrowPadding:v=5,disableAnchorTracking:j=!1,inline:w,keepMounted:S=!1,floatingRootContext:N,mounted:k,collisionAvoidance:A,shift:P,nodeId:R,adaptiveOrigin:C,lazyFlip:E=!1,externalTree:D}=e,[I,O]=x.useState(null);!k&&I!==null&&O(null);const _=A.side||"flip",z=A.align||"flip",H=A.fallbackAxisSide||"end",B=P?.crossAxis??!1,L=P?.rootBoundary,F=typeof a=="function"?a:void 0,$=Ie(F),X=F?$:a,K=Zn(a),q=Zn(k),G=gf()==="rtl",J=I||{top:"top",right:"right",bottom:"bottom",left:"left","inline-end":G?"left":"right","inline-start":G?"right":"left"}[c],Y=f==="center"?J:`${J}-${f}`;let re=b;typeof re=="number"?re={top:re,right:re,bottom:re,left:re}:re&&(re={top:re.top||0,right:re.right||0,bottom:re.bottom||0,left:re.left||0});const M=1,U=c==="bottom"?M:0,Z=c==="top"?M:0,ae=c==="right"?M:0,ce=c==="left"?M:0,W={boundary:h==="clipping-ancestors"?"clippingAncestors":h,padding:re},ue=x.useRef(null),ve=Zn(d),ee=Zn(p),he=typeof d!="function"?d:0,te=typeof p!="function"?p:0,ke=[];w&&ke.push(w),ke.push(iU(nt=>{const Dt=iE(nt,c,G),qt=typeof ve.current=="function"?ve.current(Dt):ve.current,es=typeof ee.current=="function"?ee.current(Dt):ee.current;return{mainAxis:qt,crossAxis:es,alignmentAxis:es}},[he,te,G,c]));const le=z==="none"&&_!=="shift",de=!le&&(y||B||_==="shift"),Se=_==="none"?null:dU({...W,padding:{top:re.top+M+U,right:re.right+M+ce,bottom:re.bottom+M+Z,left:re.left+M+ae},mainAxis:!B&&_==="flip",crossAxis:z==="flip"?"alignment":!1,fallbackAxisSideDirection:H}),Te=le?null:cU({...W,rootBoundary:L,mainAxis:z!=="none",crossAxis:de,limiter:y||B?void 0:uU(nt=>{if(!ue.current)return{};const{width:Dt,height:qt}=ue.current.getBoundingClientRect(),es=aa(ra(nt.placement)),Fn=es==="y"?Dt:qt,$n=es==="y"?re.left+re.right:re.top+re.bottom;return{offset:Fn/2+$n/2}})},[W,y,B,L,re,z]);_==="shift"||z==="shift"||f==="center"?ke.push(Te,Se):ke.push(Se,Te),ke.push(fU({...W,apply({elements:{floating:nt},availableWidth:Dt,availableHeight:qt,rects:es}){if(!q.current)return;const Fn=nt.style;Fn.setProperty(aE,`${Dt}px`),Fn.setProperty(lE,`${qt}px`);const $n=Cn(nt).devicePixelRatio||1,{x:Dn,y:en,width:cs,height:Et}=es.reference,xt=(Math.round((Dn+cs)*$n)-Math.round(Dn*$n))/$n,jt=(Math.round((en+Et)*$n)-Math.round(en*$n))/$n;Fn.setProperty(nV,`${xt}px`),Fn.setProperty(sV,`${jt}px`)}}),ZU(nt=>({element:ue.current||Gt(nt.elements.floating).createElement("div"),padding:ue.current?v:0,offsetParent:"floating"}),[v]),{name:"transformOrigin",fn(nt){const{elements:{floating:Dt},middlewareData:qt,placement:es,platform:Fn,rects:$n,y:Dn}=nt,en=ra(es),cs=Nl(es),Et=aa(en)==="y",xt=ue.current,jt=typeof d=="function"?d(iE(nt,c,G)):d;let wt;if(!xt&&cs&&Math.abs(Et?qt.shift?.x||0:qt.shift?.y||0)<=1)wt=cs==="start"===(Et&&Fn.isRTL?.(Dt)===!0)?"100%":"0%";else{const ar=Et?qt.arrow?.x||0:qt.arrow?.y||0,Fr=Et?xt?.clientWidth||0:xt?.clientHeight||0;wt=`${ar+Fr/2}px`}let Tr=en==="top"||en==="left"?`calc(100% + ${jt}px)`:`${-jt}px`;return de&&Et&&Math.abs(qt.shift?.y||0)>jt&&(Tr=`${$n.reference.y+$n.reference.height/2-Dn}px`),Dt.style.setProperty(rV,Et?`${wt} ${Tr}`:`${Tr} ${wt}`),{}}},WU,C),Me(()=>{!k&&N&&N.update({referenceElement:null,floatingElement:null,domReferenceElement:null,positionReference:null})},[k,N]);const _e=x.useMemo(()=>({ancestorScroll:!j,elementResize:!j&&typeof ResizeObserver<"u",layoutShift:!j&&typeof IntersectionObserver<"u"}),[j]),{refs:Ae,elements:oe,x:me,y:pe,middlewareData:Ce,update:Ne,placement:be,context:De,isPositioned:Ge,floatingStyles:Ct}=t({rootContext:N,open:S?k:void 0,placement:Y,middleware:ke,strategy:o,whileElementsMounted:S?void 0:(...nt)=>TT(...nt,_e),nodeId:R,externalTree:D}),{sideX:Tt,sideY:Mt}=Ce.adaptiveOrigin||JU,ot=Ge?o:"fixed",Kn=x.useMemo(()=>{let nt;return Ge?C?nt={position:ot,[Tt]:me,[Mt]:pe}:nt={...Ct,position:ot}:nt={position:ot,top:0,left:0},nt[aE]="100vw",nt[lE]="100vh",Ge||(nt.opacity=0),nt},[C,ot,Tt,me,Mt,pe,Ct,Ge]),ms=x.useRef(null);Me(()=>{if(!k)return;const nt=K.current,Dt=typeof nt=="function"?nt():nt,es=(cE(Dt)?Dt.current:Dt)||null||null;es!==ms.current&&(Ae.setPositionReference(es),ms.current=es)},[k,Ae,X,K]),x.useEffect(()=>{if(!k)return;const nt=K.current;typeof nt!="function"&&cE(nt)&&nt.current!==ms.current&&(Ae.setPositionReference(nt.current),ms.current=nt.current)},[k,Ae,X,K]),x.useEffect(()=>{if(S&&k&&oe.reference&&oe.floating)return TT(oe.reference,oe.floating,Ne,_e)},[S,k,oe,Ne,_e]);const Yn=ra(be),vs=oE(c,Yn,G),it=Nl(be)||"center",$t=!!Ce.hide?.referenceHidden;Me(()=>{E&&k&&Ge&&Yn!==J&&O(Yn)},[E,k,Ge,Yn,J]);const Vn=x.useMemo(()=>({position:"absolute",top:Ce.arrow?.y,left:Ce.arrow?.x}),[Ce.arrow]),rn=Ce.arrow?.centerOffset!==0;return x.useMemo(()=>({positionerStyles:Kn,arrowStyles:Vn,arrowRef:ue,arrowUncentered:rn,side:vs,align:it,physicalSide:Yn,anchorHidden:$t,refs:Ae,context:De,isPositioned:Ge,update:Ne}),[Kn,Vn,ue,rn,vs,it,Yn,$t,Ae,De,Ge,Ne])}function cE(e){return e!=null&&"current"in e}function xf(e){return e==="starting"?gH:mn}function Eh(e,t,{styles:a,transitionStatus:o,props:c,refs:d,hidden:f,inert:p=!1}){const h={...a};return p&&(h.pointerEvents="none"),yt("div",e,{state:t,ref:d,props:[{role:"presentation",hidden:f,style:h},xf(o),c],stateAttributesMapping:Zc})}const lV=x.forwardRef(function(t,a){const{render:o,className:c,anchor:d,positionMethod:f="absolute",side:p="top",align:h="center",sideOffset:b=0,alignOffset:y=0,collisionBoundary:v="clipping-ancestors",collisionPadding:j=5,arrowPadding:w=5,sticky:S=!1,disableAnchorTracking:N=!1,collisionAvoidance:k=aT,style:A,...P}=t,R=uf(),C=GU(),E=R.useState("open"),D=R.useState("mounted"),I=R.useState("trackCursorAxis"),O=R.useState("disableHoverablePopup"),_=R.useState("floatingRootContext"),z=R.useState("instantType"),H=R.useState("transitionStatus"),B=R.useState("adaptiveOrigin"),L=Th({anchor:d,positionMethod:f,floatingRootContext:_,mounted:D,side:p,sideOffset:b,align:h,alignOffset:y,collisionBoundary:v,collisionPadding:j,sticky:S,arrowPadding:w,disableAnchorTracking:N,keepMounted:C,collisionAvoidance:k,adaptiveOrigin:B}),F=x.useMemo(()=>({open:E,side:L.side,align:L.align,anchorHidden:L.anchorHidden,instant:I!=="none"?"tracking-cursor":z}),[E,L.side,L.align,L.anchorHidden,I,z]),$=Eh(t,F,{styles:L.positionerStyles,transitionStatus:H,props:P,refs:[a,R.useStateSetter("positionerElement")],hidden:!D,inert:!E||I==="both"||O});return s.jsx(sE.Provider,{value:L,children:$})}),oV=x.forwardRef(function(t,a){const{render:o,className:c,style:d,...f}=t,p=uf(),{side:h,align:b}=rE(),y=p.useState("open"),v=p.useState("instantType"),j=p.useState("transitionStatus"),w=p.useState("popupProps"),S=p.useState("floatingRootContext"),N=p.useState("disabled"),k=p.useState("closeDelay");oa({open:y,ref:p.context.popupRef,onComplete(){y&&p.context.onOpenChangeComplete?.(!0)}}),GT(S,{enabled:!N,closeDelay:k});const A=p.useStateSetter("popupElement");return yt("div",t,{state:{open:y,side:h,align:b,instant:v,transitionStatus:j},ref:[a,p.context.popupRef,A],props:[mf,w,xf(j),f],stateAttributesMapping:Xv})}),iV=x.forwardRef(function(t,a){const{render:o,className:c,style:d,...f}=t,p=uf(),{arrowRef:h,side:b,align:y,arrowUncentered:v,arrowStyles:j}=rE(),w=p.useState("open"),S=p.useState("instantType");return yt("div",t,{state:{open:w,side:b,align:y,uncentered:v,instant:S},ref:[a,h],props:[{style:j,"aria-hidden":!0},f],stateAttributesMapping:Zc})}),cV=function(t){const{delay:a,closeDelay:o,timeout:c=400}=t,d=x.useMemo(()=>({open:a,close:o}),[a,o]);return s.jsx(JT.Provider,{value:a,children:s.jsx(uH,{delay:d,timeoutMs:c,children:t.children})})};function Ah(e){return zv(19)?e:e?"true":void 0}function uV(e){const[t,a]=x.useState({current:e,previous:null});return Object.is(e,t.current)||a({current:e,previous:t.current}),t.previous}function dV(e){return s.jsx(cV,{"data-slot":"tooltip-provider",...e})}function Ui(e){return s.jsx(HU,{"data-slot":"tooltip",...e})}function Vi(e){return s.jsx(qU,{"data-slot":"tooltip-trigger",...e})}function Fi({className:e,sideOffset:t=8,side:a="top",children:o,...c}){return s.jsx(YU,{children:s.jsx(lV,{sideOffset:t,side:a,className:"z-[35]",children:s.jsx(oV,{"data-slot":"tooltip-content",className:Ue("max-w-[288px] rounded-md bg-primary px-2.5 py-2 text-[11.5px] leading-[1.55] text-primary-on shadow-3","break-words outline-none","transition-[opacity,transform] duration-150 ease-out","data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95","data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",e),...c,children:o})})})}function fV({className:e,...t}){return s.jsx(iV,{className:Ue("size-2 rotate-45 rounded-[1px] bg-primary","data-[side=top]:-bottom-1 data-[side=bottom]:-top-1",e),...t})}const uE=x.createContext(void 0);function iu(e){const t=x.useContext(uE);if(!e&&t===void 0)throw new Error(un(27));return t}const dE=x.forwardRef(function(t,a){const{render:o,className:c,style:d,forceRender:f=!1,...p}=t,h=iu(),b=h.useState("open"),y=h.useState("nested"),v=h.useState("mounted"),j=h.useState("transitionStatus");return yt("div",t,{state:{open:b,transitionStatus:j},ref:[h.context.backdropRef,a],stateAttributesMapping:Xv,props:[{role:"presentation",hidden:!v,style:{userSelect:"none",WebkitUserSelect:"none"}},p],enabled:f||!y})}),fE=x.forwardRef(function(t,a){const{render:o,className:c,style:d,disabled:f=!1,nativeButton:p=!0,...h}=t,b=iu(),y=b.useState("open"),{getButtonProps:v,buttonRef:j}=na({disabled:f,native:p}),w={disabled:f};function S(N){y&&b.setOpen(!1,qe(dy,N.nativeEvent))}return yt("button",t,{state:w,ref:[a,j],props:[{onClick:S},h,v]})}),pE=x.createContext(void 0);function pV(){const e=x.useContext(pE);if(e===void 0)throw new Error(un(26));return e}const qy="ArrowUp",Gy="ArrowDown",Ky="ArrowLeft",Yy="ArrowRight",Xy="Home",Qy="End",Rh=new Set([qy,Gy,Ky,Yy,Xy,Qy]),mE="Shift",mV=[mE,"Control","Alt","Meta"];function hV(e){return pn(e)&&e.tagName==="INPUT"}function hE(e){return!!(hV(e)&&e.selectionStart!=null||pn(e)&&e.tagName==="TEXTAREA")}function gE(e,t,a,o){if(!e||!t||!t.scrollTo)return;let c=e.scrollLeft,d=e.scrollTop;const f=e.clientWidthe.scrollLeft+e.clientWidth-b.scrollPaddingRight?c=h+t.offsetWidth+y.scrollMarginRight-e.clientWidth+b.scrollPaddingRight:h-y.scrollMarginLefte.scrollLeft+e.clientWidth-b.scrollPaddingRight&&(c=h+t.offsetWidth+y.scrollMarginRight-e.clientWidth+b.scrollPaddingRight))}if(p&&o!=="horizontal"){const h=xE(e,t,"top"),b=Oh(e),y=Oh(t);h-y.scrollMarginTope.scrollTop+e.clientHeight-b.scrollPaddingBottom&&(d=h+t.offsetHeight+y.scrollMarginBottom-e.clientHeight+b.scrollPaddingBottom)}e.scrollTo({left:c,top:d,behavior:"auto"})}function xE(e,t,a){const o=a==="left"?"offsetLeft":"offsetTop";let c=0;for(;t.offsetParent&&(c+=t[o],t.offsetParent!==e);)t=t.offsetParent;return c}function Oh(e){const t=getComputedStyle(e);return{scrollMarginTop:parseFloat(t.scrollMarginTop)||0,scrollMarginRight:parseFloat(t.scrollMarginRight)||0,scrollMarginBottom:parseFloat(t.scrollMarginBottom)||0,scrollMarginLeft:parseFloat(t.scrollMarginLeft)||0,scrollPaddingTop:parseFloat(t.scrollPaddingTop)||0,scrollPaddingRight:parseFloat(t.scrollPaddingRight)||0,scrollPaddingBottom:parseFloat(t.scrollPaddingBottom)||0,scrollPaddingLeft:parseFloat(t.scrollPaddingLeft)||0}}const gV="--nested-dialogs",xV="data-nested-dialog-open",bV={...Zc,...co,nestedDialogOpen(e){return e?{[xV]:""}:null}},bE=x.forwardRef(function(t,a){const{render:o,className:c,style:d,finalFocus:f,initialFocus:p,...h}=t,b=iu(),y=b.useState("descriptionElementId"),v=b.useState("disablePointerDismissal"),j=b.useState("floatingRootContext"),w=b.useState("popupProps"),S=b.useState("modal"),N=b.useState("mounted"),k=b.useState("nested"),A=b.useState("nestedOpenDialogCount"),P=b.useState("open"),R=b.useState("openMethod"),C=b.useState("titleElementId"),E=b.useState("transitionStatus"),D=b.useState("role"),I=j.useState("floatingId");pV(),oa({open:P,ref:b.context.popupRef,onComplete(){P&&b.context.onOpenChangeComplete?.(!0)}});const O=p===void 0?_T(b.context.popupRef):p,_=A>0,z=b.useStateSetter("popupElement"),B=yt("div",t,{state:{open:P,nested:k,transitionStatus:E,nestedDialogOpen:_},props:[w,{id:I,"aria-labelledby":C,"aria-describedby":y,role:D,...mf,hidden:!N,onKeyDown(L){Rh.has(L.key)&&L.stopPropagation()},style:{[gV]:A}},h],ref:[a,b.context.popupRef,z],stateAttributesMapping:bV});return s.jsx(mh,{context:j,openInteractionType:R,disabled:!N,closeOnFocusOut:!v,initialFocus:O,returnFocus:f,modal:S!==!1,restoreFocus:"popup",children:B})}),Mh=x.forwardRef(function(t,a){const{cutout:o,...c}=t;let d;if(o){const f=o.getBoundingClientRect();d=`polygon(0% 0%,100% 0%,100% 100%,0% 100%,0% 0%,${f.left}px ${f.top}px,${f.left}px ${f.bottom}px,${f.right}px ${f.bottom}px,${f.right}px ${f.top}px,${f.left}px ${f.top}px)`}return s.jsx("div",{ref:a,role:"presentation","data-base-ui-inert":"",...c,style:{position:"fixed",inset:0,userSelect:"none",WebkitUserSelect:"none",clipPath:d}})}),vE=x.forwardRef(function(t,a){const{keepMounted:o=!1,...c}=t,d=iu(),f=d.useState("mounted"),p=d.useState("modal"),h=d.useState("open");return f||o?s.jsx(pE.Provider,{value:o,children:s.jsxs(ph,{ref:a,...c,children:[f&&p===!0&&s.jsx(Mh,{ref:d.context.internalBackdropRef,inert:Ah(!h)}),t.children]})}):null});let yE={},jE={},wE="";function Dh(e,t){return Qd(e)?e:t}function SE(e,t,a){return/hidden|clip/.test(e.getComputedStyle(Dh(t,a)).overflowY)}function vV(e){if(typeof document>"u")return!1;const t=Gt(e);return Cn(t).innerWidth-t.documentElement.clientWidth>0}function yV(e){if(!(typeof CSS<"u"&&CSS.supports&&CSS.supports("scrollbar-gutter","stable"))||typeof document>"u")return!1;const a=Gt(e),o=a.documentElement,c=a.body,d=Dh(o,c),f=d.style.overflowY,p=o.style.scrollbarGutter;o.style.scrollbarGutter="stable",d.style.overflowY="scroll";const h=d.offsetWidth;d.style.overflowY="hidden";const b=d.offsetWidth;return d.style.overflowY=f,o.style.scrollbarGutter=p,h===b}function jV(e){const t=Gt(e),a=t.documentElement,o=t.body,c=Dh(a,o),d={overflowY:c.style.overflowY,overflowX:c.style.overflowX};return Object.assign(c.style,{overflowY:"hidden",overflowX:"hidden"}),()=>{Object.assign(c.style,d)}}function wV(e){const t=Gt(e),a=t.documentElement,o=t.body,c=Cn(a);let d=0,f=0,p=!1;const h=Ga.create();if(jl&&(c.visualViewport?.scale??1)!==1)return()=>{};function b(){const w=c.getComputedStyle(a),S=c.getComputedStyle(o),A=(w.scrollbarGutter||"").includes("both-edges")?"stable both-edges":"stable";d=a.scrollTop,f=a.scrollLeft,yE={scrollbarGutter:a.style.scrollbarGutter,overflowY:a.style.overflowY,overflowX:a.style.overflowX},wE=a.style.scrollBehavior,jE={position:o.style.position,height:o.style.height,width:o.style.width,boxSizing:o.style.boxSizing,overflowY:o.style.overflowY,overflowX:o.style.overflowX,scrollBehavior:o.style.scrollBehavior};const P=a.scrollHeight>a.clientHeight,R=a.scrollWidth>a.clientWidth,C=w.overflowY==="scroll"||S.overflowY==="scroll",E=w.overflowX==="scroll"||S.overflowX==="scroll",D=Math.max(0,c.innerWidth-o.clientWidth),I=Math.max(0,c.innerHeight-o.clientHeight),O=parseFloat(S.marginTop)+parseFloat(S.marginBottom),_=parseFloat(S.marginLeft)+parseFloat(S.marginRight),z=Dh(a,o);if(p=yV(e),p){a.style.scrollbarGutter=A,z.style.overflowY="hidden",z.style.overflowX="hidden";return}Object.assign(a.style,{scrollbarGutter:A,overflowY:"hidden",overflowX:"hidden"}),(P||C)&&(a.style.overflowY="scroll"),(R||E)&&(a.style.overflowX="scroll"),Object.assign(o.style,{position:"relative",height:O||I?`calc(100dvh - ${O+I}px)`:"100dvh",width:_||D?`calc(100vw - ${_+D}px)`:"100vw",boxSizing:"border-box",overflowY:"hidden",overflowX:"hidden",scrollBehavior:"unset"}),o.scrollTop=d,o.scrollLeft=f,a.setAttribute("data-base-ui-scroll-locked",""),a.style.scrollBehavior="unset"}function y(){Object.assign(a.style,yE),Object.assign(o.style,jE),p||(a.scrollTop=d,a.scrollLeft=f,a.removeAttribute("data-base-ui-scroll-locked"),a.style.scrollBehavior=wE)}function v(){y(),h.request(b)}b();const j=St(c,"resize",v);return()=>{h.cancel(),y(),typeof c.removeEventListener=="function"&&j()}}class SV{constructor(){cn(this,"lockCount",0);cn(this,"restore",null);cn(this,"timeoutLock",la.create());cn(this,"timeoutUnlock",la.create());cn(this,"release",()=>{this.lockCount-=1,this.lockCount===0&&this.restore&&this.timeoutUnlock.start(0,this.unlock)});cn(this,"unlock",()=>{this.lockCount===0&&this.restore&&(this.restore?.(),this.restore=null)})}acquire(t){return this.lockCount+=1,this.lockCount===1&&this.restore===null&&this.timeoutLock.start(0,()=>this.lock(t)),this.release}lock(t){if(this.lockCount===0||this.restore!==null)return;const a=Gt(t),o=a.documentElement,c=a.body,d=Cn(o);if(SE(d,o,c)){const p=new d.MutationObserver(()=>{SE(d,o,c)||(p.disconnect(),this.restore=null,this.lock(t))}),h={attributes:!0};p.observe(o,h),p.observe(c,h),this.restore=()=>p.disconnect();return}const f=tf||!vV(t);this.restore=f?jV(t):wV(t)}}const NV=new SV;function NE(e=!0,t=null){Me(()=>{if(e)return NV.acquire(t)},[e,t])}function kV({store:e,parentContext:t,isDrawer:a}){const o=e.useState("open"),c=e.useState("disablePointerDismissal"),d=e.useState("modal"),f=e.useState("popupElement"),p=e.useState("floatingRootContext"),[h,b]=x.useState(0),[y,v]=x.useState(0),j=h===0,w=pf(p,{outsidePressEvent(){return e.context.internalBackdropRef.current||e.context.backdropRef.current?"intentional":{mouse:d==="trap-focus"?"sloppy":"intentional",touch:"sloppy"}},outsidePress(S){if(!e.context.outsidePressEnabledRef.current||"button"in S&&S.button!==0)return!1;if("touches"in S){if(S.type==="touchend"){if(S.changedTouches.length!==1||S.touches.length!==0)return!1}else if(S.touches.length!==1)return!1}const N=fs(S);if(j&&!c){if(d){const k=e.context.internalBackdropRef.current,A=e.context.backdropRef.current;return k||A?k===N||A===N||Ze(N,f)&&!N?.hasAttribute("data-base-ui-portal"):!0}return!0}return!1},escapeKey:j});return NE(o&&d===!0,f),e.useContextCallback("onNestedDialogOpen",(S,N)=>{b(S),v(N)}),Me(()=>(t?.onNestedDialogOpen&&(o?t.onNestedDialogOpen(h+1,y+(a?1:0)):t.onNestedDialogOpen(0,0)),()=>{t?.onNestedDialogOpen&&o&&t.onNestedDialogOpen(0,0)}),[a,o,h,y,t]),Ly(e,{activeTriggerProps:w.reference,inactiveTriggerProps:w.trigger,popupProps:w.floating,nestedOpenDialogCount:h,nestedOpenDrawerCount:y}),null}const CV={...Hy,modal:e=>e.modal,nested:e=>e.nested,nestedOpenDialogCount:e=>e.nestedOpenDialogCount,nestedOpenDrawerCount:e=>e.nestedOpenDrawerCount,disablePointerDismissal:e=>e.disablePointerDismissal,openMethod:e=>e.openMethod,descriptionElementId:e=>e.descriptionElementId,titleElementId:e=>e.titleElementId,viewportElement:e=>e.viewportElement,role:e=>e.role};class TV extends ou{constructor(a,o,c){const d=new vh,f=EV(a,d,o,c);super(f,AV(d),CV);cn(this,"setOpen",(a,o)=>{o.preventUnmountOnClose=()=>{this.set("preventUnmountingOnClose",!0)},!a&&o.trigger==null&&this.state.activeTriggerId!=null&&(o.trigger=this.state.activeTriggerElement??void 0),this.context.onOpenChange?.(a,o),!o.isCanceled&&(this.state.floatingRootContext.dispatchOpenChange(a,o),this.update(Iy(this.state,a,o.trigger)))})}}function EV(e,t,a,o=!1){return{...zy(t,a,o),modal:!0,disablePointerDismissal:!1,viewportElement:null,descriptionElementId:void 0,titleElementId:void 0,openMethod:null,nested:!1,nestedOpenDialogCount:0,nestedOpenDrawerCount:0,role:"dialog",...e}}function AV(e){return{popupRef:x.createRef(),backdropRef:x.createRef(),internalBackdropRef:x.createRef(),outsidePressEnabledRef:{current:!0},triggerElements:e,onOpenChange:void 0,onOpenChangeComplete:void 0}}function kE(e,t){const{children:a,open:o,defaultOpen:c=!1,onOpenChange:d,onOpenChangeComplete:f,disablePointerDismissal:p=!1,modal:h=!0,actionsRef:b,handle:y,triggerId:v,defaultTriggerId:j=null}=t,w=e==="drawer",S=e==="alert-dialog",N=S?!0:h,k=S||p,A=S?"alertdialog":"dialog",P=iu(!0),R=P!=null,C={modal:N,disablePointerDismissal:k,nested:R,role:A},E=My((H,B)=>new TV({open:c,openProp:o,activeTriggerId:j,triggerIdProp:v,...C},H,B),!0);E.useControlledProp("openProp",o),E.useControlledProp("triggerIdProp",v),E.useSyncedValues(C),E.useContextCallback("onOpenChange",d),E.useContextCallback("onOpenChangeComplete",f);const D=E.useState("open"),I=E.useState("mounted"),O=E.useState("payload");HT(E,D),Py(E);const{forceUnmount:_}=_y(D,E);x.useImperativeHandle(b,()=>({unmount:_,close:()=>E.setOpen(!1,qe(py))}),[_,E]);const z=D||I;return s.jsxs(uE.Provider,{value:E,children:[y&&s.jsx(Dy,{handle:y,store:E}),z&&s.jsx(kV,{store:E,parentContext:P?.context,isDrawer:w}),typeof a=="function"?a({payload:O}):a]})}const RV=uh(function(t){return kE("dialog",t)}),CE=x.forwardRef(function(t,a){const{render:o,className:c,style:d,id:f,...p}=t,h=iu(),b=ka(f);return h.useSyncedValueWithCleanup("titleElementId",b),yt("h2",t,{ref:a,props:[{id:b},p]})});function OV(e){const t=x.useRef(""),a=x.useCallback(c=>{c.defaultPrevented||(t.current=c.pointerType,e(c,c.pointerType))},[e]);return{onClick:x.useCallback(c=>{if(c.detail===0){e(c,"keyboard");return}"pointerType"in c?e(c,c.pointerType):e(c,t.current),t.current=""},[e]),onPointerDown:a}}function TE(e,t){const a=Ie((d,f)=>{(typeof e=="function"?e():e)||t(f||(tf?"touch":""))}),{onClick:o,onPointerDown:c}=OV(a);return x.useMemo(()=>({onClick:o,onPointerDown:c}),[o,c])}function EE(e){const[t,a]=x.useState(null),o=TE(e,a);return ia(e,c=>{c&&!e&&a(null)}),x.useMemo(()=>({openMethod:t,triggerProps:o}),[t,o])}function Yt(e){return s.jsx(RV,{"data-slot":"dialog",...e})}function MV(e){return s.jsx(vE,{"data-slot":"dialog-portal",...e})}const Ut=e=>s.jsx(CE,{"data-slot":"dialog-title",...e});function DV({className:e,...t}){return s.jsx(dE,{"data-slot":"dialog-overlay",className:Ue("fixed inset-0 isolate z-30 bg-mask backdrop-blur-[3px]","transition-opacity duration-150","data-open:animate-in data-open:fade-in-0","data-closed:animate-out data-closed:fade-out-0 data-closed:fill-mode-forwards",e),...t})}function Xt({className:e,children:t,showCloseButton:a=!0,keepMounted:o=!1,overlayForceRender:c=!1,...d}){return s.jsxs(MV,{keepMounted:o,children:[s.jsx(DV,{forceRender:c}),s.jsxs(bE,{"data-slot":"dialog-content",className:Ue("fixed top-1/2 left-1/2 z-30 flex max-h-[calc(100vh-48px)] w-[min(620px,calc(100vw-48px))] -translate-x-1/2 -translate-y-1/2 flex-col","overflow-hidden rounded-lg border border-border bg-surface shadow-3 outline-none","transition-[opacity,transform] duration-200 [transition-timing-function:cubic-bezier(.2,.9,.3,1)]","data-open:animate-in data-open:fade-in-0 data-open:zoom-in-[.985] data-open:slide-in-from-bottom-2.5","data-closed:animate-out data-closed:fade-out-0 data-closed:fill-mode-forwards",e),...d,children:[t,a&&s.jsxs(fE,{"data-slot":"dialog-close",render:s.jsx(ne,{variant:"ghost",size:"icon-sm",className:"absolute top-3 right-3"}),children:[s.jsx("svg",{viewBox:"0 0 12 12",className:"size-3","aria-hidden":"true",children:s.jsx("path",{d:"M2.5 2.5l7 7M9.5 2.5l-7 7",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",fill:"none"})}),s.jsx("span",{className:"sr-only",children:bo("关闭")})]})]})]})}function Vt({className:e,...t}){return s.jsx("div",{"data-slot":"dialog-header",className:Ue("flex items-center gap-2.5 border-b border-hairline px-5 py-[15px] pr-10","[&_h2]:flex-1 [&_h2]:text-[14.5px] [&_h2]:font-semibold",e),...t})}function Lt({className:e,...t}){return s.jsx("div",{"data-slot":"dialog-body",className:Ue("flex flex-col gap-4 overflow-y-auto px-5 py-[18px]",e),...t})}function tn({className:e,...t}){return s.jsx("div",{"data-slot":"dialog-footer",className:Ue("flex items-center gap-2 border-t border-hairline bg-surface-2 px-5 py-[13px]",e),...t})}function dn({className:e,...t}){return s.jsx("div",{"data-slot":"dialog-section",className:Ue("flex flex-col gap-2.5 rounded-md border border-border bg-surface-inset p-3.5","[&_h3]:text-[12.5px] [&_h3]:font-semibold","[&_p]:text-xs [&_p]:leading-[1.65] [&_p]:text-subtle",e),...t})}function IV(e){return kE("alert-dialog",e)}const PV=IV,_V=vE,LV=e=>s.jsx(CE,{"data-slot":"alert-dialog-title",...e});function zV({className:e,...t}){return s.jsx(dE,{"data-slot":"alert-dialog-overlay",className:Ue("fixed inset-0 isolate z-[38] bg-mask backdrop-blur-[3px]","transition-opacity duration-150","data-open:animate-in data-open:fade-in-0","data-closed:animate-out data-closed:fade-out-0 data-closed:fill-mode-forwards",e),...t})}function BV({className:e,children:t,showCloseButton:a=!1,...o}){return s.jsxs(_V,{children:[s.jsx(zV,{}),s.jsxs(bE,{"data-slot":"alert-dialog-content",className:Ue("fixed top-1/2 left-1/2 z-[38] flex max-h-[calc(100vh-48px)] w-[min(440px,calc(100vw-48px))] -translate-x-1/2 -translate-y-1/2 flex-col","overflow-hidden rounded-lg border border-border bg-surface shadow-3 outline-none","transition-[opacity,transform] duration-200 [transition-timing-function:cubic-bezier(.2,.9,.3,1)]","data-open:animate-in data-open:fade-in-0 data-open:zoom-in-[.985] data-open:slide-in-from-bottom-2.5","data-closed:animate-out data-closed:fade-out-0 data-closed:fill-mode-forwards",e),...o,children:[t,a&&s.jsxs(fE,{"data-slot":"alert-dialog-close",render:s.jsx(ne,{variant:"ghost",size:"icon-sm",className:"absolute top-3 right-3"}),children:[s.jsx("svg",{viewBox:"0 0 12 12",className:"size-3","aria-hidden":"true",children:s.jsx("path",{d:"M2.5 2.5l7 7M9.5 2.5l-7 7",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",fill:"none"})}),s.jsx("span",{className:"sr-only",children:bo("关闭")})]})]})]})}function HV({className:e,...t}){return s.jsx("div",{"data-slot":"alert-dialog-header",className:Ue("flex items-center gap-2.5 border-b border-hairline px-5 py-[15px]","[&_h2]:flex-1 [&_h2]:text-[14.5px] [&_h2]:font-semibold",e),...t})}function UV({className:e,...t}){return s.jsx("div",{"data-slot":"alert-dialog-body",className:Ue("flex flex-col gap-4 overflow-y-auto px-5 py-[18px]",e),...t})}function VV({className:e,...t}){return s.jsx("div",{"data-slot":"alert-dialog-footer",className:Ue("flex items-center gap-2 border-t border-hairline bg-surface-2 px-5 py-[13px]",e),...t})}function FV({className:e,tone:t="danger",...a}){return s.jsx("div",{"data-slot":"alert-dialog-banner","data-tone":t,className:Ue("rounded-md border px-3.5 py-3 text-xs leading-[1.65] text-subtle","[&_strong]:font-semibold",t==="danger"?"border-destructive-bd bg-destructive-soft [&_strong]:text-destructive":"border-border bg-surface-inset [&_strong]:text-foreground",e),...a})}function Zy({className:e,containerClassName:t,...a}){return s.jsx("div",{"data-slot":"table-container",className:Ue("relative w-full overflow-auto",t),children:s.jsx("table",{"data-slot":"table",className:Ue("w-full caption-bottom border-collapse text-[12.5px]",e),...a})})}function AE({className:e,...t}){return s.jsx("thead",{"data-slot":"table-header",className:Ue(e),...t})}function Wy({className:e,...t}){return s.jsx("tbody",{"data-slot":"table-body",className:Ue(e),...t})}function Cl({className:e,...t}){return s.jsx("tr",{"data-slot":"table-row",className:Ue("transition-colors duration-100 hover:[&>td]:bg-control-hover",e),...t})}function RE({className:e,...t}){return s.jsx("th",{"data-slot":"table-head",className:Ue("sticky top-0 z-[2] whitespace-nowrap border-b border-border bg-surface-2 px-3.5 py-2","text-left text-[10.5px] font-semibold tracking-[.05em] text-muted-foreground",e),...t})}function Tn({className:e,...t}){return s.jsx("td",{"data-slot":"table-cell",className:Ue("border-b border-hairline px-3.5 py-2 align-middle",e),...t})}const $V="data-checked",qV="data-unchecked",Jy={checked(e){return e?{[$V]:""}:{[qV]:""}},...co,...Ti},ej="data-composite-item-active",OE=x.createContext({register:()=>{},unregister:()=>{},subscribeMapChange:()=>()=>{},nextIndexRef:{current:0}});function GV(){return x.useContext(OE)}function tj(e={}){const{guess:t,label:a,metadata:o,textRef:c,index:d}=e,{register:f,unregister:p,subscribeMapChange:h,nextIndexRef:b}=GV(),y=x.useRef(-1),[v,j]=x.useState(d==null&&t?()=>{if(y.current===-1){const k=b.current;b.current+=1,y.current=k}return y.current}:-1),w=d??v,S=x.useRef(null),N=x.useCallback(k=>{const A=S.current;A&&p(A),S.current=k,k&&f(k,{metadata:o??null,index:d??null,label:a,textRef:c})},[d,f,p,o,a,c]);return Me(()=>{if(d==null)return h(k=>{const A=S.current?k.get(S.current)?.index:null;A!=null&&j(A)})},[d,h]),{ref:N,index:w}}function KV(e={}){const{highlightItemOnHover:t,highlightedIndex:a,onHighlightedIndexChange:o}=EC(),{ref:c,index:d}=tj(e),f=a===d,p=x.useRef(null),h=sa(c,p);return{compositeProps:{tabIndex:f?0:-1,onFocus(){o(d)},onMouseMove(){const y=p.current;if(!t||!y)return;const v=y.hasAttribute("disabled")||y.ariaDisabled==="true";!f&&!v&&y.focus()}},compositeRef:h,index:d}}function ME(e){const{render:t,className:a,style:o,state:c=mn,props:d=Ir,refs:f=Ir,metadata:p,stateAttributesMapping:h,tag:b="div",...y}=e,{compositeProps:v,compositeRef:j}=KV({metadata:p});return yt(b,e,{state:c,ref:[j,...f],props:[v,...d,y],stateAttributesMapping:h})}const DE=x.createContext(void 0);function YV(){return x.useContext(DE)}function Ih(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}const IE=x.createContext(void 0);function XV(){const e=x.useContext(IE);if(e===void 0)throw new Error(un(52));return e}const PE=x.forwardRef(function(t,a){const{render:o,className:c,disabled:d=!1,readOnly:f=!1,required:p=!1,"aria-labelledby":h,value:b,inputRef:y,nativeButton:v=!1,id:j,style:w,...S}=t,N=YV(),{disabled:k,readOnly:A,required:P,form:R,checkedValue:C,touched:E=!1,validation:D,name:I,setCheckedValue:O=Kt,setTouched:_=Kt,registerInputRef:z=Kt}=N??{},{setTouched:H,setFilled:B,state:L,disabled:F}=Na(),$=A1(),{labelId:X,getDescriptionProps:K}=yl(),q=F||$.disabled||k||d,Q=A||f,G=P||p,J=R,Y=N?C===b:b==="",re=x.useRef(null),M=x.useRef(null),U=D?.registerInput,Z=x.useCallback(oe=>U?.(oe,{controlRef:re,value:void 0}),[U]),ae=sa(y,M,z,Z);Me(()=>{M.current?.checked&&B(!0)},[B]),Me(()=>{if(M.current){if(q&&Y){z(null);return}z(M.current)}},[Y,q,z]);const ce=ka(),W=io({id:j}),ue=v?void 0:W,ve=Fv(h,X,M,!v,ue),ee={role:"radio","aria-checked":Y,"aria-labelledby":ve,[ej]:Y?"":void 0,id:v?W:ce,onKeyDown(oe){oe.key==="Enter"&&oe.preventDefault()},onClick(oe){if(oe.defaultPrevented||q||Q)return;oe.preventDefault();const me=M.current;me&&Yc(me,oe)},onFocus(oe){oe.defaultPrevented||q||Q||!E||(M.current?.click(),_(!1))}},{getButtonProps:he,buttonRef:te}=na({disabled:q,native:v,composite:!1}),ke={type:"radio",ref:ae,form:J,id:ue,name:I,tabIndex:-1,style:I?su:_i,"aria-hidden":!0,...b!==void 0?{value:Ih(b)}:mn,disabled:q,checked:Y,required:G,readOnly:Q,onChange(oe){if(oe.nativeEvent.defaultPrevented||q||Q||b===void 0)return;const me=qe(Qn,oe.nativeEvent);O(b,me),!me.isCanceled&&H(!0)},onClick(oe){oe.stopPropagation()},onFocus(){re.current?.focus()}},le=x.useMemo(()=>({...L,required:G,disabled:q,readOnly:Q,checked:Y}),[L,q,Q,Y,G]),de=le,Se=N!==void 0,Te=[a,re,te],_e=[ee,S,he,K,D?oe=>D.getValidationProps(q,oe):mn],Ae=yt("span",t,{enabled:!Se,state:le,ref:Te,props:_e,stateAttributesMapping:Jy});return s.jsxs(IE.Provider,{value:de,children:[Se?s.jsx(ME,{tag:"span",render:o,className:c,style:w,state:le,refs:Te,props:_e,stateAttributesMapping:Jy}):Ae,s.jsx("input",{...ke,suppressHydrationWarning:!0})]})}),QV=x.forwardRef(function(t,a){const{render:o,className:c,style:d,keepMounted:f=!1,...p}=t,h=XV(),b=h.checked,{mounted:y,transitionStatus:v,setMounted:j}=Oi(b),w={...h,transitionStatus:v},S=x.useRef(null),N=f||y,k=yt("span",t,{ref:[a,S],state:w,props:p,stateAttributesMapping:Jy});return oa({batch:!0,enabled:!b,open:b,ref:S,onComplete(){b||j(!1)}}),N?k:null});function nj(e){const{children:t,elementsRef:a,labelsRef:o,onMapChange:c}=e,d=Ie(c),[,f]=x.useState(!1),p=Ps(WV).current,h=Ps(ZV).current,b=x.useRef(0),y=x.useRef(!0),v=x.useRef(null),j=x.useRef(null),w=Ie(()=>{y.current||(y.current=!0,f(E=>!E))}),S=Ie((E,D)=>{h.set(E,D),w()}),N=Ie(E=>{h.delete(E),w()}),k=Ie(E=>{const D=new Map;return a.current.length=0,o&&(o.current.length=0),E.forEach(I=>{D.set(I.element,{...I.registration.metadata??{},index:I.index}),a.current[I.index]=I.element,o&&(o.current[I.index]=I.registration.label!==void 0?I.registration.label:I.registration.textRef?.current?.textContent??I.element.textContent)}),b.current=a.current.length,D});function A(E){if(j.current?.disconnect(),j.current=null,typeof MutationObserver!="function"||E.length<2)return;const D=new MutationObserver(O=>{if(!tF(O))return;let _=null;for(const z of E)if(z.isConnected){if(_&&_E(_,z)>0){D.disconnect(),w();return}_=z}});j.current=D;const I=new Set;for(let O=1;OD.observe(O,{childList:!0}))}const P=Ie(()=>{const[E,D]=JV(h),I=k(E),O=v.current,_=!O||O.length!==E.length||E.some((z,H)=>{const B=O[H];return z.index!==B.index||z.element!==B.element||z.registration.index!==B.registration.index||z.registration.metadata!==B.registration.metadata});A(D),v.current=E,y.current=!1,_&&(p.forEach(z=>z(I)),d(I))});Me(()=>(!y.current&&v.current&&k(v.current),()=>{a.current=[],o&&(o.current=[])}),[a,o,k]),Me(()=>{y.current&&P()}),Me(()=>()=>{j.current?.disconnect(),y.current=!0},[]);const R=Ie(E=>(p.add(E),()=>{p.delete(E)})),C=x.useMemo(()=>({register:S,unregister:N,subscribeMapChange:R,nextIndexRef:b}),[S,N,R,b]);return s.jsx(OE.Provider,{value:C,children:t})}function ZV(){return new Map}function WV(){return new Set}function JV(e){const t=new Set,a=[],o=[];e.forEach((d,f)=>{if(!f.isConnected)return;const p=d.index,h={index:p??-1,element:f,registration:d};p===null?o.push(h):p>=0&&(t.add(p),a.push(h))});let c=0;return o.sort((d,f)=>_E(d.element,f.element)),o.forEach(d=>{for(;t.has(c);)c+=1;d.index=c,a.push(d),c+=1}),t.size>0&&a.sort((d,f)=>d.index-f.index),[a,o.map(d=>d.element)]}function eF(e,t){let a=e.parentElement;for(;a&&!a.contains(t);)a=a.parentElement;return a}function tF(e){for(const t of e)for(let a=0;a{if(C.current=P.current[H]??null,(p??S)(H),B){const L=P.current[H];gE(k.current,L,d,a)}}),I=Ie(H=>{if(H.size===0)return;if(R.current){const $=P.current,X=$.indexOf(C.current);if(X===-1){const K=$[E];!K||ho($,E,v)?D(sF($,v)):C.current=K}else X!==E&&D(X);return}R.current=!0;const B=Array.from(H.keys()),L=B.find($=>$?.hasAttribute(ej))??null,F=L?H.get(L)?.index??-1:-1;if(F!==-1)D(F);else if(ho(B,E,v)){const $=_s(B,{disabledIndices:v});mo(B,$)||D($)}gE(k.current,L,d,a)});Me(()=>{if(v==null||f!=null||!R.current)return;const H=P.current;if(ho(H,E,v)){const B=_s(H,{disabledIndices:v});mo(H,B)||D(B)}},[v,f,E,P,D]);const O=Ie((H,B,L)=>c?c(H,B,L,P):L),_=Ie(H=>{const B=H.key===Xy||H.key===Qy;if(!Rh.has(H.key)||!b&&B||rF(H,j)||!k.current)return;const F=d==="rtl",$=F?Ky:Yy,X=F?Yy:Ky,K=a==="vertical"?Gy:$,q=a==="vertical"?qy:X,Q=fs(H.nativeEvent);if(Q!=null&&hE(Q)&&!LE(Q)){const U=Q.selectionStart,Z=Q.selectionEnd,ae=Q.value;if(U==null||H.shiftKey||U!==Z||H.key!==q&&U0)return}let G=E;const J=sh(P,v),Y=ry(P,v);o!=null&&(G=o({disabledIndices:v,elementsRef:P,event:H,highlightedIndex:E,loopFocus:t,maxIndex:Y,minIndex:J,onLoop:O,orientation:a,rtl:F}));const re=a!=="vertical"&&H.key===$||a!=="horizontal"&&H.key===Gy,M=a!=="vertical"&&H.key===X||a!=="horizontal"&&H.key===qy;b&&(H.key===Xy?G=J:H.key===Qy&&(G=Y)),G===E&&(re||M)&&(t&&G===Y&&re?(G=J,c&&(G=c(H,E,G,P))):t&&G===J&&M?(G=Y,c&&(G=c(H,E,G,P))):G=_s(P.current,{startingIndex:G,decrement:M,disabledIndices:v})),G!==E&&!mo(P.current,G)&&(y&&H.stopPropagation(),(N||B||re||M)&&H.preventDefault(),D(G,!0),queueMicrotask(()=>{P.current[G]?.focus()}))});return{props:{ref:A,onFocus(H){const B=k.current,L=fs(H.nativeEvent);!B||L==null||!hE(L)||L.setSelectionRange(0,L.value.length)},onKeyDown:_},highlightedIndex:E,onHighlightedIndexChange:D,elementsRef:P,onMapChange:I,relayKeyboardEvent:_}}function sF(e,t){let a=-1;for(let o=0;o({highlightedIndex:_,onHighlightedIndexChange:z,highlightItemOnHover:C,relayKeyboardEvent:L}),[_,z,C,L]);return s.jsx(TC.Provider,{value:$,children:s.jsx(nj,{elementsRef:H,onMapChange:X=>{N?.(X),B(X)},children:F})})}const lF=[mE],zE=x.forwardRef(function(t,a){const{render:o,className:c,disabled:d,readOnly:f,required:p,onValueChange:h,value:b,defaultValue:y,form:v,name:j,inputRef:w,id:S,style:N,...k}=t,{setTouched:A,setFocused:P,validationMode:R,name:C,disabled:E,state:D,validation:I,setDirty:O,setFilled:_,validityData:z}=Na(),{labelId:H}=yl(),{clearErrors:B,elementRef:L}=Qc(),F=kB(!0),$=E||d,X=C??j,K=ka(S),[q,Q]=Ka({controlled:b,default:y,name:"RadioGroup",state:"value"}),[G,J]=x.useState(!1),Y=Ie((te,ke)=>{h?.(te,ke),!ke.isCanceled&&Q(te)}),re=I.getInputControl,M=x.useMemo(()=>({get current(){return re()}}),[re]),U=x.useRef(null),Z=x.useRef(null);function ae(te){let ke;return w&&(typeof w=="function"?ke=w(te):w.current=te),U.current=te,ke}const ce=Ie(te=>{if(!te||te.disabled)return;Z.current||(Z.current=te);const ke=U.current,le=te.checked||ke==null||ke.disabled?ae(te):void 0;return()=>{Z.current===te&&(Z.current=null),U.current===te?le?(le(),U.current=null):ae(null):le?.()}}),W=Ie(()=>{const te=L.current;if(!te)return q??null;for(const ke of I.registeredInputs.keys())if(ke.checked&&b4(ke,te))return q??null;return null});tu(M,K,q??null,W,!$,j),ia(q,()=>{B(X),O(q!==z.initialValue),_(q!=null),I.change(q);const te=Z.current;q==null&&te&&!te.disabled&&ae(te)});const ue=H??F?.legendId,ve={...D,disabled:$??!1,required:p??!1,readOnly:f??!1},ee=x.useMemo(()=>({checkedValue:q,disabled:$,form:v,validation:I,name:X,readOnly:f,registerInputRef:ce,required:p,setCheckedValue:Y,setTouched:J,touched:G}),[q,$,v,I,X,f,ce,p,Y,J,G]),he={id:S,role:"radiogroup","aria-required":p||void 0,"aria-disabled":$||void 0,"aria-readonly":f||void 0,"aria-labelledby":ue,onFocus(){P(!0)},onBlur(te){Ze(te.currentTarget,te.relatedTarget)||(A(!0),P(!1),R==="onBlur"&&I.commit(q))},onKeyDownCapture(te){te.key.startsWith("Arrow")&&(J(!0),P(!0))}};return s.jsx(DE.Provider,{value:ee,children:s.jsx(aF,{render:o,className:c,style:N,state:ve,props:[he,k,te=>I.getValidationProps($??!1,te)],refs:[a],stateAttributesMapping:Ti,enableHomeAndEndKeys:!1,modifierKeys:lF})})});function Ph({className:e,...t}){return s.jsx(zE,{"data-slot":"radio-group",className:Ue("flex flex-col gap-2",e),...t})}function yo({className:e,...t}){return s.jsx(PE,{"data-slot":"radio-group-item",className:Ue("relative inline-flex size-3.5 flex-none cursor-pointer items-center justify-center rounded-full border border-control-border bg-control","outline-none transition-colors duration-150 ease-out","hover:border-control-border-hover","data-checked:border-primary data-checked:bg-primary","focus-visible:shadow-focus","data-disabled:cursor-not-allowed data-disabled:opacity-45",e),...t,children:s.jsx(QV,{"data-slot":"radio-group-indicator",className:"grid place-content-center data-unchecked:hidden",children:s.jsx("span",{className:"block size-[5px] rounded-full bg-primary-foreground"})})})}function BE(e){const t=x.useRef(!0);t.current&&(t.current=!1,e())}const HE=x.createContext(void 0),UE=x.createContext(void 0),VE=x.createContext(void 0);function jo(){const e=x.useContext(HE);if(e===void 0)throw new Error(un(60));return e}function sj(){const e=x.useContext(UE);if(e===void 0)throw new Error(un(101));return e}function FE(){const e=x.useContext(VE);if(e===void 0)throw new Error(un(61));return e}function oF(e,t,a=Object.is){const{length:o}=e;if(o!==t.length)return!1;for(let c=0;cObject.is(e,t);function ca(e,t,a){return e==null||t==null?Object.is(e,t):a(e,t)}function $E(e,t,a){return Array.isArray(e)&&Array.isArray(t)?!oF(e,t,(o,c)=>ca(o,c,a)):e!==t}function Lh(e,t,a){return e?e.some(o=>o===void 0?!1:ca(t,o,a)):!1}function cu(e,t,a){return e?e.findIndex(o=>o===void 0?!1:ca(o,t,a)):-1}function iF(e,t){if(t!==_h)return o=>Lh(e,o,t);const a=new Set(e);return a.delete(void 0),o=>a.has(o)&&(o!==0||e.some(c=>Object.is(o,c)))}function bf(e,t,a,o){const c=o&&Array.isArray(t)?e.findIndex(iF(t,a)):cu(e,t,a);return c===-1?null:c}function qE(e,t,a,o,c,d){return Lh(o,t,c)?d!=null&&e>d&&Lh(o,a[d],c)?d:e:e===d?bf(a,o,c,!0):d}function GE(e,t,a){return e.filter(o=>!ca(t,o,a))}function cF(e){return typeof e=="object"&&e!=null&&Array.isArray(e.items)}function rj(e){return cF(e?.[0])}function zh(e){return rj(e)?e.flatMap(t=>t.items):e}function KE(e){if(!Array.isArray(e))return e!=null&&"null"in e;const t=e;if(rj(t)){for(const a of t)for(const o of a.items)if(o&&o.value==null&&o.label!=null)return!0;return!1}for(const a of t)if(a&&a.value==null&&a.label!=null)return!0;return!1}function wo(e,t){if(t&&e!=null)return t(e)??"";if(e&&typeof e=="object"){if("label"in e&&e.label!=null)return String(e.label);if("value"in e)return String(e.value)}return Ih(e)}function Ca(e,t){return t&&e!=null?t(e)??"":e&&typeof e=="object"&&"value"in e&&"label"in e?Ih(e.value):Ih(e)}function YE(e,t,a){function o(){return wo(e,a)}if(a&&e!=null)return a(e);if(e&&typeof e=="object"&&"label"in e&&e.label!=null)return e.label;if(t&&!Array.isArray(t))return(Object.hasOwn(t,e)?t[e]:void 0)??o();if(Array.isArray(t)){const d=zh(t);if(e==null||typeof e!="object"){const f=d.find(p=>p.value===e);return f&&f.label!=null?f.label:o()}if("value"in e){const f=d.find(p=>p&&p.value===e.value);if(f&&f.label!=null)return f.label}}return o()}function uF(e,t,a){return e.reduce((o,c,d)=>(d>0&&o.push(", "),o.push(s.jsx(x.Fragment,{children:YE(c,t,a)},d)),o),[])}const dF={id:e=>e.id,labelId:e=>e.labelId,modal:e=>e.modal,items:e=>e.items,itemToStringLabel:e=>e.itemToStringLabel,isItemEqualToValue:e=>e.isItemEqualToValue,value:e=>e.value,hasSelectedValue:e=>{const{value:t,multiple:a,itemToStringValue:o}=e;return t==null?!1:a&&Array.isArray(t)?t.length>0:Ca(t,o)!==""},hasNullItemLabel:(e,t)=>t?KE(e.items):!1,open:e=>e.open,mounted:e=>e.mounted,forceMount:e=>e.forceMount,transitionStatus:e=>e.transitionStatus,openMethod:e=>e.openMethod,activeIndex:e=>e.activeIndex,selectedIndex:e=>e.selectedIndex,isActive:(e,t)=>e.activeIndex===t,isSelected:(e,t)=>{const a=e.isItemEqualToValue,o=e.value;return e.multiple?Array.isArray(o)&&o.some(c=>ca(t,c,a)):ca(t,o,a)},isSelectedByFocus:(e,t)=>e.selectedIndex===t,popupProps:e=>e.popupProps,triggerProps:e=>e.triggerProps,triggerElement:e=>e.triggerElement,positionerElement:e=>e.positionerElement,listElement:e=>e.listElement,popupSide:e=>e.popupSide,scrollUpArrowVisible:e=>e.scrollUpArrowVisible,scrollDownArrowVisible:e=>e.scrollDownArrowVisible,hasScrollArrows:e=>e.hasScrollArrows},Tl=1;function XE(e,t){return Math.max(0,e-t)}function fF(e,t){if(t<=0)return 0;const a=Li(e,0,t),o=a,c=t-a,d=o<=Tl,f=c<=Tl;return d&&f?o<=c?0:t:d?0:f?t:a}function pF(e){const{id:t,value:a,defaultValue:o=null,onValueChange:c,open:d,defaultOpen:f=!1,onOpenChange:p,name:h,form:b,autoComplete:y,disabled:v=!1,readOnly:j=!1,required:w=!1,modal:S=!0,actionsRef:N,inputRef:k,onOpenChangeComplete:A,items:P,multiple:R=!1,itemToStringLabel:C,itemToStringValue:E,isItemEqualToValue:D=_h,highlightItemOnHover:I=!0,children:O}=e,{clearErrors:_}=Qc(),{setDirty:z,setTouched:H,setFocused:B,validityData:L,setFilled:F,name:$,disabled:X,validation:K,validationMode:q}=Na(),Q=io({id:t}),G=X||v,J=$??h,[Y,re]=Ka({controlled:a,default:R?o??Ir:o,name:"Select",state:"value"}),[M,U]=Ka({controlled:d,default:f,name:"Select",state:"open"}),Z=x.useRef([]),ae=x.useRef([]),ce=x.useRef(null),W=x.useRef(null),ue=x.useRef(0),ve=x.useRef(null),ee=x.useRef([]),he=x.useRef(!1),te=x.useRef(null),ke=x.useRef(null),le=x.useRef({allowSelectedMouseUp:!1,allowUnselectedMouseUp:!1,dragY:0}),de=x.useRef(!1),Se=x.useRef(Y),{mounted:Te,setMounted:_e,transitionStatus:Ae}=Oi(M),{openMethod:oe,triggerProps:me}=EE(M),pe=Ps(()=>new ou({id:Q,labelId:void 0,modal:S,multiple:R,itemToStringLabel:C,itemToStringValue:E,isItemEqualToValue:D,value:Y,open:M,mounted:Te,transitionStatus:Ae,items:P,forceMount:!1,openMethod:null,activeIndex:null,selectedIndex:null,popupProps:mn,triggerProps:mn,triggerElement:null,positionerElement:null,listElement:null,popupSide:null,scrollUpArrowVisible:!1,scrollDownArrowVisible:!1,hasScrollArrows:!1},{setValue:Kt,setOpen:Kt,handleScrollArrowVisibility:Kt,onOpenChangeComplete:Kt,listRef:Z,popupRef:ce,scrollHandlerRef:W,scrollArrowsMountedCountRef:ue,valueRef:ve,valuesRef:ee,labelsRef:ae,typingRef:he,selectionRef:le,firstItemTextRef:te,selectedItemTextRef:ke,alignItemWithTriggerActiveRef:de,initialValueRef:Se},dF)).current,Ce=pe.useState("activeIndex"),Ne=pe.useState("selectedIndex"),be=pe.useState("triggerElement"),De=pe.useState("positionerElement"),Ge=uV(oe),Ct=oe??Ge,Tt=x.useMemo(()=>R?"":Ca(Y,E),[R,Y,E]),Mt=x.useMemo(()=>R&&Array.isArray(Y)?Y.map(xt=>Ca(xt,E)):Ca(Y,E),[R,Y,E]),ot=Zn(be),Kn=Ie(()=>Mt);tu(ot,Q,Y,Kn,!G,h);const ms=R?Array.isArray(Y)&&Y.length>0:Y!=null&&Tt!=="";Me(()=>{F(ms)},[ms,F]),Me(function(){const jt=bf(ee.current,Y,D,R);jt===null&&(ke.current=null),!M&&pe.set("selectedIndex",jt)},[R,M,Y,D,pe]),ia(Y,()=>{_(J),z($E(Y,L.initialValue,D)),K.change(Y)});const Yn=Ie((xt,jt)=>{p?.(xt,jt),!jt.isCanceled&&(U(xt),!xt&&(jt.reason===xo||jt.reason===ch)&&(H(!0),B(!1),q==="onBlur"&&K.commit(Y)))}),vs=Ie(()=>{_e(!1),pe.update({activeIndex:null,openMethod:null,scrollUpArrowVisible:!1,scrollDownArrowVisible:!1}),A?.(!1)});oa({enabled:!N,open:M,ref:ce,onComplete(){M||vs()}}),x.useImperativeHandle(N,()=>({unmount:vs}),[vs]);const it=Ie((xt,jt)=>{c?.(xt,jt),!jt.isCanceled&&re(xt)}),$t=Ie(xt=>{const jt=XE(xt.scrollHeight,xt.clientHeight),wt=fF(xt.scrollTop,jt),Tr=wt>0,ar=wtLE(Z.current[xt]),onMatch(xt){M?pe.set("activeIndex",xt):it(ee.current[xt],qe(Qn))},onTyping(xt){he.current=xt}}),es=x.useMemo(()=>ta(qt.reference,Dt.reference,nt.reference,rn.reference,me),[rn.reference,qt.reference,Dt.reference,nt.reference,me]),Fn=x.useMemo(()=>ta(mf,qt.floating,Dt.floating,nt.floating),[qt.floating,Dt.floating,nt.floating]),$n=Dt.item??mn;pe.useContextCallback("setValue",it),pe.useContextCallback("setOpen",Yn),pe.useContextCallback("handleScrollArrowVisibility",$t),pe.useContextCallback("onOpenChangeComplete",A),BE(()=>{pe.update({popupProps:Fn,triggerProps:es})}),pe.useSyncedValues({id:Q,modal:S,multiple:R,value:Y,open:M,mounted:Te,transitionStatus:Ae,popupProps:Fn,triggerProps:es,items:P,itemToStringLabel:C,itemToStringValue:E,isItemEqualToValue:D,openMethod:Ct});const Dn=x.useMemo(()=>({disabled:G,readOnly:j,required:w,multiple:R,highlightItemOnHover:I,itemProps:$n}),[G,j,w,R,I,$n]),en=sa(k,K.inputRef),cs=R?void 0:J,Et=x.useMemo(()=>!R||!Array.isArray(Y)||!J?null:Y.map(xt=>{const jt=Ca(xt,E);return s.jsx("input",{type:"hidden",form:b,name:J,value:jt,disabled:G},jt)}),[R,Y,b,J,E,G]);return s.jsxs(HE.Provider,{value:pe,children:[s.jsx(UE.Provider,{value:Dn,children:s.jsx(VE.Provider,{value:Vn,children:O})}),s.jsx("input",{...K.getValidationProps(G,{onFocus(){pe.state.triggerElement?.focus({focusVisible:!0})},onChange(xt){if(xt.nativeEvent.defaultPrevented||G||j)return;const jt=xt.currentTarget.value,wt=qe(Qn,xt.nativeEvent);function Tr(){if(R)return;const ar=jt.toLowerCase();let Fr=ee.current.findIndex(al=>Ca(al,E).toLowerCase()===ar||wo(al,C).toLowerCase()===ar);Fr===-1&&(Fr=ee.current.findIndex((al,ln)=>{const hc=ae.current[ln];return hc!=null&&hc.toLowerCase()===ar}));const Nn=ee.current[Fr];Nn!=null&&it(Nn,wt)}pe.set("forceMount",!0),queueMicrotask(Tr)}}),id:Q&&cs==null?`${Q}-hidden-input`:void 0,form:b,name:cs,autoComplete:y,value:Tt,disabled:G,required:w&&!(R&&ms),readOnly:j,ref:en,style:J?su:_i,tabIndex:-1,"aria-hidden":!0,suppressHydrationWarning:!0}),Et]})}function QE(e,t){return e??t}const Bh=5;function ZE(e,t){const a=mF(t);return e.clientX>=a.left-Bh&&e.clientX<=a.right+Bh&&e.clientY>=a.top-Bh&&e.clientY<=a.bottom+Bh}function mF(e){const t=e.getBoundingClientRect(),a=Cn(e);if($v)return t;const o=a.getComputedStyle(e,"::before"),c=a.getComputedStyle(e,"::after");if(!(o.content!=="none"||c.content!=="none"))return t;const f=parseFloat(o.width)||0,p=parseFloat(o.height)||0,h=parseFloat(c.width)||0,b=parseFloat(c.height)||0,y=Math.max(t.width,f,h),v=Math.max(t.height,p,b),j=y-t.width,w=v-t.height;return{left:t.left-j/2,right:t.right+j/2,top:t.top-w/2,bottom:t.bottom+w/2}}const hF="data-popup-side",gF=400,xF={...Yv,...Ti,popupSide:e=>e?{[hF]:e}:null,value:()=>null},bF=x.forwardRef(function(t,a){const{render:o,className:c,id:d,disabled:f=!1,nativeButton:p=!0,style:h,...b}=t,{setTouched:y,setFocused:v,validationMode:j,validation:w,state:S,disabled:N}=Na(),{labelId:k}=yl(),A=jo(),{readOnly:P,required:R,disabled:C}=sj(),E=N||C||f,D=A.useState("open"),I=A.useState("mounted"),O=A.useState("value"),_=A.useState("triggerProps"),z=A.useState("positionerElement"),H=A.useState("listElement"),B=A.useState("popupSide"),L=A.useState("id"),F=A.useState("labelId"),$=A.useState("hasSelectedValue"),X=I&&z?B:null,K=d??L,q=QE(k,F);io({id:d});const Q=Zn(z),G=x.useRef(null),{getButtonProps:J,buttonRef:Y}=na({disabled:E,native:p}),re=A.useStateSetter("triggerElement"),M=er(),U=er(),Z=er();x.useEffect(()=>{if(D)return Z.start(gF,()=>{A.context.selectionRef.current.allowUnselectedMouseUp=!0,A.context.selectionRef.current.allowSelectedMouseUp=!0}),()=>{Z.clear()};A.context.selectionRef.current={allowSelectedMouseUp:!1,allowUnselectedMouseUp:!1,dragY:0},U.clear()},[D,A,U,Z]);const ae=ta(_,{id:K,role:"combobox","aria-expanded":D,"aria-haspopup":"listbox","aria-controls":D?H?.id??Wm(z)?.id:void 0,"aria-labelledby":q,"aria-readonly":P||void 0,"aria-required":R||void 0,tabIndex:E?-1:0,onFocus(ue){v(!0),D&&A.context.alignItemWithTriggerActiveRef.current&&A.context.setOpen(!1,qe(Qn,ue.nativeEvent)),M.start(0,()=>{A.set("forceMount",!0)})},onBlur(ue){Ze(z,ue.relatedTarget)||(y(!0),v(!1),j==="onBlur"&&w.commit(O))},onMouseDown(ue){if(D)return;const ve=Gt(ue.currentTarget);function ee(he){if(!G.current)return;const te=he.target;Ze(G.current,te)||Ze(Q.current,te)||ZE(he,G.current)||A.context.setOpen(!1,qe(_1,he))}U.start(0,()=>{ve.addEventListener("mouseup",ee,{once:!0})})}},b,J),ce=w.getValidationProps(E,ae);ce.role="combobox";const W={...S,open:D,disabled:E,value:O,readOnly:P,popupSide:X,placeholder:!$};return yt("button",t,{ref:[a,G,Y,re],state:W,stateAttributesMapping:xF,props:ce})}),vF={value:()=>null},yF=x.forwardRef(function(t,a){const{className:o,render:c,children:d,placeholder:f,style:p,...h}=t,b=jo(),y=b.useState("value"),v=b.useState("items"),j=b.useState("itemToStringLabel"),w=b.useState("hasSelectedValue"),S=!w&&f!=null&&d==null,N=b.useState("hasNullItemLabel",S),k={value:y,placeholder:!w};let A=null;return typeof d=="function"?A=d(y):d!=null?A=d:S&&!N?A=f:Array.isArray(y)?A=uF(y,v,j):A=YE(y,v,j),yt("span",t,{state:k,ref:[a,b.context.valueRef],props:[{children:A},h],stateAttributesMapping:vF})}),jF=x.forwardRef(function(t,a){const{render:o,className:c,style:d,...f}=t,b={open:jo().useState("open")};return yt("span",t,{state:b,ref:a,props:[{"aria-hidden":!0,children:"▼"},f],stateAttributesMapping:Kv})}),wF=x.forwardRef(function(t,a){const o=jo(),c=o.useState("mounted"),d=o.useState("forceMount");return c||d?s.jsx(ph,{ref:a,...t}):null}),WE=x.createContext(void 0);function SF(){const e=x.useContext(WE);if(!e)throw new Error(un(59));return e}function Hh(e,t){e&&Object.assign(e.style,t)}const NF={position:"relative",maxHeight:"100%",overflowX:"hidden",overflowY:"auto"},kF=20;function aj(e,t,a,o){const[c,d]=x.useState(!1);Me(()=>{if(!e||!t||a==null){d(!1);return}const f=Gt(a).documentElement.clientWidth,p=a.offsetWidth;d(f>0&&p>0&&p>=f-kF)},[e,t,a]),NE(e&&(!t||c),o)}const CF={position:"fixed"},TF=x.forwardRef(function(t,a){const{anchor:o,className:c,render:d,positionMethod:f,side:p,align:h,sideOffset:b,alignOffset:y,collisionBoundary:v="clipping-ancestors",collisionPadding:j,arrowPadding:w,sticky:S,disableAnchorTracking:N,alignItemWithTrigger:k=!0,collisionAvoidance:A=rT,style:P,...R}=t,C=jo(),E=FE(),D=C.useState("open"),I=C.useState("mounted"),O=C.useState("modal"),_=C.useState("value"),z=C.useState("openMethod"),H=C.useState("positionerElement"),B=C.useState("triggerElement"),L=C.useState("isItemEqualToValue"),F=C.useState("transitionStatus"),$=x.useRef(null),X=x.useRef(null),[K,q]=x.useState(k),Q=I&&K&&z!=="touch";!I&&K!==k&&q(k),x.useImperativeHandle(C.context.alignItemWithTriggerActiveRef,()=>Q),aj((Q||O)&&D,z==="touch",H,B);const G=Th({anchor:o,floatingRootContext:E,positionMethod:f,mounted:I,side:p,sideOffset:b,align:h,alignOffset:y,arrowPadding:w,collisionBoundary:v,collisionPadding:j,sticky:S,disableAnchorTracking:N??Q,collisionAvoidance:A,keepMounted:!0}),J=Q?"none":G.side,Y=Q?CF:G.positionerStyles,re={open:D,side:J,align:G.align,anchorHidden:G.anchorHidden};Me(()=>{C.set("popupSide",G.side)},[C,G.side]);const M=C.useStateSetter("positionerElement"),U=Eh(t,re,{styles:Y,transitionStatus:F,props:R,refs:[a,M],hidden:!I,inert:!D}),Z=x.useRef(0),ae=Ie(W=>{if(C.context.valuesRef.current.length===0)return;const ue=Z.current;Z.current=W.size;const ve=qe(Qn);if(ue!==0&&!C.state.multiple&&_!==null&&cu(C.context.valuesRef.current,_,L)===-1){const he=C.context.initialValueRef.current,ke=he!=null&&cu(C.context.valuesRef.current,he,L)!==-1?he:null;C.context.setValue(ke,ve),ke===null&&(C.set("selectedIndex",null),C.context.selectedItemTextRef.current=null)}if(ue!==0&&C.state.multiple&&Array.isArray(_)){const ee=_.filter(he=>cu(C.context.valuesRef.current,he,L)!==-1);ee.length!==_.length&&(C.context.setValue(ee,ve),ee.length===0&&(C.set("selectedIndex",null),C.context.selectedItemTextRef.current=null))}if(D&&Q){C.update({scrollUpArrowVisible:!1,scrollDownArrowVisible:!1});const ee={height:""};Hh(H,ee),Hh(C.context.popupRef.current,ee)}}),ce=x.useMemo(()=>({...G,side:J,alignItemWithTriggerActive:Q,setControlledAlignItemWithTrigger:q,scrollUpArrowRef:$,scrollDownArrowRef:X}),[G,J,Q,q]);return s.jsx(nj,{elementsRef:C.context.listRef,labelsRef:C.context.labelsRef,onMapChange:ae,children:s.jsxs(WE.Provider,{value:ce,children:[I&&O&&s.jsx(Mh,{inert:Ah(!D),cutout:B}),U]})})}),Uh="base-ui-disable-scrollbar",JE={className:Uh,getElement(e){return s.jsx("style",{nonce:e,href:Uh,precedence:"base-ui:low",children:`.${Uh}{scrollbar-width:none}.${Uh}::-webkit-scrollbar{display:none}`})}},EF=x.createContext(void 0);function eA(e){return x.useContext(EF)}const AF=x.createContext(void 0),RF={disableStyleElements:!1};function OF(){return x.useContext(AF)??RF}const tA="--transform-origin",MF={...Zc,...co},DF=x.forwardRef(function(t,a){const{render:o,className:c,style:d,finalFocus:f,...p}=t,h=jo(),{multiple:b,readOnly:y,highlightItemOnHover:v}=sj(),j=FE(),{side:w,align:S,alignItemWithTriggerActive:N,isPositioned:k,setControlledAlignItemWithTrigger:A}=SF(),P=eA()!=null,R=gf(),{nonce:C,disableStyleElements:E}=OF(),D=h.useState("id"),I=h.useState("open"),O=h.useState("openMethod"),_=h.useState("mounted"),z=h.useState("popupProps"),H=h.useState("transitionStatus"),B=h.useState("triggerElement"),L=h.useState("positionerElement"),F=h.useState("listElement"),$=x.useRef(!1),X=x.useRef(!1),K=x.useRef({}),q=eu(),Q=Ie(re=>{if(!L||!h.context.popupRef.current||!X.current)return;const M=L.style.top==="0px",U=L.style.bottom==="0px";if($.current||!N||!M&&!U){h.context.handleScrollArrowVisibility(re);return}const Z=sA(L),ae=vf(L.getBoundingClientRect().height,"y",Z),ce=Gt(L),W=Cn(L),ue=W.getComputedStyle(L),ve=parseFloat(ue.marginTop),ee=parseFloat(ue.marginBottom),he=nA(W.getComputedStyle(h.context.popupRef.current)),te=Math.min(ce.documentElement.clientHeight-ve-ee,he),ke=re.scrollTop,le=Vh(re);let de=null;const Se=oe=>{L.style.height=`${oe}px`},Te=M?le-ke:ke,_e=Math.min(ae+Te,te);if(Te<=Tl){const oe=Li(Te,0,te-ae);oe>0&&Se(ae+oe),re.scrollTop=M?le:0,te-(ae+oe)<=Tl&&($.current=!0),h.context.handleScrollArrowVisibility(re);return}if(te-_e>Tl)de=M?1/0:0;else if(U&&keTl&&(re.scrollTop=oe)}Ae>=te-Tl&&($.current=!0),h.context.handleScrollArrowVisibility(re)});x.useImperativeHandle(h.context.scrollHandlerRef,()=>Q,[Q]),oa({open:I,ref:h.context.popupRef,onComplete(){I&&h.context.onOpenChangeComplete(!0)}});const G={open:I,transitionStatus:H,side:w,align:S};Me(()=>{!L||!h.context.popupRef.current||Object.keys(K.current).length||(K.current={top:L.style.top||"0",left:L.style.left||"0",right:L.style.right,height:L.style.height,bottom:L.style.bottom,minHeight:L.style.minHeight,maxHeight:L.style.maxHeight,marginTop:L.style.marginTop,marginBottom:L.style.marginBottom})},[h,L]),Me(()=>{I||N||(X.current=!1,$.current=!1,Hh(L,K.current))},[I,N,L]),Me(()=>{const re=h.context.popupRef.current;if(!I||!B||!L||!re||N&&!k||h.state.transitionStatus==="ending")return;if(X.current=!0,re.style.removeProperty(tA),!N){q.request(()=>h.context.handleScrollArrowVisibility(F||re));return}const M=IF(re);try{let U=h.context.selectedItemTextRef.current;U?.isConnected||(U=!h.select("hasSelectedValue")&&h.context.firstItemTextRef.current?.isConnected?h.context.firstItemTextRef.current:null);const Z=h.context.valueRef.current,ae=Cn(L),ce=ae.getComputedStyle(L),W=ae.getComputedStyle(re),ue=Gt(B),ve=sA(B),ee=Fh(B.getBoundingClientRect(),ve),he=Fh(L.getBoundingClientRect(),ve),te=ee.height,ke=F||re,le=ke.scrollHeight,de=parseFloat(W.borderBottomWidth),Se=parseFloat(ce.marginTop)||10,Te=parseFloat(ce.marginBottom)||10,_e=parseFloat(ce.minHeight)||100,Ae=nA(W),oe=5,me=5,pe=20,Ce=ue.documentElement.clientHeight-Se-Te,Ne=ue.documentElement.clientWidth,be=Ce-ee.bottom+te;let De,Ge=R==="rtl"?ee.right-he.width:ee.left,Ct=0;if(U&&Z){const rn=Fh(Z.getBoundingClientRect(),ve);De=Fh(U.getBoundingClientRect(),ve),Ge=he.left+(R==="rtl"?rn.right-De.right:rn.left-De.left);const nt=rn.top-ee.top+rn.height/2;Ct=De.top-he.top+De.height/2-nt}const Tt=be+Ct+Te+de;let Mt=Math.min(Ce,Tt);const ot=Ce-Se-Te,Kn=Tt-Mt,ms=Ne-me;L.style.left=`${Li(Ge,oe,ms-he.width)}px`,L.style.height=`${Mt}px`,L.style.maxHeight="none",L.style.marginTop=`${Se}px`,L.style.marginBottom=`${Te}px`,re.style.height="100%";const Yn=Vh(ke),vs=Kn>=Yn-Tl;vs&&(Mt=Math.min(Ce,he.height)-(Kn-Yn));const it=ee.topCe-pe||Math.ceil(Mt)+Tl=ot?"0":`${rn}px`,L.style.height=`${Mt}px`,ke.scrollTop=Vh(ke)}else L.style.bottom="0",ke.scrollTop=Kn;if(De){const rn=he.top,nt=he.height,Dt=De.top+De.height/2,qt=Li(nt>0?(Dt-rn)/nt*100:50,0,100);re.style.setProperty(tA,`50% ${qt}%`)}(Vn===Ce||Mt>=Ae)&&($.current=!0),h.context.handleScrollArrowVisibility(ke),v&&h.state.selectedIndex===null&&h.state.activeIndex===null&&h.context.listRef.current[0]!=null&&h.set("activeIndex",0)}finally{M()}},[h,I,L,B,N,A,q,F,v,R,k]),x.useEffect(()=>{if(!N||!L||!I)return;const re=Cn(L);function M(U){h.context.setOpen(!1,qe(k4,U))}return St(re,"resize",M)},[h,N,L,I]);const J={...F?{role:"presentation"}:{role:"listbox","aria-multiselectable":b||void 0,"aria-readonly":y||void 0,id:`${D}-list`},onKeyDown(re){P&&Rh.has(re.key)&&re.stopPropagation()},onScroll(re){F||Q(re.currentTarget)},...N&&{style:F?{height:"100%"}:NF},className:!F&&N?JE.className:void 0},Y=yt("div",t,{ref:[a,h.context.popupRef],state:G,stateAttributesMapping:MF,props:[z,J,xf(H),p]});return s.jsxs(x.Fragment,{children:[!E&&JE.getElement(C),s.jsx(mh,{context:j,modal:!1,disabled:!_,openInteractionType:O,returnFocus:f,restoreFocus:!0,children:Y})]})});function nA(e){const t=e.maxHeight;return t.endsWith("px")&&parseFloat(t)||1/0}function Vh(e){return XE(e.scrollHeight,e.clientHeight)}function sA(e){return kT.getScale(e)}function vf(e,t,a){return e/a[t]}function Fh(e,t){return nf({x:vf(e.x,"x",t),y:vf(e.y,"y",t),width:vf(e.width,"x",t),height:vf(e.height,"y",t)})}const rA=[["transform","none"],["scale","1"],["translate","0 0"]];function IF(e){const{style:t}=e,a={};for(const[o,c]of rA)a[o]=t.getPropertyValue(o),t.setProperty(o,c,"important");return()=>{for(const[o]of rA){const c=a[o];c?t.setProperty(o,c):t.removeProperty(o)}}}const aA=x.createContext(void 0);function lj(){const e=x.useContext(aA);if(!e)throw new Error(un(57));return e}const PF=x.memo(x.forwardRef(function(t,a){const{render:o,className:c,style:d,value:f=null,label:p,disabled:h=!1,nativeButton:b=!1,...y}=t,v=x.useRef(null),j=tj({guess:!0,label:p,textRef:v}),w=jo(),{itemProps:S,multiple:N,disabled:k,readOnly:A}=sj(),P=k||h,R=w.useState("isActive",j.index),C=w.useState("open"),E=w.useState("isSelected",f),D=w.useState("isSelectedByFocus",j.index),I=w.useState("isItemEqualToValue"),O=j.index,_=x.useRef(null);Me(()=>{const G=w.context.valuesRef.current;return G[O]=f,()=>{delete G[O]}},[O,f,w]),Me(()=>{const G=w.state.value,J=w.state.selectedIndex;let Y=J,re;N&&Array.isArray(G)?(Y=qE(O,f,w.context.valuesRef.current,G,I,J),re=Y===O,O===J&&!re&&(w.context.selectedItemTextRef.current=null)):(re=G!==void 0&&ca(f,G,I),re&&(Y=O)),w.set("selectedIndex",Y),re&&v.current&&(w.context.selectedItemTextRef.current=v.current)},[O,N,I,w,f]);const z=x.useRef("mouse"),H=x.useRef(!1),{getButtonProps:B,buttonRef:L}=na({disabled:P,focusableWhenDisabled:!0,native:b,composite:!0}),F={disabled:P,selected:E,highlighted:R};function $(G){if(k||A)return;const J=w.state.value;if(N){const Y=Array.isArray(J)?J:[],re=E?GE(Y,f,I):[...Y,f];w.context.setValue(re,qe(af,G))}else w.context.setValue(f,qe(af,G)),w.context.setOpen(!1,qe(af,G))}function X(){w.context.selectionRef.current.dragY=0}const K={role:"option","aria-selected":E,tabIndex:C&&R?0:-1,onKeyDown(G){w.set("activeIndex",O),G.key===" "&&w.context.typingRef.current&&G.preventDefault()},onClick(G){const J=z.current!=="touch",Y=G.nativeEvent.pointerType,re=J&&Jm(G.nativeEvent)&&(Y!==void 0||R),M=J&&!re&&!H.current;H.current=!1,!(P||M)&&$(G.nativeEvent)},onPointerEnter(G){z.current=G.pointerType},onPointerMove(G){if(G.pointerType==="mouse"&&G.buttons===1){const J=w.context.selectionRef.current;J.dragY+=G.movementY,J.dragY**2>=64&&(J.allowUnselectedMouseUp=!0)}},onPointerDown(G){z.current=G.pointerType,H.current=!0,X()},onMouseUp(){if(X(),P||z.current==="touch"||H.current)return;const G=!w.context.selectionRef.current.allowSelectedMouseUp&&E,J=!w.context.selectionRef.current.allowUnselectedMouseUp&&!E;G||J||(H.current=!0,_.current?.click(),H.current=!1)}},q=yt("div",t,{ref:[L,a,j.ref,_],state:F,props:[S,K,y,B]}),Q=x.useMemo(()=>({selected:E,index:O,textRef:v,selectedByFocus:D}),[E,O,v,D]);return s.jsx(aA.Provider,{value:Q,children:q})})),_F=x.forwardRef(function(t,a){const{selected:o}=lj();return t.keepMounted||o?s.jsx(LF,{...t,ref:a}):null}),LF=x.memo(x.forwardRef((e,t)=>{const{render:a,className:o,style:c,keepMounted:d,...f}=e,{selected:p}=lj(),h=x.useRef(null),{transitionStatus:b,setMounted:y}=Oi(p),j=yt("span",e,{ref:[t,h],state:{selected:p,transitionStatus:b},props:[{"aria-hidden":!0,children:"✔️"},f],stateAttributesMapping:co});return oa({batch:!0,enabled:!p,open:p,ref:h,onComplete(){p||y(!1)}}),j})),zF=x.memo(x.forwardRef(function(t,a){const{index:o,textRef:c,selectedByFocus:d}=lj(),f=jo(),{render:p,className:h,style:b,...y}=t,v=x.useCallback(w=>{w&&(o===0&&(f.context.firstItemTextRef.current=w),d&&(f.context.selectedItemTextRef.current=w))},[f,o,d]);return yt("div",t,{ref:[v,a,c],props:y})})),ut=pF,dt=yF;function ft({className:e,children:t,...a}){return s.jsxs(bF,{"data-slot":"select-trigger",className:Ue("inline-flex h-[30px] min-w-0 cursor-pointer items-center justify-between gap-1.5 rounded-md border border-control-border bg-control px-2.5","[&>span]:min-w-0 [&>span]:truncate","text-[12.5px] font-normal text-foreground","transition-colors duration-150 ease-out","hover:border-control-border-hover hover:bg-control-hover","focus-visible:border-primary focus-visible:shadow-focus focus-visible:outline-none","data-disabled:cursor-not-allowed data-disabled:bg-control data-disabled:text-muted-foreground data-disabled:opacity-60",e),...a,children:[t,s.jsx(jF,{className:"flex flex-none text-muted-foreground transition-transform duration-[180ms] data-popup-open:rotate-180",children:s.jsx("svg",{viewBox:"0 0 10 6",className:"size-2.5","aria-hidden":"true",children:s.jsx("path",{d:"M1 1l4 4 4-4",stroke:"currentColor",strokeWidth:"1.4",fill:"none",strokeLinecap:"round",strokeLinejoin:"round"})})})]})}function pt({className:e,sideOffset:t=4,children:a,...o}){return s.jsx(wF,{children:s.jsx(TF,{sideOffset:t,alignItemWithTrigger:!1,className:"z-[35]",children:s.jsx(DF,{"data-slot":"select-content",className:Ue("max-h-[260px] min-w-[var(--anchor-width)] overflow-y-auto overscroll-contain rounded-lg border border-border-strong bg-raised p-[5px] shadow-3","outline-none","data-open:animate-in data-open:fade-in-0","data-closed:animate-out data-closed:fade-out-0",e),...o,children:a})})})}function $e({className:e,children:t,...a}){return s.jsxs(PF,{"data-slot":"select-item",className:Ue("flex min-h-7 cursor-pointer items-center gap-2 rounded-sm px-[9px] text-[12.5px] leading-[1.4] text-foreground select-none","transition-colors duration-[120ms] ease-out","data-[highlighted]:bg-nav-hover","data-[selected]:bg-primary-soft data-[selected]:font-semibold data-[selected]:text-primary-fg","data-[highlighted]:data-[selected]:bg-primary-tint","data-disabled:pointer-events-none data-disabled:font-normal data-disabled:text-muted-foreground",e),...a,children:[s.jsx(zF,{className:"min-w-0 flex-1 truncate",children:t}),s.jsx(_F,{className:"flex flex-none text-primary",children:s.jsx("svg",{viewBox:"0 0 12 12",className:"size-3","aria-hidden":"true",children:s.jsx("path",{d:"M2.5 6.2 4.8 8.5 9.5 3.8",stroke:"currentColor",strokeWidth:"1.8",fill:"none",strokeLinecap:"round",strokeLinejoin:"round"})})})]})}function En({options:e,value:t,onValueChange:a,disabled:o=!1,className:c,...d}){const f=x.useRef(null),p=x.useRef(new Map),[h,b]=x.useState({left:0,width:0,ready:!1}),[y,v]=x.useState(!1),j=x.useCallback(()=>{const w=f.current,S=p.current.get(t);if(!w||!S){b(R=>R.ready?{...R,ready:!1}:R);return}const N=w.getBoundingClientRect(),k=S.getBoundingClientRect(),A=k.left-N.left-w.clientLeft,P=k.width;b(R=>R.ready&&R.left===A&&R.width===P?R:{left:A,width:P,ready:!0})},[t]);return x.useLayoutEffect(()=>{j();const w=f.current;if(!w||typeof ResizeObserver>"u")return;const S=new ResizeObserver(()=>j());S.observe(w);for(const N of p.current.values())S.observe(N);return()=>S.disconnect()},[j,e]),x.useEffect(()=>{if(!h.ready||y)return;const w=requestAnimationFrame(()=>v(!0));return()=>cancelAnimationFrame(w)},[h.ready,y]),s.jsxs(zE,{ref:f,"data-slot":"segmented-control",className:Ue("relative inline-flex gap-0.5 rounded-md border border-control-border bg-control p-0.5",c),value:t,disabled:o,onValueChange:w=>a(w),...d,children:[s.jsx("span",{"aria-hidden":"true","data-slot":"segmented-thumb","data-ready":h.ready?"true":"false","data-animate":y?"true":"false",className:Ue("pointer-events-none absolute top-0.5 bottom-0.5 left-0 rounded-sm bg-primary-soft","data-[ready=false]:opacity-0","data-[animate=true]:transition-[transform,width] data-[animate=true]:duration-200 data-[animate=true]:ease-in-out"),style:{transform:`translateX(${h.left}px)`,width:h.width}}),e.map(w=>s.jsxs(PE,{value:w.value,"data-slot":"segmented-item",disabled:w.disabled,"data-zero":w.count===0?"true":void 0,className:Ue("group/seg relative z-[1] inline-flex h-6 items-center gap-[5px] rounded-sm border-0 bg-transparent px-2.5","text-xs font-medium whitespace-nowrap text-subtle select-none","transition-[background-color,color] duration-150 ease-out","hover:bg-nav-hover hover:text-foreground","data-checked:bg-transparent data-checked:text-primary-fg data-checked:hover:bg-transparent","data-disabled:cursor-not-allowed data-disabled:opacity-40","data-[zero=true]:data-unchecked:opacity-45"),ref:S=>{S?p.current.set(w.value,S):p.current.delete(w.value)},children:[w.label,w.count!==void 0&&s.jsx("span",{className:Ue("min-w-4 rounded-pill bg-surface-3 px-[5px] text-center text-[10.5px] font-semibold tabular-nums text-muted-foreground","group-data-checked/seg:bg-primary-tint group-data-checked/seg:text-primary-fg"),children:w.count})]},w.value))]})}const BF=x.createContext(void 0);function HF(){return x.useContext(BF)}const UF=x.forwardRef(function(t,a){const{className:o,defaultPressed:c=!1,disabled:d=!1,form:f,onPressedChange:p,pressed:h,render:b,type:y,value:v,nativeButton:j=!0,style:w,...S}=t,N=ka(v||void 0),k=HF(),A=k?.value??[],P=(d||k?.disabled)??!1,[R,C]=Ka({controlled:k?N!==void 0&&A.indexOf(N)>-1:h,default:c,name:"Toggle",state:"pressed"}),{getButtonProps:E,buttonRef:D}=na({disabled:P,native:j}),I={disabled:P,pressed:R},O=[D,a],_=[{"aria-pressed":R,onClick(B){const L=!R,F=qe(Qn,B.nativeEvent);p?.(L,F),!F.isCanceled&&(N&&k?.setGroupValue?.(N,L,F),!F.isCanceled&&C(L))}},S,E],z=yt("button",t,{enabled:!k,state:I,ref:O,props:_}),H=x.useMemo(()=>({disabled:P,focusableWhenDisabled:!1}),[P]);return k?s.jsx(ME,{tag:"button",render:b,className:o,style:w,metadata:H,state:I,refs:O,props:_}):z}),VF=Xc(["inline-flex shrink-0 cursor-pointer items-center justify-center gap-1.5 whitespace-nowrap border","font-medium transition-[background-color,border-color,color] duration-150 ease-out","outline-none select-none disabled:pointer-events-none disabled:opacity-45","[&_svg]:pointer-events-none [&_svg]:shrink-0","data-pressed:border-primary-bd data-pressed:bg-primary-soft data-pressed:font-semibold data-pressed:text-primary-fg","data-pressed:hover:bg-primary-tint"],{variants:{variant:{default:"border-transparent bg-transparent text-subtle hover:bg-nav-hover hover:text-foreground",outline:"border-control-border bg-control text-foreground shadow-1 hover:border-control-border-hover hover:bg-control-hover"},size:{default:"h-[30px] rounded-md px-3 text-[12.5px]",xs:"h-6 rounded-sm px-2 text-[11.5px]",sm:"h-[26px] rounded-sm px-2.5 text-[12px]",lg:"h-9 rounded-md px-4 text-[13px]"}},defaultVariants:{variant:"default",size:"default"}});function FF({className:e,variant:t,size:a,...o}){return s.jsx(UF,{"data-slot":"toggle",className:Ue(VF({variant:t,size:a}),e),...o})}function $F(e,t,a,o,c,d,f,p,h,b=2){const y=i4(a.current,{event:e,orientation:o,loopFocus:c,rtl:d,cols:b,disabledIndices:f,minIndex:p,maxIndex:h,prevIndex:t>h?p:t,stopEvent:!0});return mo(a.current,y)?void 0:y}const lA=x.createContext(void 0),oA=x.createContext(void 0),iA=x.createContext(void 0),cA=x.createContext(!1),uA=x.createContext("");function Ta(){const e=x.useContext(lA);if(!e)throw new Error(un(22));return e}function $h(){const e=x.useContext(oA);if(!e)throw new Error(un(23));return e}function yf(){const e=x.useContext(iA);if(!e)throw new Error(un(24));return e}function dA(){return x.useContext(uA)}function qF(){return x.useContext(cA)}const GF={id:e=>e.id,labelId:e=>e.labelId,items:e=>e.items,selectedValue:e=>e.selectedValue,hasSelectionChips:e=>{const t=e.selectedValue;return Array.isArray(t)&&t.length>0},hasSelectedValue:e=>{const{selectedValue:t,selectionMode:a}=e;return t==null?!1:a==="multiple"&&Array.isArray(t)?t.length>0:!0},hasNullItemLabel:(e,t)=>t?KE(e.items):!1,open:e=>e.open,mounted:e=>e.mounted,forceMounted:e=>e.forceMounted,inline:e=>e.inline,activeIndex:e=>e.activeIndex,selectedIndex:e=>e.selectedIndex,isActive:(e,t)=>e.activeIndex===t,isSelected:(e,t)=>{const a=e.isItemEqualToValue,o=e.selectedValue;return Array.isArray(o)?o.some(c=>ca(t,c,a)):ca(t,o,a)},transitionStatus:e=>e.transitionStatus,popupProps:e=>e.popupProps,listProps:e=>e.listProps,inputProps:e=>e.inputProps,triggerProps:e=>e.triggerProps,itemProps:e=>e.itemProps,positionerElement:e=>e.positionerElement,listElement:e=>e.listElement,popupId:e=>e.popupId,triggerElement:e=>e.triggerElement,inputElement:e=>e.inputElement,inputGroupElement:e=>e.inputGroupElement,popupSide:e=>e.popupSide,openMethod:e=>e.openMethod,inputInsidePopup:e=>e.inputInsidePopup,inputOwnsFormValue:e=>e.inputOwnsFormValue,selectionMode:e=>e.selectionMode,name:e=>e.name,form:e=>e.form,disabled:e=>e.disabled,readOnly:e=>e.readOnly,required:e=>e.required,grid:e=>e.grid,virtualized:e=>e.virtualized,itemToStringLabel:e=>e.itemToStringLabel,isItemEqualToValue:e=>e.isItemEqualToValue,modal:e=>e.modal,autoHighlight:e=>e.autoHighlight};function fA(e){return e==null?void 0:`${e}-popup`}function KF(e,t){return(a,o)=>a==null?!1:e.contains(a,o,t)}const pA=new Map;function YF(e={}){const t={usage:"search",sensitivity:"base",ignorePunctuation:!0,...e},a=`${hy(e.locale)}|${JSON.stringify(t)}`,o=pA.get(a);if(o)return o;const c=new Intl.Collator(e.locale,t),d={contains(f,p,h){if(!p)return!0;const b=wo(f,h);for(let y=0;y<=b.length-p.length;y+=1)if(c.compare(b.slice(y,y+p.length),p)===0)return!0;return!1},startsWith(f,p,h){if(!p)return!0;const b=wo(f,h);return c.compare(b.slice(0,p.length),p)===0},endsWith(f,p,h){if(!p)return!0;const b=wo(f,h),y=p.length;return b.length>=y&&c.compare(b.slice(b.length-y),p)===0}};return pA.set(a,d),d}const XF=YF;function QF(e,t=!1){const{overflowY:a}=yr(e);return a!=="auto"&&a!=="scroll"?!1:t?e.clientHeight>0:e.scrollHeight>e.clientHeight}const mA=Symbol("none"),oj={value:mA,index:-1};function ZF(e,t,a){const o=e.get(t);if(o!==void 0||a===_h)return o;for(const[c,d]of e)if(ca(c,t,a))return d}function WF(e){const{id:t,onOpenChangeComplete:a,defaultSelectedValue:o=null,selectedValue:c,onSelectedValueChange:d,defaultInputValue:f,inputValue:p,open:h,defaultOpen:b=!1,selectionMode:y,onItemHighlighted:v,name:j,form:w,disabled:S=!1,readOnly:N=!1,required:k=!1,inputRef:A,grid:P=!1,items:R,filteredItems:C,filter:E,filterQuery:D,openOnInputClick:I=!0,autoHighlight:O=!1,keepHighlight:_=!1,highlightItemOnHover:z=!0,loopFocus:H=!0,itemToStringLabel:B,itemToStringValue:L,isItemEqualToValue:F=_h,virtualized:$=!1,inline:X=!1,fillInputOnItemPress:K=!0,modal:q=!1,limit:Q=-1,autoComplete:G="list",formAutoComplete:J,locale:Y,submitOnItemClick:re=!1}=e,{clearErrors:M}=Qc(),{setDirty:U,validityData:Z,setFilled:ae,name:ce,disabled:W,setTouched:ue,setFocused:ve,validationMode:ee,validation:he}=Na(),te=gf(),ke=io({id:t}),le=XF({locale:Y}),de=Array.isArray(R)?null:R;if(de&&typeof de.label!="function")throw new Error(un(100));const Se=de?de.data:R,Te=de?.value,_e=Te?void 0:Se,Ae=x.useMemo(()=>{if(!C||!Te)return;const Oe=zh(C),Be=Oe.map(Te);let lt;return{values:Be,findItem(Qt,In){if(!lt){lt=new Map;for(let gn=0;gnde?Oe=>de.label(Oe,F,Be=>{const lt=Ae?.findItem(Be,F);return lt!=null?de.itemLabel(lt):wo(Be,B)}):B,[de,B,Ae,F]),me=x.useMemo(()=>de?Object.assign(Oe=>de.itemLabel(Oe),{selected:Oe=>wo(Oe,oe)}):B,[de,oe,B]);function pe(Oe){return wo(Oe,oe)}const[Ce,Ne]=x.useState(!1),[be,De]=x.useState(null),Ge=x.useRef(be),Ct=x.useRef([]),Tt=x.useRef([]),Mt=x.useRef(null),ot=x.useRef(null),Kn=x.useRef(null),ms=x.useRef(null),Yn=x.useRef(null),vs=x.useRef(!0),it=x.useRef(!1),$t=x.useRef(null),Vn=x.useRef(null),rn=x.useRef(null),nt=x.useRef(oj),Dt=x.useRef(null),qt=x.useRef([]),es=x.useRef(null),Fn=W||S,$n=ce??j,Dn=y==="multiple",en=y==="single",cs=p!==void 0||f!==void 0,Et=Se!==void 0,xt=C!==void 0;let jt;O==="always"?jt="always":jt=O?"input-change":!1;const[wt,Tr]=Ka({controlled:c,default:Dn?o??Ir:o,name:"Combobox",state:"selectedValue"}),ar=x.useMemo(()=>E===null?()=>!0:E!==void 0?E:KF(le,me),[E,le,me]),Fr=Ps(()=>cs?f??"":en?pe(wt):"").current,[Nn,al]=Ka({controlled:p,default:Fr,name:"Combobox",state:"inputValue"}),[ln,hc]=Ka({controlled:h,default:b,name:"Combobox",state:"open"}),sb=rj(Se),mr=!ln&&be!==null?be:String(Nn).trim(),Pa=en?pe(wt):"",Go=en&&!Ce&&mr!==""&&Pa.length===mr.length&&le.contains(Pa,mr),Ko=Go?"":D??mr,Fp=Et&&xt&&Go&&(!de||de.hasValue(wt,F)),gc=x.useMemo(()=>Se?zh(Se):Ir,[Se]),Yo=x.useMemo(()=>{if(C&&!Fp)return C;if(!Se)return Ir;if(sb){const Be=Se,lt=[];let Qt=0;for(const In of Be){if(Q>-1&&Qt>=Q)break;const gn=Q>-1?Q-Qt:1/0,Pn=Ko===""?In.items.slice(0,gn):[];if(Ko!=="")for(const hs of In.items){if(Pn.length>=gn)break;ar(hs,Ko,me)&&Pn.push(hs)}if(Pn.length>0){const hs={...In,items:Pn};lt.push(hs),Qt+=Pn.length}}return lt}if(Ko==="")return Q>-1?gc.slice(0,Q):gc;const Oe=[];for(const Be of gc){if(Q>-1&&Oe.length>=Q)break;ar(Be,Ko,me)&&Oe.push(Be)}return Oe},[C,Fp,Se,sb,Ko,Q,ar,me,gc]),Os=x.useMemo(()=>{if(Ae&&Yo===C)return Ae.values;const Oe=zh(Yo);return Te?Oe.map(Be=>Te(Be)):Oe},[Yo,C,Ae,Te]),et=Ps(()=>{let Oe=null;return X&&ln&&Et&&y!=="none"&&(Oe=bf(Os,wt,F,Dn)),new ou({id:ke,labelId:void 0,selectedValue:wt,open:ln,items:_e,selectionMode:y,name:$n,form:w,disabled:Fn,readOnly:N,required:k,grid:P,virtualized:$,openOnInputClick:I,itemToStringLabel:oe,isItemEqualToValue:F,modal:q,autoHighlight:jt,submitOnItemClick:re,hasInputValue:cs,mounted:!1,forceMounted:!1,transitionStatus:"idle",inline:X,activeIndex:null,selectedIndex:Oe,popupProps:{},listProps:{},inputProps:{},triggerProps:{},itemProps:mn,positionerElement:null,listElement:null,popupId:void 0,triggerElement:null,inputElement:null,inputGroupElement:null,popupSide:null,openMethod:null,inputInsidePopup:!0,inputOwnsFormValue:y==="none"},{onOpenChangeComplete:Kt,setOpen:Kt,setInputValue:Kt,setSelectedValue:Kt,setIndices:Kt,handleSelection:Kt,forceMount:Kt,requestSubmit:Kt,listRef:Ct,labelsRef:Tt,popupRef:Mt,emptyRef:Yn,inputRef:ot,startDismissRef:Kn,endDismissRef:ms,keyboardActiveRef:vs,chipsContainerRef:$t,clearRef:Vn,valuesRef:qt,pointerDownItemRef:es,selectionEventRef:rn},GF)}).current,zl=y==="none"?Nn:wt,rb=x.useMemo(()=>y==="none"?zl:Array.isArray(wt)?wt.map(Oe=>Ca(Oe,L)):Ca(wt,L),[zl,L,y,wt]),_a=Ie(v),Ms=Ie(a),Ys=et.useState("activeIndex"),Xo=et.useState("selectedIndex"),xc=et.useState("positionerElement"),ab=et.useState("listElement"),bc=et.useState("triggerElement"),vc=et.useState("inputElement"),yc=et.useState("inputGroupElement"),Ds=et.useState("inline"),lr=et.useState("inputInsidePopup"),Bl=et.useState("inputOwnsFormValue"),Hl=en&&!lr&&Nn===Pa,jc=Zn(bc),{mounted:Qo,setMounted:ys,transitionStatus:$p}=Oi(ln),{openMethod:lb,triggerProps:qp}=EE(ln),Ul=Ie(()=>rb);tu(lr?jc:ot,ke,zl,Ul,!Fn,j);const Vl=Ie(()=>{Se?Tt.current=Os.map(pe):et.set("forceMounted",!0)}),Zo=Ie((Oe,Be,lt)=>{if(Be===-1){if(nt.current===oj)return;nt.current=oj}else nt.current={value:Oe,index:Be};_a(Oe,C4(lt,void 0,{index:Be}))}),$r=Ie(Oe=>{const Be={};Oe.activeIndex!==void 0&&(Be.activeIndex=Oe.activeIndex),Oe.selectedIndex!==void 0&&(Be.selectedIndex=Oe.selectedIndex),et.update(Be);const lt=Oe.activeIndex;if(lt===void 0)return;const Qt=Oe.type||Qn;lt===null?Zo(void 0,-1,Qt):Zo(qt.current[lt],lt,Qt)}),qr=Ie((Oe,Be)=>{if(e.onInputValueChange?.(Oe,Be),!Be.isCanceled){if(it.current=Be.reason===Ya,Be.reason===lf){ln&&be!==null&&De(null);const lt=Be.event,Qt=lt.inputType;if(lt.type==="compositionend"||Qt!=null&&Qt!==""&&Qt!=="insertReplacementText"){const gn=Oe.trim()!=="";gn&&Ne(!0),Dt.current={hasQuery:gn};const Pn=et.state.listElement;if(!et.state.virtualized&&Pn){const hs=Mt.current;for(const Er of Kc(Pn.firstElementChild??Pn)){if(!pn(Er)||(hs?!Ze(hs,Er):Er.getAttribute("role")==="dialog"))break;if(QF(Er)){Er.scrollTop=0;break}}}gn&&jt&&et.state.activeIndex==null&&(ln||Ds)&&et.set("activeIndex",0)}}else Be.reason===Ya&&Oe===""&&et.state.inputInsidePopup&&(Dt.current={hasQuery:!1,selection:!0});al(Oe)}}),ob=Ie(Oe=>{const Be=!Oe&&lr&&!Ds&&Nn!==""&&(String(Nn).trim()===be||Nn===Pa);!Oe&&(Be||Nn===""||Hl)&&Ne(!1),De(null),Be&&qr("",qe(Ya))}),It=Ie((Oe,Be)=>{if(ln!==Oe&&(Be.reason===nu&&Et&&Os.length===0&&!Yn.current&&Be.allowPropagation(),e.onOpenChange?.(Oe,Be),!Be.isCanceled&&(Oe&&be!==null&&ob(Be.reason===lf),!Oe&&Ce&&(en?(Ds||De(mr),mr===""&&Ne(!1)):Dn&&(Ds||De(mr),lr&&$r({activeIndex:null}),(!lr||Ds)&&qr("",qe(Ya,Be.event,void 0,{isItemPress:Be.reason===af})))),hc(Oe),!Oe&&lr&&(Be.reason===xo||Be.reason===ch)&&(ue(!0),ve(!1),ee==="onBlur")))){const lt=y==="none"?Nn:wt;he.commit(lt)}}),wc=Ie((Oe,Be)=>{if(d?.(Oe,Be),Be.isCanceled)return;Tr(Oe),(y==="none"&&Mt.current&&K||en&&!et.state.inputInsidePopup)&&qr(pe(Oe),qe(Be.reason,Be.event))}),od=Ie((Oe,Be)=>{const lt=fs(Oe),Qt=rn.current??Oe;rn.current=null;const In=qe(af,Qt),gn=lt?.closest("a")?.getAttribute("href");if(gn){gn.startsWith("#")&&It(!1,In);return}if(Dn){const Pn=Array.isArray(wt)?wt:[],hs=Lh(Pn,Be,F),Er=hs?GE(Pn,Be,F):[...Pn,Be];if(wc(Er,In),In.isCanceled||!(ot.current?ot.current.value.trim()!=="":!1))return;if(et.state.inputInsidePopup){qr("",qe(Ya,In.event,void 0,{isItemPress:!0}));const Kr=Dt.current;Kr&&!hs&&(Kr.toggledValue=Be)}else It(!1,In)}else{if(wc(Be,In),In.isCanceled)return;It(!1,In)}}),id=Ie(()=>{const Oe=he.inputRef.current?.form??et.state.inputElement?.form;Oe&&typeof Oe.requestSubmit=="function"&&Oe.requestSubmit()}),Gr=Ie(()=>{if(ys(!1),Ms?.(!1),Ne(!1),De(null),$r(y==="none"?{activeIndex:null,selectedIndex:null}:{activeIndex:null}),Dn&&ot.current&&ot.current.value!==""&&!it.current&&qr("",qe(Ya)),en)if(et.state.inputInsidePopup)ot.current&&ot.current.value!==""&&qr("",qe(Ya));else{const Oe=pe(wt);ot.current&&ot.current.value!==Oe&&qr(Oe,qe(Oe===""?Ya:Qn))}}),hr=x.useMemo(()=>Ds&&xc?{current:xc.closest('[role="dialog"]')}:Mt,[Ds,xc]);oa({enabled:!e.actionsRef,open:ln,ref:hr,onComplete(){ln||Gr()}}),x.useImperativeHandle(e.actionsRef,()=>({unmount:Gr}),[Gr]),Me(function(){const Be=Ge.current!==null&&be===null;if(Ge.current=be,ln&&(!Be||!Et)||(ln||(es.current=null),y==="none"))return;const lt=Et?Os:qt.current;$r({selectedIndex:bf(lt,wt,F,Dn)})},[ln,be,wt,y,Dn,Et,Os,F,$r]),Me(()=>{Se&&(qt.current=Os,Ct.current.length=Os.length)},[Se,Os]),Me(()=>{const Oe=Dt.current;if(Oe){const hs=ln||Ds||et.state.positionerElement?.hidden===!1;if(Oe.hasQuery)jt&&hs&&et.set("activeIndex",0),Dt.current=null;else if(String(Nn).trim()===""&&(Dt.current=null,hs)){const Er=Oe.selection;jt==="always"&&!Er&&et.state.selectionMode==="none"&&et.set("activeIndex",0),queueMicrotask(()=>{if(!et.state.open&&!et.state.inline||ot.current&&ot.current.value.trim()!=="")return;const ha=et.state.selectedValue,Kr=et.state.selectionMode==="multiple";if(Kr&&Array.isArray(ha)?ha.length>0:et.state.selectionMode!=="none"&&ha!=null){const Bs=Et||xt?Os:qt.current,za=cu(Bs,Oe.toggledValue,et.state.isItemEqualToValue);et.set("activeIndex",za!==-1?za:bf(Bs,ha,et.state.isItemEqualToValue,Kr))}else Er?et.set("activeIndex",null):jt==="always"&&et.set("activeIndex",0)})}}if(!ln&&!Ds)return;const lt=Et||xt?Os:qt.current,Qt=et.state.activeIndex;if(Qt==null){if(jt==="always"&<.length>0){et.set("activeIndex",0);return}Zo(void 0,-1,Qn);return}if(Qt>=lt.length){Zo(void 0,-1,Qn),et.set("activeIndex",null);return}const In=lt[Qt],gn=nt.current.value,Pn=gn!==mA&&ca(In,gn,et.state.isItemEqualToValue);(nt.current.index!==Qt||!Pn)&&Zo(In,Qt,Qn)},[Ys,jt,Zo,xt,Et,Os,Ds,ln,et,Nn]),Me(()=>{if(y==="none"){ae(String(Nn)!=="");return}ae(Dn?Array.isArray(wt)&&wt.length>0:wt!=null)},[ae,y,Nn,wt,Dn]),x.useEffect(()=>{Et&&jt&&Os.length===0&&$r({activeIndex:null})},[Et,jt,Os.length,$r]);function ib(){ln&&mr!==""&&mr!==String(Fr)&&!Hl&&Ne(!0)}function WS(){ln&&be!==null&&ob(!1)}let cd=!1;function Gp(){!cd&&Nn!==Pa&&(cd=!0,qr(Pa,qe(Qn)))}function JS(){y!=="none"&&(M($n),U($E(wt,Z.initialValue,F)),he.change(wt),en&&!cs&&!lr&&Gp())}function gr(){en&&!cs&&!lr&&!Ce&&Gp()}function Kp(){y==="none"&&(M($n),U(Nn!==Z.initialValue),he.change(Nn))}ia(mr,ib),ia(ln,WS),ia(wt,JS),ia(Pa,gr),ia(Se,gr),ia(Nn,Kp);const Sc=$T({open:Ds?!0:ln,onOpenChange:It,elements:{reference:lr?bc:vc,floating:xc}}),ud=P?"grid":"listbox",La=ln||Ds,Yp=La?"true":"false",Nc=x.useMemo(()=>{const Oe=vc?.tagName==="INPUT",Be=vc==null||Oe,lt=Be||La,Qt=Be?{autoComplete:"off",spellCheck:"false",autoCorrect:"off",autoCapitalize:"none"}:{};return lt&&(Qt.role="combobox",Qt["aria-expanded"]=Yp,Qt["aria-haspopup"]=ud,Qt["aria-controls"]=La?ab?.id:void 0,Qt["aria-autocomplete"]=N?"none":G),{reference:Qt,floating:{role:"presentation"}}},[vc,La,Yp,ud,ab?.id,G,N]),Fl=hh(Sc,{enabled:!Fn&&I,event:"mousedown-only",toggle:!1,touchOpenDelay:lr?0:100,reason:S4}),dd=pf(Sc,{enabled:!Fn&&!Ds,outsidePressEvent:{mouse:"sloppy",touch:"intentional"},bubbles:Ds?!0:void 0,outsidePress(Oe){const Be=fs(Oe);return!Ze(bc,Be)&&!Ze(Vn.current,Be)&&!Ze($t.current,Be)&&!Ze(yc,Be)}}),$l=XT(Sc,{enabled:!Fn,id:ke,listRef:Ct,activeIndex:Ys,selectedIndex:Xo,virtual:!0,loopFocus:H,allowEscape:H&&!jt,focusItemOnOpen:Ce||y==="none"&&!jt?!1:"auto",focusItemOnHover:z,resetOnPointerLeave:!_,orientation:P?"horizontal":void 0,rtl:te==="rtl",disabledIndices:Ir,grid:P?$F:void 0,onNavigate(Oe,Be){!Be&&!ln||$p==="ending"||$r(Be?{activeIndex:Oe,type:vs.current?I1:P1}:{activeIndex:Oe})}}),Xp=x.useMemo(()=>ta($l.reference,{onKeyDown(Oe){P&&et.state.activeIndex==null&&(Oe.key==="ArrowLeft"||Oe.key==="ArrowRight")&&Oe.preventBaseUIHandler()}},dd.reference,Fl.reference,Nc.reference),[$l.reference,dd.reference,Fl.reference,Nc.reference,P,et]),fd=x.useMemo(()=>ta(mf,dd.floating),[dd.floating]),cb=x.useMemo(()=>ta($l.floating,Nc.floating),[$l.floating,Nc.floating]),ub=x.useMemo(()=>{const Oe=$l.item;return Oe?{...Oe,onFocus:void 0}:mn},[$l.item]);et.useContextCallback("setOpen",It),et.useContextCallback("setInputValue",qr),et.useContextCallback("setSelectedValue",wc),et.useContextCallback("setIndices",$r),et.useContextCallback("handleSelection",od),et.useContextCallback("forceMount",Vl),et.useContextCallback("requestSubmit",id),et.useContextCallback("onOpenChangeComplete",a),BE(()=>{et.update({inline:X,popupProps:fd,listProps:cb,inputProps:Xp,triggerProps:qp,itemProps:ub})});const kc={id:ke,selectedValue:wt,open:ln,mounted:Qo,transitionStatus:$p,items:_e,inline:X,popupProps:fd,listProps:cb,inputProps:Xp,triggerProps:qp,itemProps:ub,openMethod:lb,selectionMode:y,name:$n,form:w,disabled:Fn,readOnly:N,required:k,grid:P,virtualized:$,openOnInputClick:I,itemToStringLabel:oe,modal:q,autoHighlight:jt,isItemEqualToValue:F,submitOnItemClick:re,hasInputValue:cs};Me(()=>{et.update({...kc,inputOwnsFormValue:y==="none"&&(X||!et.state.inputInsidePopup)})},[et,...Object.values(kc)]);const ma=sa(A,he.inputRef),Qp=x.useMemo(()=>({query:mr,hasItems:Et,filteredItems:Yo,flatFilteredValues:Os}),[mr,Et,Yo,Os]),Zp=x.useMemo(()=>Array.isArray(zl)?"":Ca(zl,L),[zl,L]),Wo=Dn&&Array.isArray(wt)&&wt.length>0,ll=Dn||y==="none"&&Bl?void 0:$n,db=x.useMemo(()=>!Dn||!Array.isArray(wt)||!$n?null:wt.map(Oe=>{const Be=Ca(Oe,L);return s.jsx("input",{type:"hidden",form:w,name:$n,value:Be,disabled:Fn},Be)}),[Dn,wt,w,$n,L,Fn]),Wp=s.jsxs(x.Fragment,{children:[e.children,s.jsx("input",{...he.getValidationProps(Fn,{onFocus(){if(lr){bc?.focus();return}(ot.current||bc)?.focus()},onChange(Oe){if(Oe.nativeEvent.defaultPrevented||Fn||N)return;const Be=Oe.currentTarget.value,lt=Be.toLowerCase(),Qt=qe(Qn,Oe.nativeEvent),In=()=>qt.current.findIndex(Pn=>Ca(Pn,L).toLowerCase()===lt||pe(Pn).toLowerCase()===lt);function gn(){if(Dn)return;if(y==="none"){qr(Be,Qt);return}let Pn=In();Pn===-1&&(Pn=qt.current.findIndex((Er,ha)=>{const Kr=Tt.current[ha];return Kr!=null&&Kr.toLowerCase()===lt}));const hs=Pn===-1?void 0:qt.current[Pn];hs!=null&&wc?.(hs,Qt)}en&&(Vl(),Se&&In()===-1&&et.set("forceMounted",!0)),queueMicrotask(gn)}}),id:ke&&ll==null?`${ke}-hidden-input`:void 0,form:w,name:ll,autoComplete:J,disabled:Fn,required:k&&!Wo,readOnly:N,value:Zp,ref:ma,style:ll?su:_i,tabIndex:-1,"aria-hidden":!0,suppressHydrationWarning:!0}),db]});return s.jsx(lA.Provider,{value:et,children:s.jsx(oA.Provider,{value:Sc,children:s.jsx(cA.Provider,{value:Et,children:s.jsx(iA.Provider,{value:Qp,children:s.jsx(uA.Provider,{value:Nn,children:Wp})})})})})}function JF(e){const{multiple:t=!1,defaultValue:a,value:o,onValueChange:c,autoComplete:d,...f}=e;return s.jsx(WF,{...f,selectionMode:t?"multiple":"single",selectedValue:o,defaultSelectedValue:a,onSelectedValueChange:c,formAutoComplete:d})}const e6="data-popup-side",t6="data-list-empty",hA={...Yv,...Ti,popupSide:e=>e?{[e6]:e}:null,listEmpty:e=>e?{[t6]:""}:null},n6=x.createContext(void 0);function s6(){return x.useContext(n6)}const gA=x.createContext(void 0);function ij(e){const t=x.useContext(gA);if(t===void 0&&!e)throw new Error(un(21));return t}const xA=x.forwardRef(function(t,a){const o=Ta(),{buttonRef:c,getButtonProps:d}=na({native:!1}),f=sa(a,c);function p(b){o.context.setOpen(!1,qe(dy,b.nativeEvent,b.currentTarget))}const h=d({onClick:p});return s.jsx("span",{ref:f,...h,"aria-label":"Dismiss",tabIndex:void 0,style:su})});function bA(e){const t=e.useState("mounted"),a=e.useState("popupSide"),o=e.useState("positionerElement");return t&&o?a:null}function qh(){return yf().filteredItems.length===0}function r6(e){return e==="rtl"?["ArrowRight","ArrowLeft"]:["ArrowLeft","ArrowRight"]}function a6(e,t){const a=e>=t-1?t-2:e;return a>=0?a:void 0}function vA(e,t,a){const o=e.context.listRef.current[t];o&&(e.context.selectionEventRef.current=a,o.click(),e.context.selectionEventRef.current=null)}const l6=x.forwardRef(function(t,a){const{render:o,className:c,disabled:d=!1,id:f,style:p,...h}=t,{state:b,disabled:y,setTouched:v,setFocused:j,validationMode:w,validation:S}=Na(),{labelId:N}=yl(),k=s6(),P=!!ij(!0),R=Ta(),C=dA(),E=gf(),D=R.useState("required"),I=R.useState("disabled"),O=R.useState("readOnly"),_=R.useState("name"),z=R.useState("form"),H=R.useState("selectionMode"),B=R.useState("autoHighlight"),L=R.useState("inputProps"),F=R.useState("triggerProps"),$=R.useState("open"),X=R.useState("mounted"),K=R.useState("selectedValue"),q=R.useState("id"),Q=R.useState("inline"),G=R.useState("modal"),J=!!B,Y=bA(R),re=y||I||d,M=qh(),U=P||Q,Z=!U||G,ae=ka(f??(U?void 0:q)),ce=P?n1:b,[W,ue]=x.useState(null),ve=x.useRef(!1),ee=x.useRef(null),he=x.useRef(!1),te=H==="none"&&!P,ke=Ie(me=>{const pe=P||R.state.inline;pe&&!R.state.hasInputValue&&R.context.setInputValue("",qe(Qn)),R.update({inputElement:me,inputInsidePopup:pe,inputOwnsFormValue:te})}),le=P?h:S.getValidationProps(re,h);function de(){R.context.setIndices({activeIndex:null,selectedIndex:null,type:R.context.keyboardActiveRef.current?I1:P1})}function Se(){R.context.keyboardActiveRef.current=!1}const Te={...ce,open:$,disabled:re,readOnly:O,popupSide:Y,listEmpty:M};function _e(me){if(!k)return;let pe;const{highlightedChipIndex:Ce}=k,Ne=k.chipsRef.current.length,[be,De]=r6(E);return Ce!==void 0?(me.key===be?(me.preventDefault(),Ce>0?pe=Ce-1:pe=void 0):me.key===De?(me.preventDefault(),Ce0&&(me.preventDefault(),pe=Ne>0?Ne-1:void 0),pe)}const Ae=yt("input",t,{state:Te,ref:[a,R.context.inputRef,ke],props:[L,F,{value:W??C,"aria-readonly":O||void 0,"aria-required":D||void 0,"aria-labelledby":N,disabled:re,readOnly:O,required:H==="none"?D:void 0,form:z,...te&&_&&{name:_},id:ae,onFocus(){if(j(!0),!Q||!he.current)return;he.current=!1;const me=ee.current;me==null||!Object.hasOwn(R.context.valuesRef.current,me)||R.context.setIndices({activeIndex:me})},onBlur(){v(!0),j(!1);const me=R.state.activeIndex;if(Q&&me!==null&&B!=="always"&&(ee.current=me,he.current=!0,R.context.setIndices({activeIndex:null})),w==="onBlur"){const pe=H==="none"?C:K;S.commit(pe)}},onCompositionStart(me){Ym||(ve.current=!0,ue(me.currentTarget.value))},onCompositionEnd(me){ve.current=!1;const pe=me.currentTarget.value;ue(null),R.context.setInputValue(pe,qe(lf,me.nativeEvent))},onChange(me){const pe=me.nativeEvent,Ce=pe.inputType,Ne=!Ce||Ce==="insertReplacementText",be=ve.current||!Ne;function De(Mt){O||re||!Mt||!be||(R.context.setOpen(!0,qe(lf,pe)),J||de())}if(ve.current){const Mt=me.currentTarget.value;ue(Mt),Mt===""&&!R.state.openOnInputClick&&!R.state.inputInsidePopup&&R.context.setOpen(!1,qe(Ya,pe));const ot=Mt.trim(),Kn=J&&ot!=="";De(ot),$&&R.state.activeIndex!==null&&!Kn&&de();return}const Ge=qe(lf,pe);if(R.context.setInputValue(me.currentTarget.value,Ge),Ge.isCanceled)return;const Ct=me.currentTarget.value==="",Tt=qe(Ya,pe);Ct&&!R.state.inputInsidePopup&&(H==="single"&&R.context.setSelectedValue(null,Tt),R.state.openOnInputClick||R.context.setOpen(!1,Tt)),De(me.currentTarget.value.trim()),$&&R.state.activeIndex!==null&&!J&&de()},onKeyDown(me){if(me.ctrlKey||me.shiftKey||me.altKey||me.metaKey)return;if(R.context.keyboardActiveRef.current=!0,re||O){O&&me.key==="Enter"&&$&&R.state.activeIndex!==null&&Cs(me);return}const pe=me.currentTarget,Ce=pe.scrollWidth-pe.clientWidth,Ne=E==="rtl";if(me.key==="Home"){Cs(me);const Ge=c1&&Ne?pe.value.length:0;pe.setSelectionRange(Ge,Ge),pe.scrollLeft=0;return}if(me.key==="End"){Cs(me);const Ge=c1&&Ne?0:pe.value.length;pe.setSelectionRange(Ge,Ge),pe.scrollLeft=Ne?-Ce:Ce;return}if(!X&&me.key==="Escape"){const Ge=H==="multiple"&&Array.isArray(K)?K.length===0:K===null,Ct=qe(nu,me.nativeEvent),Tt=H==="multiple"?[]:null;R.context.setInputValue("",Ct),R.context.setSelectedValue(Tt,Ct),!Ge&&!R.state.inline&&!Ct.isPropagationAllowed&&me.stopPropagation();return}if(k&&me.key==="Backspace"&&pe.value===""&&k.highlightedChipIndex===void 0&&Array.isArray(K)&&K.length>0){const Ge=k.chipsRef.current.length,Ct=Ge>0?Ge-1:K.length-1,Tt=K.filter((Mt,ot)=>ot!==Ct);de(),R.context.setSelectedValue(Tt,qe(Qn,me.nativeEvent));return}const be=k?.highlightedChipIndex!==void 0,De=_e(me);if(k?.setHighlightedChipIndex(De),De!==void 0?k?.chipsRef.current[De]?.focus():be&&R.context.inputRef.current?.focus(),me.which!==229&&me.key==="Enter"&&$){const Ge=R.state.activeIndex,Ct=me.nativeEvent;if(Ge===null){if(Q)return;R.context.setOpen(!1,qe(Qn,Ct));return}Cs(me),vA(R,Ge,Ct)}},onPointerMove:Se,onPointerDown:Se},le],stateAttributesMapping:hA}),oe=P?s.jsx(r1.Provider,{value:s1,children:Ae}):Ae;return s.jsxs(x.Fragment,{children:[$&&Z&&s.jsx(xA,{ref:R.context.startDismissRef}),oe]})}),o6=x.forwardRef(function(t,a){const{render:o,className:c,nativeButton:d=!0,disabled:f=!1,id:p,style:h,...b}=t,{state:y,disabled:v,setTouched:j,setFocused:w,validationMode:S,validation:N}=Na(),{labelId:k}=yl(),A=Ta(),P=A.useState("selectionMode"),R=A.useState("disabled"),C=A.useState("readOnly"),E=A.useState("required"),D=A.useState("positionerElement"),I=A.useState("listElement"),O=A.useState("popupId"),_=A.useState("triggerProps"),z=A.useState("inputInsidePopup"),H=A.useState("id"),B=A.useState("labelId"),L=A.useState("open"),F=A.useState("selectedValue"),$=A.useState("activeIndex"),X=A.useState("selectedIndex"),K=A.useState("hasSelectedValue"),q=$h(),Q=dA(),G=er(),J=v||R||f,Y=qh(),re=bA(A);io({id:z?p:void 0});const M=z?p??H:p,U=QE(k,B);let Z;L&&z?Z=O??fA(H):L&&(Z=I?.id);const ae=x.useRef("");function ce(le){ae.current=le.pointerType}const{reference:W}=QT(q,{enabled:!L&&!C&&!R&&P==="single",listRef:A.context.labelsRef,activeIndex:$,selectedIndex:X,onMatch(le){const de=A.context.valuesRef.current[le];de!==void 0&&A.context.setSelectedValue(de,qe(Qn))}}),{reference:ue}=hh(q,{enabled:!R,event:"mousedown"}),{buttonRef:ve,getButtonProps:ee}=na({native:d,disabled:J}),he={...y,readOnly:C,open:L,disabled:J,popupSide:re,listEmpty:Y,placeholder:P==="none"?!1:!K},te=Ie(le=>{A.set("triggerElement",le)});return yt("button",t,{ref:[a,ve,te],state:he,props:[_,ue,W,{id:M,tabIndex:z?0:-1,role:z?"combobox":void 0,"aria-expanded":L,"aria-haspopup":z?"dialog":"listbox","aria-controls":Z,"aria-required":z&&E||void 0,"aria-readonly":z&&C||void 0,"aria-labelledby":U,onPointerDown:ce,onPointerEnter:ce,onFocus(){w(!0),!J&&G.start(0,A.context.forceMount)},onBlur(le){if(!Ze(D,le.relatedTarget)&&(j(!0),w(!1),S==="onBlur")){const de=P==="none"?Q:F;N.commit(de)}},onMouseDown(le){if(J||(z||q.set("domReferenceElement",le.currentTarget),A.context.forceMount(),ae.current!=="touch"&&(A.context.inputRef.current?.focus(),z||le.preventDefault()),L))return;const de=Gt(le.currentTarget);function Se(Te){const _e=A.state.triggerElement;if(!_e)return;const Ae=fs(Te),oe=A.state.positionerElement,me=A.state.listElement;Ze(_e,Ae)||Ze(oe,Ae)||Ze(me,Ae)||ZE(Te,_e)||A.context.setOpen(!1,qe(_1,Te))}z&&de.addEventListener("mouseup",Se,{once:!0})},onKeyDown(le){(le.key==="ArrowDown"||le.key==="ArrowUp")&&(Cs(le),A.context.setOpen(!0,qe(fy,le.nativeEvent)),A.context.inputRef.current?.focus())}},N.getValidationProps(J,b),ee],stateAttributesMapping:hA})}),i6=x.createContext(null);function c6(){return x.useContext(i6)}function u6(e){const{children:t}=e,{filteredItems:a}=yf(),o=c6(),c=o?o.items:a;return s.jsx(x.Fragment,{children:c.map(t)})}const d6=x.forwardRef(function(t,a){var o;const{render:c,className:d,style:f,children:p,...h}=t,b=Ta(),y=$h(),v=!!ij(!0),{filteredItems:j,hasItems:w}=yf(),S=b.useState("selectionMode"),N=b.useState("grid"),k=b.useState("readOnly"),A=b.useState("listProps"),P=b.useState("virtualized"),R=b.useState("forceMounted"),C=S==="multiple",E=j.length===0,D=Ie(L=>{b.set("positionerElement",L)}),I=Ie(L=>{b.set("listElement",L)}),O=x.useMemo(()=>typeof p=="function"?o||(o=s.jsx(u6,{children:p})):p,[p]),_={empty:E},z=y.useState("floatingId"),H=yt("div",t,{state:_,ref:[a,I,v?null:D],props:[A,{children:O,tabIndex:-1,id:z,role:N?"grid":"listbox","aria-multiselectable":C?"true":void 0,"aria-readonly":!N&&k?!0:void 0,onKeyDown(L){if(!(b.state.disabled||b.state.readOnly)&&L.key==="Enter"){const F=b.state.activeIndex;if(F==null)return;Cs(L),vA(b,F,L.nativeEvent)}},onKeyDownCapture(){b.context.keyboardActiveRef.current=!0},onPointerMoveCapture(){b.context.keyboardActiveRef.current=!1}},h]});if(P)return H;const B=w&&!R?void 0:b.context.labelsRef;return s.jsx(nj,{elementsRef:b.context.listRef,labelsRef:B,children:H})}),f6="",p6=200;function m6(e){const t=e.ownerDocument.createTreeWalker(e,NodeFilter.SHOW_TEXT);let a=null;for(;t.nextNode();){const o=t.currentNode;o.nodeValue!==""&&(a=o)}return a}function h6(){const e=er(),t=x.useRef(null);return x.useEffect(()=>{if(tf)return;const a=t.current;if(a==null)return;const o=m6(a);if(o==null)return;const c=o.data,d=`${c}${f6}`;return o.nodeValue=d,e.start(p6,()=>{o.nodeValue===d&&(o.nodeValue=c)}),()=>{e.clear(),o.nodeValue===d&&(o.nodeValue=c)}},[t,e]),t}const yA=x.createContext(void 0);function g6(){const e=x.useContext(yA);if(e===void 0)throw new Error(un(20));return e}const x6=x.forwardRef(function(t,a){const{keepMounted:o=!1,...c}=t,d=Ta(),f=d.useState("mounted"),p=d.useState("forceMounted");return f||o||p?s.jsx(yA.Provider,{value:o,children:s.jsx(ph,{ref:a,...c})}):null}),b6=x.forwardRef(function(t,a){const{render:o,className:c,anchor:d,positionMethod:f,side:p,align:h,sideOffset:b,alignOffset:y,collisionBoundary:v="clipping-ancestors",collisionPadding:j,arrowPadding:w,sticky:S,disableAnchorTracking:N=!1,collisionAvoidance:k=rT,style:A,...P}=t,R=Ta(),C=$h(),E=g6(),D=R.useState("modal"),I=R.useState("open"),O=R.useState("mounted"),_=R.useState("openMethod"),z=R.useState("positionerElement"),H=R.useState("triggerElement"),B=R.useState("inputElement"),L=R.useState("inputGroupElement"),F=R.useState("inputInsidePopup"),$=R.useState("transitionStatus"),X=qh(),q=Th({anchor:d??(F?H:L??B),floatingRootContext:C,positionMethod:f,mounted:O,side:p,sideOffset:b,align:h,alignOffset:y,arrowPadding:w,collisionBoundary:v,collisionPadding:j,sticky:S,disableAnchorTracking:N,keepMounted:E,collisionAvoidance:k,lazyFlip:!0});aj(I&&D,_==="touch",z,H);const Q={open:I,side:q.side,align:q.align,anchorHidden:q.anchorHidden,empty:X};Me(()=>{R.set("popupSide",q.side)},[R,q.side]);const G=Ie(Y=>{R.set("positionerElement",Y)}),J=Eh(t,Q,{styles:q.positionerStyles,transitionStatus:$,props:P,refs:[a,G],hidden:!O,inert:!I});return s.jsxs(gA.Provider,{value:q,children:[O&&D&&s.jsx(Mh,{inert:Ah(!I),cutout:L??B??H}),J]})}),v6={...Zc,...co},y6=x.forwardRef(function(t,a){const{render:o,className:c,style:d,initialFocus:f,finalFocus:p,...h}=t,b=Ta(),y=ij(),v=$h(),j=b.useState("mounted"),w=b.useState("open"),S=b.useState("openMethod"),N=b.useState("popupProps"),k=b.useState("transitionStatus"),A=b.useState("inputInsidePopup"),P=b.useState("inputElement"),R=b.useState("modal"),C=b.useState("id"),E=qh(),D=h.id??(A?fA(C):void 0);Me(()=>(b.set("popupId",b.context.popupRef.current?.id||D),()=>{b.set("popupId",void 0)}),[b,D]),oa({open:w,ref:b.context.popupRef,onComplete(){w&&b.context.onOpenChangeComplete(!0)}});const I={open:w,side:y.side,align:y.align,anchorHidden:y.anchorHidden,transitionStatus:k,empty:E},O=yt("div",t,{state:I,ref:[a,b.context.popupRef],props:[N,{id:D,role:A?"dialog":"presentation",onFocus(L){const F=fs(L.nativeEvent);S!=="touch"&&(Ze(b.state.listElement,F)||F===L.currentTarget)&&b.context.inputRef.current?.focus()}},xf(k),h],stateAttributesMapping:v6}),z=f===void 0?A?L=>L==="touch"?b.context.popupRef.current:P:!1:f;let H;p!=null?H=p:H=A?void 0:!1;const B=!A||R;return s.jsx(mh,{context:v,disabled:!j,modal:B,openInteractionType:S,initialFocus:z,returnFocus:H,getInsideElements:()=>[b.context.startDismissRef.current,b.context.endDismissRef.current],children:s.jsxs(x.Fragment,{children:[O,B&&s.jsx(xA,{ref:b.context.endDismissRef})]})})}),j6=x.forwardRef(function(t,a){const{render:o,className:c,style:d,...f}=t;return yt("span",t,{ref:a,props:[{"aria-hidden":!0,children:"▼"},f]})}),jA=x.createContext(void 0);function wA(){const e=x.useContext(jA);if(!e)throw new Error(un(19));return e}const w6=x.createContext(!1);function S6(){return x.useContext(w6)}function SA(e){const{componentProps:t,forwardedRef:a,virtualized:o,indexFromFilter:c}=e,{render:d,className:f,style:p,value:h=null,index:b,disabled:y=!1,nativeButton:v=!1,...j}=t,w=x.useRef(null),S=tj({guess:!0,index:b,textRef:w}),N=Ta(),k=S6(),A=qF(),P=N.useState("selectionMode"),R=N.useState("disabled"),C=N.useState("readOnly"),E=N.useState("isItemEqualToValue"),D=R||y,I=P!=="none",O=b??c??S.index,_=O!==-1,z=N.useState("id"),H=N.useState("isActive",O),B=N.useState("isSelected",h),L=N.useState("itemProps"),F=x.useRef(null),$=z!=null&&_?`${z}-${O}`:void 0,X=B&&I;Me(()=>{if(!(_&&(o||b!=null)))return;const U=N.context.listRef.current;return U[O]=F.current,()=>{delete U[O]}},[_,o,O,b,N]),Me(()=>{if(!_||A)return;const M=N.context.valuesRef.current;return M[O]=h,()=>{delete M[O]}},[_,A,O,h,N]),Me(()=>{if(!_||A)return;const M=N.state.selectedValue;let U=N.state.selectedIndex;N.state.selectionMode==="multiple"&&Array.isArray(M)?U=qE(O,h,N.context.valuesRef.current,M,E,U):ca(h,M,E)&&(U=O),N.set("selectedIndex",U)},[_,A,N,O,h,E]);const{getButtonProps:K,buttonRef:q}=na({disabled:D,focusableWhenDisabled:!0,native:v,composite:!0}),Q={disabled:D,selected:X,highlighted:H};function G(M){function U(){N.context.handleSelection(M,h)}N.state.submitOnItemClick?(Ts.flushSync(U),N.context.requestSubmit()):U()}const J={id:$,role:k?"gridcell":"option","aria-selected":I?X:void 0,tabIndex:void 0,onPointerDownCapture(M){M.isPrimary&&(N.context.pointerDownItemRef.current=M.currentTarget),M.preventDefault()},onMouseDown(M){M.preventDefault()},onClick(M){D||C||G(M.nativeEvent)},onMouseUp(M){const U=N.context.pointerDownItemRef.current===M.currentTarget;N.context.pointerDownItemRef.current=null,!(D||C||M.button!==0||U||!H)&&G(M.nativeEvent)}},Y=yt("div",t,{ref:[q,a,S.ref,F],state:Q,props:[L,J,j,K]}),re=x.useMemo(()=>({selected:X,textRef:w}),[X,w]);return s.jsx(jA.Provider,{value:re,children:Y})}function N6(e){const{componentProps:t,forwardedRef:a}=e,c=Ta().useState("isItemEqualToValue"),{flatFilteredValues:d}=yf(),f=t.value??null,p=cu(d,f,c);return s.jsx(SA,{componentProps:t,forwardedRef:a,virtualized:!0,indexFromFilter:p})}const k6=x.memo(x.forwardRef(function(t,a){const c=Ta().useState("virtualized");return c&&t.index==null?s.jsx(N6,{componentProps:t,forwardedRef:a}):s.jsx(SA,{componentProps:t,forwardedRef:a,virtualized:c,indexFromFilter:void 0})})),C6=x.forwardRef(function(t,a){const{selected:o}=wA();return t.keepMounted||o?s.jsx(T6,{...t,ref:a}):null}),T6=x.memo(x.forwardRef((e,t)=>{const{render:a,className:o,style:c,keepMounted:d,...f}=e,{selected:p}=wA(),h=x.useRef(null),{transitionStatus:b,setMounted:y}=Oi(p),j=yt("span",e,{ref:[t,h],state:{selected:p,transitionStatus:b},props:[{"aria-hidden":!0,children:"✔️"},f],stateAttributesMapping:co});return oa({batch:!0,enabled:!p,open:p,ref:h,onComplete(){p||y(!1)}}),j})),E6=x.forwardRef(function(t,a){const{render:o,className:c,style:d,children:f,...p}=t,{filteredItems:h}=yf(),b=Ta(),y=h6(),v=h.length===0?f:null;return yt("div",t,{ref:[a,b.context.emptyRef,y],props:[{children:v,role:"status","aria-live":"polite","aria-atomic":!0},p]})}),A6="、";function Gh({value:e,onValueChange:t,options:a,placeholder:o="",emptyHint:c=bo("没有匹配的选项"),searchPlaceholder:d=bo("搜索…"),disabled:f=!1,className:p,id:h,title:b,...y}){const v=x.useMemo(()=>a.filter(w=>e.includes(w.value)),[a,e]),j=v.length?v.map(w=>w.label).join(A6):o;return s.jsxs(JF,{items:a,multiple:!0,value:v,onValueChange:w=>t(w.map(S=>S.value)),isItemEqualToValue:(w,S)=>w?.value===S?.value,disabled:f,children:[s.jsxs(o6,{"data-slot":"multi-select-trigger",id:h,title:b,"aria-label":y["aria-label"],className:Ue("inline-flex h-[30px] min-w-0 cursor-pointer items-center justify-between gap-1.5 rounded-md border border-control-border bg-control px-2.5","text-[12.5px] font-normal text-foreground","transition-colors duration-150 ease-out","hover:border-control-border-hover hover:bg-control-hover","focus-visible:border-primary focus-visible:shadow-focus focus-visible:outline-none","data-disabled:cursor-not-allowed data-disabled:bg-control data-disabled:text-muted-foreground data-disabled:opacity-60",p),children:[s.jsx("span",{"data-slot":"multi-select-value",className:"min-w-0 flex-1 truncate text-left data-[placeholder]:text-muted-foreground","data-placeholder":v.length?void 0:"",title:j,children:j}),s.jsx(j6,{className:"flex flex-none text-muted-foreground transition-transform duration-[180ms] data-popup-open:rotate-180",children:s.jsx("svg",{viewBox:"0 0 10 6",className:"size-2.5","aria-hidden":"true",children:s.jsx("path",{d:"M1 1l4 4 4-4",stroke:"currentColor",strokeWidth:"1.4",fill:"none",strokeLinecap:"round",strokeLinejoin:"round"})})})]}),s.jsx(x6,{children:s.jsx(b6,{sideOffset:4,className:"z-[35]",children:s.jsxs(y6,{"data-slot":"multi-select-content",className:Ue("flex max-h-[280px] w-[max(var(--anchor-width),220px)] flex-col overflow-hidden","rounded-lg border border-border-strong bg-raised shadow-3 outline-none","data-open:animate-in data-open:fade-in-0","data-closed:animate-out data-closed:fade-out-0"),children:[s.jsxs("div",{className:"flex flex-none items-center gap-1.5 border-b border-hairline px-2.5 py-1.5",children:[s.jsxs("svg",{viewBox:"0 0 12 12",className:"size-3 flex-none text-muted-foreground","aria-hidden":"true",children:[s.jsx("circle",{cx:"5",cy:"5",r:"3.4",stroke:"currentColor",strokeWidth:"1.3",fill:"none"}),s.jsx("path",{d:"M7.6 7.6 10.5 10.5",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round"})]}),s.jsx(l6,{placeholder:d,className:"min-w-0 flex-1 border-0 bg-transparent p-0 text-[12.5px] text-foreground outline-none placeholder:text-muted-foreground"})]}),s.jsx(E6,{children:s.jsx("div",{className:"px-2.5 py-3 text-[11.5px] leading-[1.5] text-muted-foreground",children:c})}),s.jsx(d6,{className:"min-h-0 flex-1 overflow-y-auto overscroll-contain p-[5px]",children:w=>s.jsxs(k6,{value:w,className:Ue("grid cursor-pointer grid-cols-[14px_minmax(0,1fr)] items-center gap-2 rounded-sm px-[9px] py-[5px]","text-[12.5px] leading-[1.4] text-foreground select-none outline-none","transition-colors duration-[120ms] ease-out","data-[highlighted]:bg-nav-hover","data-[selected]:bg-primary-soft data-[selected]:font-semibold data-[selected]:text-primary-fg","data-[highlighted]:data-[selected]:bg-primary-tint","data-disabled:pointer-events-none data-disabled:text-muted-foreground"),children:[s.jsx(C6,{className:"col-start-1 flex text-primary",children:s.jsx("svg",{viewBox:"0 0 12 12",className:"size-3","aria-hidden":"true",children:s.jsx("path",{d:"M2.5 6.2 4.8 8.5 9.5 3.8",stroke:"currentColor",strokeWidth:"1.8",fill:"none",strokeLinecap:"round",strokeLinejoin:"round"})})}),s.jsx("span",{className:"col-start-2 min-w-0 truncate",children:w.label})]},w.value)})]})})})]})}const NA=x.createContext(void 0);function jf(e){const t=x.useContext(NA);if(t===void 0&&!e)throw new Error(un(47));return t}const R6={...Hy,disabled:e=>e.disabled,instantType:e=>e.instantType,openMethod:e=>e.openMethod,openChangeReason:e=>e.openChangeReason,modal:e=>e.modal,focusManagerModal:e=>e.focusManagerModal,stickIfOpen:e=>e.stickIfOpen,titleElementId:e=>e.titleElementId,descriptionElementId:e=>e.descriptionElementId,openOnHover:e=>e.openOnHover,closeDelay:e=>e.closeDelay,adaptiveOrigin:e=>e.adaptiveOrigin};class O6 extends ou{constructor(a,o,c){const d=new vh;super(M6(a,d,o,c),D6(d),R6);cn(this,"setOpen",(a,o)=>{const c=o.reason===qs,d=o.reason===go&&o.event.detail===0,f=!a&&(o.reason===nu||o.reason==null),p=zT(o),h=this.select("activeTriggerId");if(!a&&o.reason===dy&&o.trigger==null&&h!=null&&(o.trigger=this.context.triggerElements.getById(h)??this.select("activeTriggerElement")??void 0),this.context.onOpenChange?.(a,o),o.isCanceled)return;this.state.floatingRootContext.dispatchOpenChange(a,o);const b=()=>{const v=Iy(this.state,a,o.trigger,p());v.openChangeReason=o.reason,this.update(v)};c?(this.set("stickIfOpen",!0),this.context.stickIfOpenTimeout.start(hH,()=>{this.set("stickIfOpen",!1)}),Ts.flushSync(b)):b();let y;d?y="click":f?y="dismiss":o.reason===xo&&(y="focus"),this.set("instantType",y)})}}function M6(e,t,a,o=!1){const c={...zy(t,a,o),disabled:!1,modal:!1,focusManagerModal:!1,instantType:void 0,openMethod:null,openChangeReason:null,titleElementId:void 0,descriptionElementId:void 0,stickIfOpen:!0,openOnHover:!1,closeDelay:0,adaptiveOrigin:void 0,...e};return c.open&&e?.mounted===void 0&&(c.mounted=!0),c}function D6(e){return{popupRef:x.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerFocusTargetRef:x.createRef(),beforeContentFocusGuardRef:x.createRef(),stickIfOpenTimeout:new la,triggerElements:e}}const kA=uh(function({props:t}){const{children:a,open:o,defaultOpen:c=!1,onOpenChange:d,onOpenChangeComplete:f,modal:p=!1,handle:h,triggerId:b,defaultTriggerId:y=null}=t,v=P6(h,{modal:p,open:c,openProp:o,activeTriggerId:y,triggerIdProp:b});v.useControlledProp("openProp",o),v.useControlledProp("triggerIdProp",b);const j=v.useState("open"),w=v.useState("mounted"),S=v.useState("payload");v.useContextCallback("onOpenChange",d),v.useContextCallback("onOpenChangeComplete",f),HT(v,j),Py(v);const{forceUnmount:N}=_y(j,v,()=>{v.update({stickIfOpen:!0,openChangeReason:null})});v.useSyncedValues({modal:p}),x.useEffect(()=>{j||v.context.stickIfOpenTimeout.clear()},[v,j]),x.useImperativeHandle(t.actionsRef,()=>({unmount:N,close:()=>v.setOpen(!1,qe(py))}),[N,v]);const k=j||w;return s.jsxs(NA.Provider,{value:v,children:[h&&s.jsx(Dy,{handle:h,store:v}),k&&s.jsx(_6,{store:v,modal:p}),typeof a=="function"?a({payload:S}):a]})});function I6(e){return jf(!0)?s.jsx(kA,{props:e}):s.jsx(wH,{children:s.jsx(kA,{props:e})})}function P6(e,t){const a=My((o,c)=>new O6(t,o,c));return x.useEffect(()=>a.context.stickIfOpenTimeout.disposeEffect(),[a]),a}function _6({store:e,modal:t}){const a=e.useState("floatingRootContext"),o=pf(a,{outsidePressEvent:{mouse:t==="trap-focus"?"sloppy":"intentional",touch:"sloppy"}}),c=o.reference,d=o.floating;return Ly(e,{activeTriggerProps:c,inactiveTriggerProps:c,popupProps:d}),null}const L6=300;function z6(e,t){const a=x.useRef(null);function o(d){Ts.flushSync(()=>{e.setOpen(!1,qe(xo,d.nativeEvent,d.currentTarget))}),g4(a.current)?.focus()}function c(d){const f=e.select("positionerElement");if(f&&Jc(d,f))e.context.beforeContentFocusGuardRef.current?.focus();else{Ts.flushSync(()=>{e.setOpen(!1,qe(xo,d.nativeEvent,d.currentTarget))});let p=h4(e.context.triggerFocusTargetRef.current||t.current);for(;p!==null&&Ze(f,p);){const h=p;if(p=iy(p),p===h)break}p?.focus()}}return{preFocusGuardRef:a,handlePreFocusGuardFocus:o,handleFocusTargetFocus:c}}const B6=G1(function(t,a){const{render:o,className:c,style:d,disabled:f=!1,nativeButton:p=!0,handle:h,payload:b,openOnHover:y=!1,delay:v=L6,closeDelay:j=0,id:w,...S}=t,N=jf(!0),A=FT(h)??N;if(!A)throw new Error(un(74));const P=ka(w),R=A.useState("isTriggerActive",P),C=A.useState("floatingRootContext"),E=A.useState("isOpenedByTrigger",P),D=A.useState("triggerPopupId",P),I=x.useRef(null),{registerTrigger:O,isMountedByThisTrigger:_}=BT(P,I,A,{payload:b,disabled:f,openOnHover:y,closeDelay:j}),z=A.useState("openChangeReason"),H=A.useState("stickIfOpen"),B=A.useState("openMethod"),L=A.useState("focusManagerModal"),F=KT(C,{enabled:!f&&y&&(B!=="touch"||z!==go),mouseOnly:!0,move:!1,handleClose:WT(),restMs:v,delay:{close:j},triggerElementRef:I,isActiveTrigger:R,isClosing:()=>A.select("transitionStatus")==="ending"}),$=hh(C,{stickIfOpen:H}),X=TE(()=>A.select("open"),ae=>{A.set("openMethod",ae)}),K=A.useState("triggerProps",_),{getButtonProps:q,buttonRef:Q}=na({disabled:f,native:p}),G={open(ae){return ae&&z===go?Yv.open(ae):Kv.open(ae)}},{preFocusGuardRef:J,handlePreFocusGuardFocus:Y,handleFocusTargetFocus:re}=z6(A,I),U=yt("button",t,{state:{disabled:f,open:E},ref:[Q,a,O,I],props:[$.reference,F,K,X,{[sT]:"",id:P,"aria-haspopup":"dialog","aria-expanded":E,"aria-controls":D},S,q],stateAttributesMapping:G}),Z=s.jsx(x.Fragment,{children:U},P);return _&&!L?s.jsxs(x.Fragment,{children:[s.jsx(ru,{ref:J,onFocus:Y}),Z,s.jsx(ru,{ref:A.context.triggerFocusTargetRef,onFocus:re})]}):Z}),CA=x.createContext(void 0);function H6(){const e=x.useContext(CA);if(e===void 0)throw new Error(un(45));return e}const U6=x.forwardRef(function(t,a){const{keepMounted:o=!1,...c}=t;return jf().useState("mounted")||o?s.jsx(CA.Provider,{value:o,children:s.jsx(ph,{ref:a,...c})}):null}),TA=x.createContext(void 0);function V6(){const e=x.useContext(TA);if(!e)throw new Error(un(46));return e}const F6=x.forwardRef(function(t,a){const{render:o,className:c,style:d,anchor:f,positionMethod:p,side:h,align:b,sideOffset:y,alignOffset:v,collisionBoundary:j="clipping-ancestors",collisionPadding:w,arrowPadding:S,sticky:N,disableAnchorTracking:k=!1,collisionAvoidance:A=aT,...P}=t,R=jf(),C=H6(),E=yH(),D=R.useState("floatingRootContext"),I=R.useState("mounted"),O=R.useState("open"),_=R.useState("openChangeReason"),z=R.useState("activeTriggerElement"),H=R.useState("modal"),B=R.useState("openMethod"),L=R.useState("positionerElement"),F=R.useState("instantType"),$=R.useState("transitionStatus"),X=R.useState("adaptiveOrigin"),K=x.useRef(null),q=D1(L),Q=Th({anchor:f,floatingRootContext:D,positionMethod:p,mounted:I,side:h,sideOffset:y,align:b,alignOffset:v,arrowPadding:S,collisionBoundary:j,collisionPadding:w,sticky:N,disableAnchorTracking:k,keepMounted:C,nodeId:E,collisionAvoidance:A,adaptiveOrigin:X}),G=D.useState("domReferenceElement");Me(()=>{const U=G,Z=K.current;if(U&&(K.current=U),Z&&U&&U!==Z){R.set("instantType",void 0);const ae=new AbortController;return q(()=>{R.set("instantType","trigger-change")},ae.signal),()=>{ae.abort()}}},[G,q,R]);const J=H===!0&&_!==qs;aj(O&&J,B==="touch",L,z);const Y=R.useStateSetter("positionerElement"),re={open:O,side:Q.side,align:Q.align,anchorHidden:Q.anchorHidden,instant:F},M=Eh(t,re,{styles:Q.positionerStyles,transitionStatus:$,props:P,refs:[a,Y],hidden:!I,inert:!O});return s.jsxs(TA.Provider,{value:Q,children:[I&&J&&s.jsx(Mh,{inert:Ah(!O),cutout:z}),s.jsx(jH,{id:E,children:M})]})}),$6=x.createContext(void 0);function q6(){const[e,t]=x.useState(0),a=Ie(()=>(t(c=>c+1),()=>{t(c=>Math.max(0,c-1))}));return{context:x.useMemo(()=>({register:a}),[a]),hasClosePart:e>0}}const G6=x.forwardRef(function(t,a){const{render:o,className:c,style:d,initialFocus:f,finalFocus:p,...h}=t,b=jf(),y=V6(),v=eA()!=null,{context:j,hasClosePart:w}=q6(),S=b.useState("open"),N=b.useState("openMethod"),k=b.useState("instantType"),A=b.useState("transitionStatus"),P=b.useState("popupProps"),R=b.useState("titleElementId"),C=b.useState("descriptionElementId"),E=b.useState("modal"),D=b.useState("mounted"),I=b.useState("openChangeReason"),O=b.useState("activeTriggerElement"),_=b.useState("floatingRootContext"),z=_.useState("floatingId"),H=b.useState("disabled"),B=b.useState("openOnHover"),L=b.useState("closeDelay");oa({open:S,ref:b.context.popupRef,onComplete(){S&&b.context.onOpenChangeComplete?.(!0)}}),GT(_,{enabled:B&&!H,closeDelay:L});const F=f===void 0?_T(b.context.popupRef):f,$=E!==!1&&w;b.useSyncedValue("focusManagerModal",$);const X=b.useStateSetter("popupElement"),K={open:S,side:y.side,align:y.align,instant:k,transitionStatus:A},q=yt("div",t,{state:K,ref:[a,b.context.popupRef,X],props:[P,{id:z,role:"dialog",...mf,"aria-labelledby":R,"aria-describedby":C,onKeyDown(Q){v&&Rh.has(Q.key)&&Q.stopPropagation()}},xf(A),h],stateAttributesMapping:Xv});return s.jsx(mh,{context:_,openInteractionType:N,modal:$,disabled:!D||I===qs,initialFocus:F,returnFocus:p,restoreFocus:"popup",previousFocusableElement:pn(O)?O:void 0,nextFocusableElement:b.context.triggerFocusTargetRef,beforeContentFocusGuardRef:b.context.beforeContentFocusGuardRef,children:s.jsx($6.Provider,{value:j,children:q})})});function wf(e){return s.jsx(I6,{"data-slot":"popover",...e})}function Kh(e){return s.jsx(B6,{"data-slot":"popover-trigger",...e})}function Sf({className:e,sideOffset:t=6,align:a="start",side:o,alignOffset:c,collisionPadding:d=8,anchor:f,children:p,...h}){return s.jsx(U6,{children:s.jsx(F6,{className:"z-[35] outline-none",sideOffset:t,align:a,side:o,alignOffset:c,collisionPadding:d,anchor:f,children:s.jsx(G6,{"data-slot":"popover-content",className:Ue("flex max-h-[min(70vh,560px)] flex-col overflow-hidden rounded-lg border border-border-strong bg-raised text-foreground shadow-3","outline-none","data-open:animate-in data-open:fade-in-0 data-open:slide-in-from-top-1","data-closed:animate-out data-closed:fade-out-0",e),...h,children:p})})})}function K6({page:e,pageCount:t,onPageChange:a,disabled:o=!1,className:c,infoFirst:d=!1}){const f=Math.max(1,Number(t)||1),p=Math.min(Math.max(1,Number(e)||1),f),h=s.jsx("span",{"data-slot":"pager-info",className:"text-[11.5px] text-subtle [font-variant-numeric:tabular-nums]",children:bo("第 {current} / {total} 页",{current:p,total:f})});return s.jsxs("div",{"data-slot":"pager",className:Ue("flex items-center gap-2",c),children:[d&&h,s.jsx(ne,{type:"button",variant:"outline",size:"sm",disabled:o||p<=1,onClick:()=>a(p-1),children:bo("上一页")}),s.jsx(ne,{type:"button",variant:"outline",size:"sm",disabled:o||p>=f,onClick:()=>a(p+1),children:bo("下一页")}),!d&&h]})}const Y6=Xc(["relative flex w-full items-center gap-2.5 text-left","border border-transparent rounded-sm","shadow-none","transition-[background-color,border-color,color] duration-150 ease-out","outline-none focus-visible:shadow-focus","disabled:pointer-events-none disabled:opacity-45","[&_svg]:pointer-events-none [&_svg]:shrink-0"],{variants:{variant:{default:["cursor-pointer px-2.5 py-2","text-[12.5px] font-medium text-sidebar-fg","hover:bg-nav-hover hover:text-foreground","data-[active]:border-nav-selected-border data-[active]:bg-nav-selected-bg data-[active]:font-semibold data-[active]:text-nav-selected-fg"],add:["cursor-pointer justify-center px-2 py-1.5","border-dashed border-border-strong bg-transparent","text-[11.5px] text-muted-foreground","hover:border-primary hover:text-primary-fg"]}},defaultVariants:{variant:"default"}});function uu({className:e,variant:t,active:a=!1,count:o,icon:c,trailing:d,children:f,...p}){return s.jsxs("button",{type:"button","data-slot":"nav-item","data-active":a?"":void 0,"aria-current":a?"true":void 0,className:Ue(Y6({variant:t}),e),...p,children:[c,s.jsx("span",{"data-slot":"nav-item-label",className:"min-w-0 flex-1 truncate",children:f}),d,o!=null&&s.jsx("span",{"data-slot":"nav-item-count",className:Ue("flex-none text-[10.5px] text-sidebar-muted [font-variant-numeric:tabular-nums]",a&&"text-inherit"),children:o})]})}function r(e,t){const a=typeof window<"u"?window.wbI18n:void 0;return a&&typeof a.t=="function"?a.t(e,t):e}function Yh(e){if(e.source==="subscription"&&(e.port===null||e.port===void 0))return r("未分配端口");const t=e.resolved;return t?.protocol&&t.host&&t.port?`${String(t.protocol).toUpperCase()} ${t.host}:${t.port}`:t?.label||""}function du(e){const t=e.name||e.id,o=[e.resolveError?r("解析失败"):Yh(e),e.enabled===!1?r("已禁用"):""].filter(Boolean);return o.length?r("{name}({parts})",{name:t,parts:o.join(" · ")}):t}const Qa="pool:";function Pe(){return window}function Le(e,t){Pe().wbApp?.toast?.(e,t)}function Za(e){const t=Pe().wbApp?.esc;return t?t(e):String(e??"").replace(/[&<>"']/g,a=>({"&":"&","<":"<",">":">",'"':""","'":"'"})[a]||a)}function Ls(e){const t=Pe().wbApp?.formatTime;if(t)return t(e);const a=Number(e);return!Number.isFinite(a)||a<=0?"":new Date(a).toLocaleString("zh-CN")}function mt(e){return e instanceof Error?e.message:String(e)}function ss(e){if(e==null||e==="")return"—";const t=Number(e);return Number.isFinite(t)?String(Number(t.toFixed(2))):String(e)}function fu(e){if(e==null||e==="")return null;const t=Number(e);return Number.isFinite(t)?t:null}function cj(e){const t=new Date(e);if(Number.isNaN(t.getTime()))return"";const a=o=>String(o).padStart(2,"0");return`${a(t.getMonth()+1)}-${a(t.getDate())} ${a(t.getHours())}:${a(t.getMinutes())}`}function X6(e){return e==="积分"?r("积分"):e==="额度"?r("额度"):e}function Q6(e){if(!e||typeof e!="object"||Array.isArray(e))return[];const t=e,a=Array.isArray(t.credits)?t.credits:[],o=Date.now();return a.map(c=>{const d=String(c?.name||"").trim()||r("积分包"),f=String(c?.unit||"").trim(),p=fu(c?.total),h=fu(c?.used),b=fu(c?.remain),y=c?.unlimited===!0,v=fu(c?.grantAt),j=fu(c?.startAt),w=fu(c?.expireAt),S=c?.daily===!0,N=String(c?.grantReason||"").trim(),k=w!==null&&w>0&&w<=o,A=p!==null&&p>0,P=y?r("不限"):b!==null?A?r("剩 {remaining} / {total}",{remaining:ss(b),total:ss(p)}):r("剩 {remaining}",{remaining:ss(b)}):h!==null?r("已用 {used}",{used:ss(h)}):"—",R=!y&&f&&P!=="—"?`${P} ${X6(f)}`:P,C=A&&b!==null?Math.max(0,Math.min(100,b/p*100)):null,E=b!==null&&b<=0||b===null&&h!==null&&A&&h>=p,D=!y&&!S&&(E||k),I=[];v!==null&&v>0?I.push(r("{time} 领取",{time:cj(v)})):j!==null&&j>0&&I.push(r("{time} 生效",{time:cj(j)})),S?I.push(r("每日重置")):w!==null&&w>0&&I.push(k?r("已过期"):r("{time} 到期",{time:cj(w)})),N&&I.push(N);const O=k||b===0?"muted":C!==null&&C<20?"warn":b===null&&h===null&&!y?"muted":"ok",_=[d,R,v!==null&&v>0?r("领取 {time}",{time:Ls(v)}):j!==null&&j>0?r("生效 {time}",{time:Ls(j)}):"",w!==null&&w>0?k?r("已过期({time})",{time:Ls(w)}):r("到期 {time}",{time:Ls(w)}):"",S?r("每日重置(额度按周期回满,不是作废)"):"",N,C===null&&b!==null?r("上游未给总量,画不出剩余比例"):"",h!==null&&p!==null?r("已用 {used} / 共 {total}",{used:ss(h),total:ss(p)}):""].filter(Boolean).join(" · ");return{name:d,view:R,tone:O,percent:C,window:I.length?I.join(" · "):null,title:_,spent:D}})}function EA({row:e}){return s.jsxs("div",{className:"usage-pop-row",title:e.title,children:[s.jsxs("div",{className:"usage-pop-line",children:[s.jsx("span",{className:"usage-pop-name",children:e.name}),s.jsx("span",{className:`usage-pop-view ${e.tone}`,children:e.view})]}),e.window?s.jsx("div",{className:"usage-pop-window",children:e.window}):null,e.percent!==null?s.jsx("span",{className:"usage-pop-track",children:s.jsx("i",{style:{width:`${e.percent}%`},"aria-label":r("剩余 {percent}%",{percent:Math.round(e.percent)})})}):null]})}function AA({rows:e,subscriptionLine:t,variant:a,kind:o,title:c,children:d}){const[f,p]=x.useState(!1),[h,b]=x.useState(!1),y=e.filter(k=>!k.spent),v=e.filter(k=>k.spent),j=a==="pool"?`usage-toggle usage-pool-line ${o}`:`usage-toggle ${o}`,w=x.useRef(null),S=x.useCallback(k=>{w.current=k,k&&(k.scrollTop=0)},[]),N=x.useCallback(()=>w.current??null,[]);return x.useLayoutEffect(()=>{if(!h)return;const k=w.current?.querySelector(".usage-pop-spent .usage-pop-row");k instanceof HTMLElement&&k.scrollIntoView({block:"nearest"})},[h]),s.jsxs(wf,{open:f,onOpenChange:p,children:[s.jsxs(Kh,{render:s.jsx("button",{type:"button",className:j,title:c,"aria-label":r("积分明细")}),children:[a==="pool"?d:s.jsx("span",{className:"val",children:d}),s.jsx("span",{className:"caret","aria-hidden":!0,children:"▾"})]}),s.jsx(Sf,{align:"end",sideOffset:6,className:"w-[320px]",initialFocus:N,children:s.jsxs("div",{className:"usage-pop-credit",ref:S,tabIndex:-1,children:[t?s.jsx("div",{className:"usage-pop-sub",children:t}):null,s.jsx("div",{className:"usage-pop-group",children:r("积分明细")}),y.map((k,A)=>s.jsx(EA,{row:k},`${k.name}-${A}`)),v.length>0?s.jsxs("div",{className:"usage-pop-spent",children:[s.jsxs("button",{type:"button",className:"usage-pop-spent-head","aria-expanded":h,title:r("展开或收起(默认收起)"),onClick:()=>b(k=>!k),children:[s.jsx("span",{className:"caret","aria-hidden":!0,children:"▾"}),s.jsx("span",{children:r("已用完 / 已过期")}),s.jsx("span",{className:"n",children:r("{count} 份",{count:v.length})})]}),h?v.map((k,A)=>s.jsx(EA,{row:k},`spent-${k.name}-${A}`)):null]}):null]})})]})}const pu="workbuddy",Z6="raccoon",W6={workbuddy:{usage:!0,creditDetail:!0,edition:!0,identifier:"uid",expiry:"expiresAt"},"workbuddy-intl":{usage:!0,creditDetail:!0,edition:!1,identifier:"uid",expiry:"expiresAt"},raccoon:{usage:!0,creditDetail:!0,edition:!1,identifier:"userId",expiry:"tokenExpiresAt"},catpaw:{usage:!0,edition:!1,identifier:"uid",expiry:"tokenExpiresAt"},autoclaw:{usage:!0,creditDetail:!0,edition:!1,identifier:"userId",expiry:"tokenExpiresAt"},"autoclaw-intl":{usage:!0,creditDetail:!0,edition:!1,identifier:"userId",expiry:"tokenExpiresAt",emailAsName:!0},qoder:{usage:!0,creditDetail:!0,edition:!0,identifier:"userId",expiry:"expiresAt",emailAsName:!0},"qoder-intl":{usage:!0,creditDetail:!0,edition:!0,identifier:"userId",expiry:"expiresAt",emailAsName:!0},"cline-free":{usage:!0,edition:!1,identifier:"account",expiry:"expiresAt"},"cline-pass":{usage:!0,edition:!1,identifier:"account",expiry:"expiresAt"},accio:{usage:!0,edition:!0,identifier:"userId",expiry:"expiresAt",emailAsName:!0},"accio-cn":{usage:!0,edition:!0,identifier:"userId",expiry:"expiresAt",emailAsName:!0},zcode:{usage:!0,creditDetail:!0,claim:!0,planChannel:!0,edition:!0,identifier:"userId",expiry:"expiresAt"},"zcode-intl":{usage:!0,creditDetail:!0,claim:!0,planChannel:!0,edition:!0,identifier:"userId",expiry:"expiresAt"},codearts:{usage:!0,usageDetail:!0,edition:!1,identifier:"userId",expiry:"expiresAt",concurrencyDefault:3},trae:{usage:!0,creditDetail:!0,edition:!1,identifier:"uid",expiry:"expiresAt"},loomy:{usage:!0,creditDetail:!0,edition:!1,identifier:"userId",expiry:"expiresAt"},kuku:{usage:!0,edition:!1,identifier:"uid",expiry:""},officeace:{usage:!0,creditDetail:!0,edition:!1,identifier:"id",expiry:"expiresAt"},antigravity:{usage:!0,edition:!1,identifier:"userId",expiry:""},chatglm:{usage:!0,creditDetail:!0,edition:!1,identifier:"uid",expiry:""}},J6={usage:!1,edition:!1,identifier:"userId",expiry:"tokenExpiresAt",emailAsName:!1};function An(e){const t=e?.provider;return typeof t=="string"&&t?t:pu}function cr(e){return e&&W6[e]||J6}const e$="opencode",t$="https://opencode.ai/zen/go/v1";function RA(e,t){if(!e||e.clientEmulation!==e$)return!1;const o=((typeof t=="string"?t.trim():"")||String(e.baseUrl||"")).trim().replace(/\/+$/,"").toLowerCase();return o?o!==t$:!1}function n$(e){const t=e?An(e):"";return t.startsWith("custom-")&&(Pe().wbProviders?.customList?.()||[]).find(o=>o?.id===t)||null}function s$(e){return e?RA(n$(e),e.baseUrl):!1}function OA(e){const t=Array.isArray(e?.providers)?e.providers:[],a=Array.isArray(e?.accounts)?e.accounts:[],o=new Map;a.forEach(d=>{const f=An(d);o.set(f,(o.get(f)||0)+1)});const c=new Map;return t.forEach(d=>{d?.id&&c.set(String(d.id),{id:String(d.id),label:String(d.label||d.id),count:Number(d.count)||0})}),o.forEach((d,f)=>{c.has(f)||c.set(f,{id:f,label:Pe().wbProviders?.labelOf?.(f)||f,count:d})}),c.size||c.set(pu,{id:pu,label:Pe().wbProviders?.labelOf?.(pu)||"WorkBuddy 国内版",count:0}),[...c.values()]}function Xh(e){const t=cr(An(e)).identifier;return String(e?.[t]||"")}function MA(e){const t=Number(e)||0;return t<=0?0:t<1e11?t*1e3:t}function r$(e){const t=cr(An(e)).expiry;return MA(e?.[t])}function Ea(e){const t=An(e);return t.startsWith("custom-")?!!e?.balanceQuery?.scheme:cr(t).usage}const uj=30,DA=86400,IA=60,PA=1800,_A=86400,LA=1,a$=95e5;function l$(e){return e==="codearts"?[{type:"token",action:"skip",threshold:a$,reset:"daily",enabled:!0}]:e==="cline-free"?[]:[{type:"balance",action:"skip",threshold:LA,enabled:!0}]}function zA(e){const t=e?.usageQuery;if(!t||typeof t!="object")return{enabled:!0,interval:IA};const a=t.enabled===void 0?!0:t.enabled===!0,o=Number(t.interval)||0,c=o>=uj&&o<=DA;return{enabled:a,interval:a&&!c?IA:o}}function o$(e){if(!e||typeof e!="object")return!1;const t=e;if(t.type!=="balance"&&t.type!=="token"||t.action!=="skip"&&t.action!=="disable")return!1;const a=Number(t.threshold);if(!Number.isFinite(a)||a<=0)return!1;if(t.type==="token"&&t.reset!=="daily"){const o=Number(t.period);if(!Number.isInteger(o)||o_A)return!1}return!0}function i$(e){const t=e?.lowBalance;if(!t||typeof t!="object"||!t.mode)return l$(An(e));const a=Number(t.threshold),o=Number.isFinite(a)&&a>0?a:LA;return t.mode!=="skip"&&t.mode!=="disable"?[]:[{type:"balance",action:t.mode,threshold:o,enabled:!0}]}function mu(e){const t=e?.limiters;return Array.isArray(t)?t.filter(o$):i$(e)}function c$(e){return mu(e).filter(t=>t.type==="token")}function u$(e,t){const a=t*1e3;return e-e%a}function BA(e){return e.reset==="daily"?0:e.period??0}function dj(e,t=Date.now()){if(e===0){const a=new Date(t);return a.setHours(0,0,0,0),a.getTime()}return u$(t,e)}function Nf(e,t,a=Date.now()){if(e.type!=="token")return null;const o=BA(e),c=(t||[]).find(d=>Number(d.kind)===o);return c&&Number(c.windowStart)===dj(o,a)?c:null}function Qh(e,t){const a=mu(e).filter(f=>f.type==="balance"&&f.action==="skip"&&f.enabled!==!1&&f.threshold>0);if(!a.length||!t||typeof t!="object")return!1;const o=t;if(o.unlimited)return!1;const c=o.totalLeft??o.available;if(c==null||c==="")return!1;const d=Number(c);return Number.isFinite(d)&&a.some(f=>dc.type==="token"&&c.action==="skip"&&c.enabled!==!1);if(!a.length||!t?.length)return!1;const o=Date.now();return a.some(c=>{const d=Nf(c,t,o);return d!==null&&Number(d.used)>=c.threshold})}function d$(e,t){return mu(e).some(a=>{if(a.type!=="token"||a.action!=="disable"||a.enabled===!1)return!1;const o=Nf(a,t);return o!==null&&Number(o.used)>=a.threshold})}function pj(e,t=Date.now()){const a=BA(e),o=dj(a,t),c=a===0?Math.max(0,dj(0,o+864e5+36e5)-t):Math.max(0,o+a*1e3-t);return{kind:a,startMs:o,remainingMs:c,daily:a===0}}function Zh(e,t){if(e<=0)return"";const a=Math.ceil(e/6e4);if(t){const o=Math.ceil(e/36e5);return o>=1?r("今日剩 {n} 小时",{n:o}):r("今日剩 {n} 分钟",{n:a})}return a>=1?r("剩 {n} 分钟",{n:a}):r("剩不到 1 分钟")}function El(e){const t=Number(e);if(!Number.isFinite(t))return"—";const a=window.wbUnits;return a?.formatTokens?a.formatTokens(t):String(Math.round(t))}function HA(e){return e>0&&e%3600===0?r("{n} 小时",{n:e/3600}):e>0&&e%60===0?r("{n} 分钟",{n:e/60}):r("{n} 秒",{n:e})}function kf(e){return e?.desktop===!0}function UA(e){return e?.chatSupported!==!1}function f$(e){return typeof e=="string"&&e.startsWith("custom-")}function p$(e){return r(e==="enterprise"?"企业":e==="ultimate"?"旗舰":"个人")}function Wh(e,t){const a=Number(e?.priority??100)-Number(t?.priority??100);return a!==0?a:(Number(e?.addedAt)||0)-(Number(t?.addedAt)||0)}function ur(e){return e?.enabled!==!1}function Cf(e,t=""){const a=e?.rateLimits||{},o=Date.now();return t?Number(a[t]?.resetAt)>o:Object.values(a).some(c=>Number(c?.resetAt)>o)}function VA(e){return e?.edition==="intl"?"intl":"cn"}function FA(e){return cr(An(e)).claim?e?.canClaim!==!1:!1}const $A="coding-plan",So="start-plan";function Jh(e){return!!cr(An(e)).planChannel}function mj(e){return Jh(e)?String(e?.zcodePlan||"").trim()===So?So:$A:""}function m$(e){return r(e===So?"套餐池(Start Plan)":"编码套餐(Coding Plan)")}function qA(e){switch(String(e??"").trim()){case"pending":return r("待生效");case"active":return r("生效中");case"expired":return r("已过期");case"unknown":return r("状态未知");default:return String(e??"")}}function eg(e){const t=e?.claimPlans;if(!t||typeof t!="object"||Array.isArray(t))return[];const a=gj();return Object.entries(t).filter(([,o])=>Number(o)>0&&gj(Number(o))===a).map(([o])=>o)}function h$(e){return eg(e).length>0}function g$(e){const t=eg(e),a=t.length?r("({plans})",{plans:t.join(r("、"))}):"";return r("今天(北京时间 {day})已领取 {n} 份{names};还有其他可领套餐时,点这里可以继续领;活动按自然日发新套餐,明天可再领",{day:gj(),n:t.length,names:a})}function x$(e){return!!cr(An(e)).usageDetail}function GA(e){return!!cr(An(e)).creditDetail}function hj(e){return/^free$/i.test(String(e??"").trim())}function KA(e){const t=String(e??"").trim();return/^trial$/i.test(t)?r("试用版"):hj(t)?r("免费版"):t}function gj(e=Date.now()){return new Date(e+8*3600*1e3).toISOString().slice(0,10)}function Tf(e,t,a){return Cf(e)||Qh(e,t)||fj(e,a)}function YA(e,t){const a=String(t.q||"").trim().toLowerCase();return a?[hu(e),e?.name,e?.nickname,e?.email,Xh(e),e?.id].some(c=>String(c||"").toLowerCase().includes(a)):!0}function XA(e,t){return t.provider==="all"||An(e)===t.provider}function xj(e,t){return t.enabled==="all"?!0:t.enabled==="enabled"?ur(e):!ur(e)}function QA(e,t,a,o){if(t.limit==="all")return!0;if(!ur(e))return!1;const c=Tf(e,a?.(e),o?.(e));return t.limit==="limited"?c:!c}function ZA(e,t,a,o){return XA(e,t)&&xj(e,t)&&QA(e,t,a,o)&&YA(e,t)}function b$(e,t,a,o){return(e||[]).filter(c=>ZA(c,t,a,o))}function WA(e,t,a,o){const c=e||[],d=h=>c.filter(b=>XA(b,t)&&(h==="enabled"||xj(b,t))&&YA(b,t)),f=d("enabled"),p=d("limit");return{enabledAll:f.length,enabled:f.filter(ur).length,disabled:f.filter(h=>!ur(h)).length,limitAll:p.length,normal:p.filter(h=>ur(h)&&!Tf(h,a?.(h),o?.(h))).length,limited:p.filter(h=>ur(h)&&Tf(h,a?.(h),o?.(h))).length}}function bj(e){const t=e?.rateLimits;if(!t||typeof t!="object")return[];const a=Date.now();return Object.entries(t).map(([o,c])=>({model:o,...c&&typeof c=="object"?c:{}})).filter(o=>Number(o.resetAt)>a).sort((o,c)=>Number(o.resetAt)-Number(c.resetAt))}function vj(e){const t=(e||[]).slice().sort(Wh),a=new Map;return t.forEach((o,c)=>a.set(o.id,{position:c+1,total:t.length})),a}function v$(e,t,a,o){const c=(e||[]).slice().sort(Wh),d=[],f=new Map;for(const p of c){const h=An(p);f.has(h)||(f.set(h,[]),d.push(h)),f.get(h).push(p)}return d.map((p,h)=>{const b=f.get(p)||[];return{provider:p,label:Pe().wbProviders?.labelOf?.(p)||p,rank:h+1,members:b,accounts:t?b.filter(t):b,enabled:b.filter(ur).length,disabled:b.filter(y=>!ur(y)).length,limited:b.filter(y=>ur(y)&&Tf(y,a?.(y),o?.(y))).length}})}function hu(e){if(!e)return"";const t=String(e.name||"").trim();if(e.nameCustom===!0&&t)return t;const a=String(e.email||"").trim();return cr(An(e)).emailAsName&&a?a:e?.nickname||t||Xh(e)||e?.id||""}const yj="已限流",JA=e=>new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime();function jj(e){const t=Number(e);if(!Number.isFinite(t)||t<=0||t<=Date.now())return yj;const a=new Date(t),o=a.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit",hour12:!1}),c=Math.round((JA(a)-JA(new Date))/864e5);return c===0?r("今天 {clock}",{clock:o}):c===1?r("明天 {clock}",{clock:o}):r("{month}月{day}日 {clock}",{month:a.getMonth()+1,day:a.getDate(),clock:o})}function y$(e){const t=An(e);if(!cr(t).edition)return"";const a=VA(e),o=e?.editionLabel,c=o||(a==="intl"?"国际版":"国内版");return(Pe().wbProviders?.labelOf?.(t)||"").includes(c)?"":o||r(a==="intl"?"国际版":"国内版")}function j$(e){return[UA(e)?null:{text:r("仅账号管理"),kind:"plain",title:r("该提供商的推理转发尚未接入,账号不参与转发")},f$(An(e))&&e.hasCredentials===!1?{text:r("未配置凭证"),kind:"bad",title:r("这条自定义账号既没有 API Key,也没有勾选「无需鉴权」:转发时会被跳过,该提供商下的模型也不会出现在模型列表里。去账号「设置」里补上 Key,或勾选「该上游无需鉴权」")}:null,e.proxy?.error?{text:r("代理异常"),kind:"bad",title:r("{error}(转发时会回退直连)",{error:e.proxy.error})}:null,mj(e)===So?{text:r("套餐池"),kind:"plain",title:r("转发走套餐池(Start Plan)通道(zcode.z.ai 的 Anthropic 端点,用账号里的体验额度 / 活动领取额度);在账号设置里可切回编码套餐")}:null].filter(t=>t!==null)}const eR="workbuddy-desktop-accounts-filters",tR="workbuddy-desktop-accounts-collapsed",nR="workbuddy-desktop-accounts-names-hidden";function w$(){const e={provider:"all",enabled:"all",limit:"all",q:""},t=Pe().wbFilterMemory?.load(eR,e)||e;return{provider:String(t.provider||"all"),enabled:String(t.enabled||"all"),limit:String(t.limit||"all"),q:""}}function S$(){try{const e=JSON.parse(localStorage.getItem(tR)||"[]");return new Set(Array.isArray(e)?e.map(t=>String(t)).filter(Boolean):[])}catch{return new Set}}function N$(){try{return localStorage.getItem(nR)==="1"}catch{return!1}}let hn={version:0,filter:w$(),collapsed:S$(),selected:new Set,panels:new Map,connections:new Map,clash:null,dialog:null,namesHidden:N$(),usageBusy:!1,usageInflight:new Set};const wj=new Set;function sR(e){return wj.add(e),()=>{wj.delete(e)}}function Gs(){return hn}function Rn(e){hn={...hn,...e,version:hn.version+1},wj.forEach(t=>t())}function jr(){Rn({})}function Sj(){return Pe().wbApp?.getState?.()?.accounts}function Al(){const e=Sj()?.accounts;return Array.isArray(e)?e:[]}function Aa(e){return Al().find(t=>t.id===e)||null}function k$(e,t){const a=v$(Al(),c=>ZA(c,hn.filter,e,t),e,t);return{groups:a.filter(c=>c.accounts.length>0),allGroups:a}}function rR(){return OA(Sj())}function C$(e,t){return WA(Al(),hn.filter,e,t)}function T$(){return vj(Al())}function tg(){Pe().wbFilterMemory?.save(eR,{provider:hn.filter.provider,enabled:hn.filter.enabled,limit:hn.filter.limit})}function E$(e){hn.filter.q!==e&&Rn({filter:{...hn.filter,q:e}})}function A$(e){const t=e||"all";hn.filter.provider!==t&&(Rn({filter:{...hn.filter,provider:t}}),tg())}function aR(e,t){const a={...hn.filter,[e]:t};a.enabled==="disabled"&&a.limit!=="all"&&(a.limit="all"),Rn({filter:a}),tg()}function ng(){return hn.filter.provider!=="all"||hn.filter.enabled!=="all"||hn.filter.limit!=="all"||hn.filter.q.trim()!==""}function lR(){Rn({filter:{provider:"all",enabled:"all",limit:"all",q:""}}),tg()}function R$(){const e=hn.filter.provider;e!=="all"&&(rR().some(t=>t.id===e)||(Rn({filter:{...hn.filter,provider:"all"}}),tg()))}function oR(e){try{localStorage.setItem(tR,JSON.stringify([...e]))}catch{}}function iR(e){const t=new Set(hn.collapsed);t.has(e)?t.delete(e):t.add(e),oR(t),Rn({collapsed:t})}function O$(e,t){const a=new Set(hn.collapsed);for(const o of e)t?a.add(o):a.delete(o);oR(a),Rn({collapsed:a})}function M$(e){return hn.selected.has(e)}function D$(e,t){const a=new Set(hn.selected);t?a.add(e):a.delete(e),Rn({selected:a})}function cR(e,t){const a=new Set(hn.selected);for(const o of e)t?a.add(o):a.delete(o);Rn({selected:a})}function I$(){Rn({selected:new Set})}function uR(e,t){return hn.panels.get(e)?.has(t)===!0}function dR(e,t,a){if(!e)return;const o=new Map(hn.panels),c=new Set(o.get(e)||[]);a?c.add(t):c.delete(t),c.size?o.set(e,c):o.delete(e),Rn({panels:o})}function P$(e,t){const a=new Map(hn.panels);for(const o of e){const c=new Set(a.get(o)||[]);c.add(t),a.set(o,c)}Rn({panels:a})}function _$(){const e=!hn.namesHidden;try{localStorage.setItem(nR,e?"1":"0")}catch{}Rn({namesHidden:e})}function L$(e){return"*".repeat(Math.min(Math.max(e.length,4),12))}const fR="usage_not_configured",No=new Map,Ef=new Map;function ua(e,t,a){No.set(e,t),t!=null&&gu(t)?Ef.set(e,a):Ef.delete(e)}function Wa(e){const t=No.get(e.id);if(t===void 0)return;if(!gu(t))return t;const a=Math.max(Number(e.addedAt)||0,Number(e.updatedAt)||0);return(Ef.get(e.id)||0)>=a?t:void 0}const Af=new Map;let pR=0;function Rl(e){return e?Af.get(e.id)||[]:[]}function z$(e){const t=Number(e?.tokenAt)||0;if(!t||t===pR)return!1;const a=e?.tokenUsage;if(!a||typeof a!="object")return!1;pR=t;const o=new Map;for(const[d,f]of Object.entries(a)){if(!Array.isArray(f))continue;const p=[];for(const h of f){if(!h||typeof h!="object")continue;const b=Number(h.kind),y=Number(h.windowStart),v=Number(h.used);!Number.isFinite(b)||b<0||!Number.isFinite(y)||y<=0||!Number.isFinite(v)||v<0||p.push({kind:b,windowStart:y,used:v})}o.set(d,p)}const c=o.size!==Af.size||[...o].some(([d,f])=>{const p=Af.get(d);return!p||p.length!==f.length||f.some((h,b)=>h.used!==p[b]?.used||h.windowStart!==p[b]?.windowStart)});Af.clear();for(const[d,f]of o)Af.set(d,f);return c}let sg=null;async function mR(e={}){const t=Gs().clash;if(!e.force&&t)return t;sg||(sg=(async()=>{try{const o=await Pe().workbuddyDesktop?.getProxies?.();if(!o||typeof o!="object"||!o.clash)throw new Error(r("代理列表响应异常({type})",{type:typeof o}));return o.clash}finally{sg=null}})());const a=await sg;return Rn({clash:a}),a}function B$(){Rn({clash:null})}let Rf=null,rg=null;function H$(){return Rf}async function hR(e={}){if(!e.force&&Rf)return Rf;rg||(rg=(async()=>{try{const a=await Pe().workbuddyDesktop?.getProxyPool?.();if(!a||typeof a!="object"||!Array.isArray(a.items))throw new Error(r("代理池响应异常({type})",{type:typeof a}));return a.items}finally{rg=null}})());const t=await rg;return Rf=t,t}let Nj=null;function U$(){return Nj}let ag=0,gR=!1;function V$(){if(!(Rf||Date.now(){ag=0,Nj=null,jr()}).catch(e=>{Nj=mt(e),jr()})}}function lg(e){if(!Aa(e)){Le(r("账号不存在,请刷新后重试"),"err");return}Rn({dialog:{kind:"settings",id:e}})}function og(){Rn({dialog:null})}function kj(e,t="enable"){const a=(Array.isArray(e)?e:[]).filter(o=>Aa(o));if(!a.length){Le(r("请先勾选要操作的账号"),"err");return}Rn({dialog:{kind:"batch",ids:a,action:t}})}function F$(e){let t=!1;for(const f of[...No.keys()])e.has(f)||(No.delete(f),t=!0);for(const f of[...Ef.keys()])e.has(f)||Ef.delete(f);const a=new Map(Gs().panels);for(const f of[...a.keys()])e.has(f)||(a.delete(f),t=!0);const o=new Map(Gs().connections);for(const f of[...o.keys()])e.has(f)||(o.delete(f),t=!0);const c=new Set(Gs().usageInflight);for(const f of[...c])e.has(f)||(c.delete(f),t=!0);const d=new Set(Gs().selected);for(const f of[...d])e.has(f)||(d.delete(f),t=!0);t&&Rn({panels:a,connections:o,usageInflight:c,selected:d})}const $$=2e3;function xR(e){return Gs().connections.get(e)||0}async function bR(){try{const e=await Pe().workbuddyDesktop?.getAccountConnections?.(),t=e?.counts&&typeof e.counts=="object"?e.counts:{},a=new Map;for(const[o,c]of Object.entries(t)){const d=Number(c)||0;d>0&&a.set(o,d)}return q$(a,Gs().connections)||Rn({connections:a}),!0}catch{return!1}}function q$(e,t){if(e.size!==t.size)return!1;for(const[a,o]of e)if(t.get(a)!==o)return!1;return!0}let vR=null;function G$(){vR||(vR=setInterval(()=>{document.hidden||Pe().wbApp?.currentPage!=="accounts"||bR()},$$))}function Cj(){return Al().filter(e=>Ea(e)&&e.available!==!1)}function gu(e){if(e==null)return null;if(typeof e=="string")return{message:e,notConfigured:!1};if(typeof e!="object")return null;const t=e.error;return t?{message:String(t),notConfigured:e.code===fR}:null}function yR(e){return e.usage?e.usage:{error:e.error?String(e.error):r("余额响应为空"),code:e.code}}function jR(e){const t=Array.isArray(e?.results)?e.results:[],a=Number(e?.at)||Date.now();let o=0;for(const c of t)c?.id&&(ua(String(c.id),yR(c),Number(c.at)||a),o++);return o&&(jr(),Pe().wbApp?.renderTopbarStatus?.()),o}let wR=!1;function K$(e){if(!GA(e))return!1;const t=Wa(e);return!t||typeof t!="object"||Array.isArray(t)||gu(t)?!1:!Array.isArray(t.credits)}async function Y$(){if(!wR){wR=!0;for(const e of Al().filter(K$)){const t=No.get(e.id);try{await Of(e.id)}catch{}const a=No.get(e.id);t!==void 0&&(!a||gu(a))&&ua(e.id,t,Date.now()),jr()}}}let SR=0;async function X$(){try{const e=await Pe().workbuddyDesktop?.getBalancesSnapshot?.(),t=z$(e);t&&(jr(),Pe().wbApp?.renderTopbarStatus?.());const a=Number(e?.at)||0;return!a||a===SR||(SR=a,!jR(e))?t:(Y$(),!0)}catch{return!1}}async function Of(e){const t=await Pe().workbuddyDesktop?.getAllBalances?.(e||void 0),a=Array.isArray(t?.results)?t.results:[],o=Date.now(),c=new Set;for(const d of a){if(!d?.id)continue;const f=String(d.id);e&&f!==e||(c.add(f),ua(f,yR(d),o))}if(e)return c.has(e)||ua(e,r("未返回余额数据"),o),jr(),t;for(const d of Cj())c.has(d.id)||ua(d.id,r("未返回余额数据"),o);return jr(),t}async function NR(){if(Gs().usageBusy)return;const e=Cj();if(!e.length){Le(r("暂无可查询余额的账号"),"err");return}Rn({usageBusy:!0}),e.forEach(t=>ua(t.id,null,Date.now())),jr();try{const t=(await Of(null))?.results||[],a=t.filter(f=>f.usage).length,o=t.filter(f=>f.code===fR).length,c=o?r("({n} 个未配置查询凭证)",{n:o}):"",d=t.length-a-o;Le(a+o===t.length?r("✅ 已更新 {n} 个账号的余额{suffix}",{n:a,suffix:c}):r("已更新 {ok}/{total} 个账号,{failed} 个失败",{ok:a,total:t.length,failed:d}),d?"err":"ok")}catch(t){const a=mt(t);e.forEach(o=>ua(o.id,r("查询失败:{message}",{message:a}),Date.now())),jr(),Le(r("余额查询失败:{message}",{message:a}),"err")}finally{Rn({usageBusy:!1})}}async function kR(e){if(Gs().usageInflight.has(e))return;const t=new Set(Gs().usageInflight);t.add(e),ua(e,null,Date.now()),Rn({usageInflight:t});try{await Of(e)}finally{const a=new Set(Gs().usageInflight);a.delete(e),Rn({usageInflight:a})}}async function Q$(e){if(!Gs().usageInflight.has(e))try{await kR(e);const t=gu(No.get(e));t?.notConfigured?Le(t.message,"ok"):t?Le(r("余额查询失败:{message}",{message:t.message}),"err"):Le(r("✅ 已更新余额"))}catch(t){ua(e,r("查询失败:{message}",{message:mt(t)}),Date.now()),jr(),Le(r("余额查询失败:{message}",{message:mt(t)}),"err")}}async function ig(e){if(e){const a=Aa(e);if(!a||!Ea(a))return;try{await kR(e)}catch(o){ua(e,r("查询失败:{message}",{message:mt(o)}),Date.now()),jr()}return}if(Gs().usageBusy)return;const t=Cj();if(t.length){Rn({usageBusy:!0}),t.forEach(a=>ua(a.id,null,Date.now())),jr();try{await Of(null)}catch(a){const o=mt(a);t.forEach(c=>ua(c.id,r("查询失败:{message}",{message:o}),Date.now())),jr()}finally{Rn({usageBusy:!1})}}}async function CR(e,t){try{await Pe().workbuddyDesktop?.updateAccount?.(e,{enabled:t}),await Pe().wbApp?.refresh?.(),Le(r(t?"✅ 已启用":"✅ 已禁用"))}catch(a){Le(r("操作失败:{message}",{message:mt(a)}),"err"),Pe().wbApp?.refresh?.()}}async function TR(e,t){if(!e.length)return!1;try{return await Pe().workbuddyDesktop?.reorderAccounts?.(e),Le(t?r("✅ 已保存:{note}",{note:t}):r("✅ 顺序已保存")),await Pe().wbApp?.refresh?.(),!0}catch(a){return Le(r("顺序未保存:{message}",{message:mt(a)}),"err"),Pe().wbApp?.refresh?.(),!1}}async function ER(e,t){if(e.length)try{await Pe().workbuddyDesktop?.batchAccounts?.({action:t?"enable":"disable",ids:e}),Le(t?r("✅ 已启用 {n} 个账号",{n:e.length}):r("✅ 已禁用 {n} 个账号",{n:e.length})),await Pe().wbApp?.refresh?.()}catch(a){Le(r("操作失败:{message}",{message:mt(a)}),"err"),Pe().wbApp?.refresh?.()}}async function Z$(e,t){try{await Pe().workbuddyDesktop?.clearRateLimits?.(e,t||null),Le(t?r("✅ 已清除 {model} 的限流标记",{model:t}):r("✅ 已清除该账号全部限流标记")),await Pe().wbApp?.refresh?.()}catch(a){Le(r("清除失败:{message}",{message:mt(a)}),"err")}}async function W$(e,t,a){if(t===AR){lg(e);return}if(t!==cg&&t!==a)try{const o=t===""?null:{source:"pool",proxyId:t.slice(Qa.length)},d=(await Pe().workbuddyDesktop?.updateAccount?.(e,{proxy:o}))?.changes,f=Array.isArray(d)&&d.length?d[0]:r("代理已更新");Le(`✅ ${f}`)}catch(o){Le(r("保存失败:{message}",{message:mt(o)}),"err")}finally{await Pe().wbApp?.refresh?.()}}const cg="__proxy_custom__",AR="__proxy_custom_edit__";function RR(e,t){const a=Aa(e);if(!a){Le(r("账号不存在,请刷新后重试"),"err");return}const o=Pe().wbZcodePlans;if(!o?.open){Le(r("套餐明细弹窗未加载,请重启应用后重试"),"err");return}o.open({id:e,name:t||a.name})}function J$(e,t,a=1){return{seat:t.get(e.id)||{position:1,total:1},rank:a,picked:M$(e.id),usageEntry:No.get(e.id),limitsOpen:uR(e.id,"limits"),connections:xR(e.id)}}const e8={DEFAULT_PROVIDER_ID:pu,RACCOON_PROVIDER_ID:Z6,providerOf:An,providerFeatures:cr,providerSummaries:OA,identifierOf:Xh,tokenExpiryOf:r$,supportsUsage:Ea,isDesktopAccount:kf,supportsChat:UA,byPriorityOrder:Wh,typeLabel:p$,isEnabled:ur,isRateLimited:Cf,isLimited:e=>Tf(e,e?Wa(e):void 0,Rl(e)),accountEdition:VA,supportsClaim:FA,matchEnabled:xj,matchLimit:QA,visibleAccounts:b$,filterCounts:WA,positionMap:vj,activeLimits:bj,editionSuffix:y$,formatResetText:jj};function t8(){window.wbAccountsView={render:()=>jr(),refreshCaches:F$,openPanels:P$,syncConnections:bR,applyBalances:jR,syncBalancesSnapshot:X$,queryUsageFor:Of,queryAllUsage:NR,refreshUsageAfterCheckin:ig,supportsUsage:Ea,isDesktopAccount:kf,isEnabled:ur,isRateLimited:Cf},window.wbAccountsModel=e8,window.wbAccountPanel={open:lg,close:og,openBatch:kj,closeBatch:og,syncAddProvider:()=>Pe().wbAccountAddForms?.syncAddProvider?.(),invalidate:B$}}function n8(e){return e.type==="balance"?r("余额 < {threshold}",{threshold:e.threshold}):e.reset==="daily"?r("每日消耗 ≥ {count} Token(每天 0 点重置)",{count:El(e.threshold)}):r("每 {period}消耗 ≥ {count} Token",{period:HA(e.period??0),count:El(e.threshold)})}function s8(e){return e.action==="disable"?r("禁用该账号(需手动重新启用)"):r("跳过该账号(自动恢复)")}function r8(e){return`${Math.round(e.threshold).toLocaleString("en-US")} Token`}function a8(e,t){if(t.enabled===!1)return{text:r("已停用"),kind:"off"};if(t.type==="balance"){const b=Wa(e),y=Qh(e,b),v=b&&typeof b=="object"?b:null,j=v?v.totalLeft??v.available:void 0,w=j==null||j===""||v?.unlimited?"":r(" · 当前 {n}",{n:ss(j)});return y?{text:r("已跳过{current}",{current:w}),kind:"warn",title:r("余额低于阈值,转发时会跳过该账号(余额回升自动恢复)")}:{text:r("未触发{current}",{current:w}),kind:"ok"}}const a=Rl(e),o=Nf(t,a),c=o?o.used:0,d=El(t.threshold),f=t.reset==="daily"?r(" · 今日 {used} / {quota}",{used:El(c),quota:d}):r(" · 本周期 {used} / {quota}",{used:El(c),quota:d}),p=o?` · ${Zh(pj(t).remainingMs,t.reset==="daily")}`:"";return o!==null&&c>=t.threshold?t.action==="disable"?e.enabled===!1?{text:r("已触发 · 账号已禁用"),kind:"danger",title:r("重置也不恢复,需手动启用")}:{text:r("已达上限{usage}",{usage:f}),kind:"warn",title:r("稍后由后台判定自动禁用")}:{text:r("已跳过{usage}{countdown}",{usage:f,countdown:p}),kind:"warn",title:r("窗口内已用 {used} / {limit} Token,转发时会跳过该账号(重置后自动恢复)",{used:Math.round(c).toLocaleString("en-US"),limit:Math.round(t.threshold).toLocaleString("en-US")})}:{text:r("未触发{usage}{countdown}",{usage:f,countdown:p}),kind:"ok",title:r8(t)}}function l8(e){return e>0&&e%3600===0?{value:String(e/3600),unit:"hours"}:e>0&&e%60===0?{value:String(e/60),unit:"minutes"}:{value:"1",unit:"hours"}}function OR(e){const t={type:"balance",action:"skip",thresholdInput:"",tokenUnit:"wan",reset:"fixed",periodInput:"1",periodUnit:"hours"};if(!e)return t;if(e.type==="balance")return{...t,type:"balance",action:e.action,thresholdInput:String(e.threshold)};if(e.reset==="daily")return{...t,type:"token",action:e.action,reset:"daily",thresholdInput:String(e.threshold%1e4===0?e.threshold/1e4:e.threshold),tokenUnit:e.threshold%1e4===0?"wan":"unit"};const a=l8(e.period??0);return{...t,type:"token",action:e.action,reset:"fixed",thresholdInput:String(e.threshold%1e4===0?e.threshold/1e4:e.threshold),tokenUnit:e.threshold%1e4===0?"wan":"unit",periodInput:a.value,periodUnit:a.unit}}function MR(e){const t=Number(e.thresholdInput);if(!Number.isFinite(t)||t<=0)return{error:r("限制阈值必须是大于 0 的数字")};if(e.type==="balance")return{rule:{type:"balance",action:e.action,threshold:t,enabled:!0}};const a=Math.round(e.tokenUnit==="wan"?t*1e4:t);if(e.reset==="daily")return{rule:{type:"token",action:e.action,threshold:a,reset:"daily",enabled:!0}};const o=Number(e.periodInput)*(e.periodUnit==="hours"?3600:60);if(!Number.isFinite(o)||o<=0)return{error:r("请填写重置周期")};const c=Math.round(o);return c_A?{error:r("重置周期必须是 30 分钟 ~ 24 小时")}:{rule:{type:"token",action:e.action,threshold:a,period:c,reset:"fixed",enabled:!0}}}function o8({account:e,target:t,onClose:a,onSave:o}){const[c,d]=x.useState(""),[f,p]=x.useState(t?.draft??null);if(x.useEffect(()=>{p(t?.draft??null),d("")},[t]),!t||!f)return null;const h=v=>{d(""),p({...f,...v})},b=()=>{const v=MR(f);if("error"in v){d(v.error);return}o(v.rule,t.index)},y=()=>{if(f.type==="balance"){const P=Wa(e);if(P&&typeof P=="object"){const R=P;if(R.unlimited)return r("当前可用 ∞(不参与余额不足判定)");const C=R.totalLeft??R.available;if(C!=null&&C!=="")return r("当前余额 {n};与余额列同一数字口径,严格小于才触发(等于阈值仍可用)",{n:ss(C)})}return r("读数来自自动余额查询;与余额列同一数字口径,严格小于才触发(等于阈值仍可用)")}const v=MR(f);if(!("rule"in v))return"";const j=v.rule,w=Nf(j,Rl(e));if(!w)return j.reset==="daily"?r("窗口 = 今天 0 点起(本地时区),0 点重置即清零恢复;按账号在 requests 表聚合"):r("窗口对齐自然时间(整点 / 整 N 分钟一轮回),重置即清零恢复;按账号在 requests 表聚合");const S=pj(j),N=El(w.used),k=El(j.threshold),A=j.reset==="daily"?r("今日已用"):r("本周期已用");return r("{scope} {used} / {quota} Token,{countdown}重置",{scope:A,used:N,quota:k,countdown:Zh(S.remainingMs,S.daily)})};return s.jsx(Yt,{open:!0,onOpenChange:v=>{v||a()},children:s.jsxs(Xt,{className:"w-[min(580px,calc(100vw-48px))]",showCloseButton:!0,children:[s.jsx(Vt,{children:s.jsx(Ut,{children:t.index>=0?r("编辑限制"):r("添加限制")})}),s.jsxs(Lt,{children:[s.jsxs("div",{className:"field-row",children:[s.jsx("label",{children:r("限制类型")}),s.jsxs(ut,{value:f.type,onValueChange:v=>h({type:v,thresholdInput:""}),children:[s.jsx(ft,{className:"w-[150px]","aria-label":r("限制类型"),children:s.jsx(dt,{children:f.type==="balance"?r("余额"):r("Token 消耗")})}),s.jsxs(pt,{children:[s.jsx($e,{value:"balance",children:r("余额")}),s.jsx($e,{value:"token",children:r("Token 消耗")})]})]}),s.jsx("span",{className:"detail",children:r("余额沿用现有口径;Token 按重置方式内的累计消耗判定(切换类型会清空阈值)")})]}),f.type==="balance"?s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"field-row",children:[s.jsx("label",{children:r("触发条件")}),s.jsx("span",{className:"detail",style:{fontSize:13},children:r("余额低于")}),s.jsx(Fe,{type:"number",min:0,step:1,className:"max-w-[120px]",placeholder:r("阈值"),value:f.thresholdInput,onChange:v=>h({thresholdInput:v.currentTarget.value})}),s.jsx("span",{className:"detail",style:{fontSize:13},children:r("时")})]}),s.jsxs("div",{className:"field-row",children:[s.jsx("label",{children:r("触发后")}),s.jsxs(ut,{value:f.action,onValueChange:v=>h({action:v}),children:[s.jsx(ft,{className:"min-w-[280px]","aria-label":r("触发动作"),children:s.jsx(dt,{children:f.action==="disable"?r("禁用该账号(需手动重新启用)"):r("跳过该账号(余额回升自动恢复)")})}),s.jsxs(pt,{children:[s.jsx($e,{value:"skip",children:r("跳过该账号(余额回升自动恢复)")}),s.jsx($e,{value:"disable",children:r("禁用该账号(需手动重新启用)")})]})]})]})]}):s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"field-row",children:[s.jsx("label",{children:r("重置方式")}),s.jsxs(ut,{value:f.reset,onValueChange:v=>h({reset:v}),children:[s.jsx(ft,{className:"w-[190px]","aria-label":r("重置方式"),children:s.jsx(dt,{children:f.reset==="daily"?r("自然日(每天 0 点)"):r("固定周期")})}),s.jsxs(pt,{children:[s.jsx($e,{value:"fixed",children:r("固定周期")}),s.jsx($e,{value:"daily",children:r("自然日(每天 0 点)")})]})]}),s.jsx("span",{className:"detail",children:r("有的账号过了 0 点额度就回来 —— 选「自然日」")})]}),s.jsxs("div",{className:"field-row",children:[s.jsx("label",{children:r("触发条件")}),f.reset==="daily"?s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"detail",style:{fontSize:13},children:r("每日消耗 ≥")}),s.jsx(Fe,{type:"number",min:0,step:1,className:"max-w-[110px]",placeholder:r("阈值"),value:f.thresholdInput,onChange:v=>h({thresholdInput:v.currentTarget.value})}),s.jsxs(ut,{value:f.tokenUnit,onValueChange:v=>h({tokenUnit:v}),children:[s.jsx(ft,{className:"w-[92px]","aria-label":r("Token 单位"),children:s.jsx(dt,{children:f.tokenUnit==="wan"?r("万"):r("个")})}),s.jsxs(pt,{children:[s.jsx($e,{value:"wan",children:r("万")}),s.jsx($e,{value:"unit",children:r("个")})]})]}),s.jsx("span",{className:"detail",style:{fontSize:13},children:r("Token 时")})]}):s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"detail",style:{fontSize:13},children:r("每")}),s.jsx(Fe,{type:"number",min:1,step:1,className:"max-w-[90px]",placeholder:r("周期"),value:f.periodInput,onChange:v=>h({periodInput:v.currentTarget.value})}),s.jsxs(ut,{value:f.periodUnit,onValueChange:v=>h({periodUnit:v}),children:[s.jsx(ft,{className:"w-[92px]","aria-label":r("周期单位"),children:s.jsx(dt,{children:f.periodUnit==="hours"?r("小时"):r("分钟")})}),s.jsxs(pt,{children:[s.jsx($e,{value:"minutes",children:r("分钟")}),s.jsx($e,{value:"hours",children:r("小时")})]})]}),s.jsx("span",{className:"detail",style:{fontSize:13},children:r("内消耗 ≥")}),s.jsx(Fe,{type:"number",min:0,step:1,className:"max-w-[110px]",placeholder:r("阈值"),value:f.thresholdInput,onChange:v=>h({thresholdInput:v.currentTarget.value})}),s.jsxs(ut,{value:f.tokenUnit,onValueChange:v=>h({tokenUnit:v}),children:[s.jsx(ft,{className:"w-[92px]","aria-label":r("Token 单位"),children:s.jsx(dt,{children:f.tokenUnit==="wan"?r("万"):r("个")})}),s.jsxs(pt,{children:[s.jsx($e,{value:"wan",children:r("万")}),s.jsx($e,{value:"unit",children:r("个")})]})]}),s.jsx("span",{className:"detail",style:{fontSize:13},children:r("Token 时")})]})]}),s.jsxs("div",{className:"field-row",children:[s.jsx("label",{children:r("触发后")}),s.jsxs(ut,{value:f.action,onValueChange:v=>h({action:v}),children:[s.jsx(ft,{className:"min-w-[280px]","aria-label":r("触发动作"),children:s.jsx(dt,{children:f.action==="disable"?r("禁用该账号(需手动重新启用)"):r("跳过该账号(重置后自动恢复)")})}),s.jsxs(pt,{children:[s.jsx($e,{value:"skip",children:r("跳过该账号(重置后自动恢复)")}),s.jsx($e,{value:"disable",children:r("禁用该账号(需手动重新启用)")})]})]})]})]}),s.jsx("p",{className:"detail limiter-hint",children:y()}),c?s.jsx("p",{className:"detail text-destructive",children:c}):null]}),s.jsxs(tn,{children:[s.jsx(ne,{variant:"outline",onClick:a,children:r("取消")}),s.jsx(ne,{variant:"default",onClick:b,children:t.index>=0?r("保存规则"):r("添加规则")})]})]})})}function i8({account:e,draft:t,onChange:a}){const[o,c]=x.useState(null),d=()=>c({index:-1,draft:OR(null)}),f=y=>c({index:y,draft:OR(t[y])}),p=(y,v)=>{const j=[...t];v>=0?j[v]=y:j.push(y),a(j),c(null)},h=y=>{a(t.filter((v,j)=>j!==y)),o&&c(null)},b=(y,v)=>{const j=[...t];j[y]={...j[y],enabled:v},a(j)};return s.jsxs(s.Fragment,{children:[t.length?s.jsx("div",{className:"limiter-rules mt-2.5",children:t.map((y,v)=>{const j=a8(e,y);return s.jsxs("div",{className:"limiter-rule","data-off":y.enabled===!1||void 0,children:[s.jsx(ns,{checked:y.enabled!==!1,"aria-label":r("启用该规则"),onCheckedChange:w=>b(v,w===!0)}),s.jsx("div",{className:"limiter-rule-main",children:s.jsxs("span",{className:"limiter-rule-cond",children:[s.jsx(ze,{variant:"secondary",shape:"tag",children:y.type==="balance"?r("余额"):"Token"})," ",r("{cond} 时 → {action}",{cond:n8(y),action:s8(y)})]})}),s.jsx(ze,{variant:j.kind==="ok"?"success":j.kind==="warn"?"warning":j.kind==="danger"?"destructive":"secondary",shape:"tag",title:j.title,children:j.text}),s.jsxs("div",{className:"limiter-rule-ops",children:[s.jsx(ne,{variant:"ghost",onClick:()=>f(v),children:r("编辑")}),s.jsx(ne,{variant:"ghost",onClick:()=>h(v),children:r("删除")})]})]},v)})}):s.jsx("p",{className:"detail mt-2.5",children:r("还没有限制规则:账号照常参与转发,余额与 Token 消耗都不设上限。")}),s.jsxs("div",{className:"field-row mt-2.5",children:[s.jsx(ne,{variant:"outline",onClick:d,children:r("+ 添加限制")}),s.jsx("span",{className:"detail",children:r("可添加多条;同类规则也允许并存(例如一条按余额、两条不同重置方式的 Token)")})]}),s.jsx(o8,{account:e,target:o,onClose:()=>c(null),onSave:p})]})}function c8(e,t){const a=mu(e);return JSON.stringify(t)===JSON.stringify(a)?null:{patch:{limiters:t}}}function u8(e){return mu(e).map(t=>({...t}))}const d8={seconds:1,minutes:60,hours:3600};function f8(e){return e>0&&e%3600===0?{value:String(e/3600),unit:"hours"}:e>0&&e%60===0?{value:String(e/60),unit:"minutes"}:e>0?{value:String(e),unit:"seconds"}:{value:"5",unit:"minutes"}}function p8(e){const{enabled:t,interval:a}=zA(e),o=f8(t?a:0);return{enabled:t,intervalInput:o.value,unit:o.unit}}function m8(e,t){const a=Math.round(Number(t.intervalInput)*d8[t.unit]);if(t.enabled){if(!Number.isFinite(Number(t.intervalInput))||Number(t.intervalInput)<=0)return{error:r("请填写查询间隔")};if(aDA)return{error:r("查询间隔必须是 {min} 秒 ~ 24 小时",{min:uj})}}const o={},c=zA(e);return(t.enabled!==c.enabled||t.enabled&&a!==c.interval)&&(o.usageQuery={enabled:t.enabled,interval:t.enabled?a:c.interval}),o.usageQuery?{patch:o}:null}function h8({account:e,draft:t,onChange:a}){const o=c=>a({...t,...c});return s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"field-row mt-2.5",children:s.jsxs(Je,{className:"inline-flex cursor-pointer items-center gap-2.5 font-normal",children:[s.jsx(ns,{checked:t.enabled,onCheckedChange:c=>o({enabled:c===!0}),"aria-label":r("自动查询余额")}),s.jsx("span",{className:"text-xs text-subtle",children:r("自动查询余额(按下面的间隔自动刷新余额列的读数)")})]})}),t.enabled?s.jsxs("div",{className:"field-row mt-2.5",children:[s.jsx("label",{htmlFor:"account-usage-interval",children:r("查询间隔")}),s.jsx(Fe,{id:"account-usage-interval",type:"number",min:1,step:1,className:"max-w-[110px]",value:t.intervalInput,onChange:c=>o({intervalInput:c.currentTarget.value})}),s.jsxs(ut,{value:t.unit,onValueChange:c=>o({unit:c}),children:[s.jsx(ft,{className:"w-[92px]","aria-label":r("间隔单位"),children:s.jsx(dt,{children:t.unit==="hours"?r("小时"):t.unit==="minutes"?r("分钟"):r("秒")})}),s.jsxs(pt,{children:[s.jsx($e,{value:"seconds",children:r("秒")}),s.jsx($e,{value:"minutes",children:r("分钟")}),s.jsx($e,{value:"hours",children:r("小时")})]})]}),s.jsx("span",{className:"detail",children:r("30 秒 ~ 24 小时;手动查询会顺延下一轮")})]}):null]})}const g8={sub2api:{label:"Sub2API",endpoint:"{base}/v1/usage",note:r("用这条账号的 API Key 查询,不需要额外配置。"),fields:[]},new_api:{label:"NewAPI",endpoint:"{base}/api/user/self + /api/status",note:r("用 NewAPI 站点的个人访问令牌查询账户余额(不是这条账号的上游 API Key)。令牌在站点的「个人设置」里生成,只有旧版 / 定制站点才需要额外填用户 ID。"),fields:[{key:"accessToken",label:r("NewAPI 个人访问令牌"),secret:!0,placeholder:r("在 NewAPI 站点「个人设置」里生成的访问令牌"),hint:r("必填;留空 = 不修改,清除用右边的按钮")},{key:"userId",label:r("NewAPI 用户 ID"),placeholder:r("旧版 / 定制站点才需要,新版可留空"),hint:r("可留空:新版请求头只认令牌;旧版会把用户 ID 放进 New-Api-User 头")}]},deepseek:{label:"DeepSeek",endpoint:"{base}/user/balance",note:r("用这条账号的 API Key 查询,不需要额外配置。"),fields:[]},opencode:{label:"OpenCode Go",endpoint:"{base}/v1/usage",note:r("用这条账号的 API Key 查询订阅用量,不需要额外配置;读数展开成 5 小时 / 每周 / 每月三个窗口。"),fields:[]},sensenova:{label:"商汤日日新",endpoint:"platform.sensenova.cn 控制台",note:r("用商汤日日新控制台的账号密码查询(与推理用的 API Key 不是同一套)。网关会自动换取登录票并缓存,过期后自动重登,不需要手动维护。"),fields:[{key:"username",label:r("账号"),placeholder:r("商汤日日新控制台的登录账号"),hint:r("必填")},{key:"password",label:r("密码"),secret:!0,placeholder:r("商汤日日新控制台的登录密码"),hint:r("留空 = 不修改,清除用右边的按钮")}]},zhipu:{label:"智谱",endpoint:"bigmodel.cn 控制台",note:r("用 bigmodel.cn 控制台的访问令牌查询账户余额(人民币元)。令牌是登录后浏览器 Cookie `bigmodel_token_production` 的值:开发者工具 → 应用(Application)→ Cookie 里复制。"),fields:[{key:"token",label:r("访问令牌"),secret:!0,placeholder:r("bigmodel_token_production 的值"),hint:r("必填;留空 = 不修改,清除用右边的按钮")}]},zhipu_zai:{label:"智谱(z.ai 国际)",endpoint:"api.z.ai 控制台",note:r("用这条账号的 API Key 生成签名后查询账户余额(美元),不需要额外配置。要求 API Key 是 z.ai 的「id.secret」形态(控制台生成的 Key 就是)。"),fields:[]}};function Mf(e){return e?g8[e]??null:null}function x8(e,t){return t.secret?t.key==="accessToken"?e?.hasAccessToken===!0:t.key==="password"?e?.hasPassword===!0:t.key==="token"?e?.hasToken===!0:!1:!1}function b8(e){const t=String(e?.scheme||"");return t==="new_api"?e?.hasAccessToken===!0:t==="sensenova"?String(e?.username||"").trim()!==""&&e?.hasPassword===!0:t==="zhipu"?e?.hasToken===!0:!0}function v8(e){return{userId:String(e?.userId||""),username:String(e?.username||""),accessToken:"",password:"",token:""}}function y8(e,t){const a=Mf(e);if(!a||!a.fields.length)return null;const o={};for(const c of a.fields){const d=String(t[c.key]??"").trim();if(c.secret){d&&(o[c.key]=d);continue}o[c.key]=d}return Object.keys(o).length?o:null}function j8({field:e,value:t,configured:a,onValue:o,onClear:c,clearBusy:d,idPrefix:f}){const p=`${f}-${e.key}`;return s.jsxs("div",{className:"field-row mt-2.5",children:[s.jsx("label",{htmlFor:p,children:e.label}),s.jsx(Fe,{id:p,className:"min-w-[220px]",type:e.secret?"password":"text",autoComplete:e.secret?"new-password":"off",placeholder:a?r("已配置,留空则不修改"):e.placeholder,title:e.hint,value:t,onChange:h=>o(h.currentTarget.value)}),a&&c?s.jsx(ne,{variant:"outline",size:"sm",disabled:d===!0,onClick:c,title:r("清除已配置的 {label}",{label:e.label}),children:r("清除")}):null]})}function w8({spec:e,values:t,configured:a,onValue:o,onClear:c,clearBusy:d,idPrefix:f}){return s.jsxs(s.Fragment,{children:[s.jsxs("p",{className:"detail mt-2.5",children:[r("余额查询方案:{label}",{label:e.label}),s.jsx("span",{className:"ml-1 text-subtle",children:e.endpoint})," — ",e.note]}),e.fields.map(p=>s.jsx(j8,{field:p,idPrefix:f,value:t[p.key]||"",configured:a[p.key]===!0,onValue:h=>o(p.key,h),onClear:c?()=>c(p.key):void 0,clearBusy:d},p.key))]})}const DR=64;function S8(e,t){const a=An(e);return t.filter(o=>o.id!==e.id&&An(o)===a)}const Ol=999,IR=8;function ug(e){return hu(e)||e?.id||""}function PR(e){const t=e?.config?.source||e?.source,a=e?.config||null,o=t==="rotate";return{mode:t==="pool"?"pool":o?"rotate":t==="clash"?"clash":t==="custom"?"custom":"none",proxyId:t==="pool"?String(a?.proxyId||""):"",rotateAll:o?a?.all!==!1:!0,rotateIds:o&&Array.isArray(a?.proxyIds)?a.proxyIds.map(String):[],listenerUid:a?.source==="clash"||t==="clash"?String(a?.listenerUid||""):"",protocol:a?.protocol==="socks5"?"socks5":"http",host:a?.host||"",port:a?.port===void 0||a?.port===null?"":String(a.port),username:a?.username||"",password:a?.password||""}}function Tj(e){if(e.mode==="none")return null;if(e.mode==="pool"){if(!e.proxyId)throw new Error(r("请先选择已保存的代理"));return{source:"pool",proxyId:e.proxyId}}if(e.mode==="rotate"){if(e.rotateAll)return{source:"rotate",all:!0};if(!e.rotateIds.length)throw new Error(r("轮询至少要选择一条代理(或改选「全部」)"));return{source:"rotate",all:!1,proxyIds:[...e.rotateIds]}}if(e.mode==="clash"){if(!e.listenerUid)throw new Error(r("请先选择 Clash Verge 出口"));return{source:"clash",listenerUid:e.listenerUid}}const t=e.host.trim(),a=Number(e.port);if(!t)throw new Error(r("请填写代理主机地址"));if(!Number.isInteger(a)||a<1||a>65535)throw new Error(r("代理端口必须是 1-65535 的整数"));return{source:"custom",protocol:e.protocol==="socks5"?"socks5":"http",host:t,port:a,username:e.username.trim(),password:e.password}}function _R(e){const t=e.profileActive===!1?r("(其他订阅,可能未生效)"):"",a=e.enabled===!1?r("(已在 Clash 中禁用)"):"";return`${e.name} :${e.port}${t}${a}`}function LR({draft:e,onChange:t,idPrefix:a,allowRotate:o=!1}){const d=Gs().clash,f=Array.isArray(d?.options)?d.options:[],p=e.mode==="clash",[h,b]=x.useState(!1),[y,v]=x.useState(null),[j,w]=x.useState(null),[S,N]=x.useState(""),k=C=>t({...e,...C});x.useEffect(()=>{p&&mR().catch(()=>{})},[p]);const A=x.useCallback((C=!1)=>{N(""),hR({force:C}).then(E=>w(E)).catch(E=>{w([]),N(mt(E))})},[]);x.useEffect(()=>{(e.mode==="pool"||e.mode==="rotate")&&j===null&&A()},[e.mode,j,A]);function P(){return e.rotateAll?(j??[]).filter(C=>C.enabled!==!1).map(C=>C.id):[...e.rotateIds]}async function R(){if(h)return;if(e.mode==="rotate"){const E=P();if(!E.length){Le(r("轮询至少要选择一条代理(或改选「全部」)"),"err");return}const D=E.slice(0,IR);b(!0),v(r("正在连接上游…"));let I=0;const O=[];for(const H of D){const B=j?.find(L=>L.id===H)?.name||H;try{const L=await Pe().workbuddyDesktop?.testProxyPoolItem?.(H);L?.success?I+=1:O.push(`${B}(${L?.error||r("连接失败")})`)}catch(L){O.push(`${B}(${mt(L)})`)}}const _=E.length-D.length,z=r("✅ {ok}/{total} 个出口可用",{ok:I,total:D.length})+(_>0?r("(只测了前 {limit} 个,还有 {rest} 个未测)",{limit:IR,rest:_}):"");v(s.jsxs("span",{className:O.length?"text-destructive":"text-success",children:[z,O.length?` ${Za(O.join(r(";")))}`:""]})),b(!1);return}if(e.mode==="pool"){if(!e.proxyId){Le(r("请先选择已保存的代理"),"err");return}b(!0),v(r("正在连接上游…"));try{const E=await Pe().workbuddyDesktop?.testProxyPoolItem?.(e.proxyId);v(E?.success?s.jsxs("span",{className:"text-success",children:[r("✅ 出口可用"),E.ip?r(" 出口 IP {ip}",{ip:Za(E.ip)}):"",E.durationMs!==void 0&&E.durationMs!==""?` ${Za(String(E.durationMs))}ms`:""]}):s.jsxs("span",{className:"text-destructive",children:["❌ ",Za(E?.error||r("连接失败"))]}))}catch(E){v(s.jsxs("span",{className:"text-destructive",children:["❌ ",Za(mt(E))]}))}finally{b(!1)}return}let C;try{C=Tj(e)}catch(E){Le(mt(E),"err");return}b(!0),v(r("正在连接上游…"));try{const E=await Pe().workbuddyDesktop?.testProxy?.({proxy:C});E?.success?v(s.jsxs("span",{className:"text-success",children:[r("✅ 出口可用"),E.status!==void 0&&E.status!==""?` HTTP ${Za(String(E.status))}`:"",E.ip?r(" 出口 IP {ip}",{ip:Za(E.ip)}):"",E.durationMs!==void 0&&E.durationMs!==""?` ${Za(String(E.durationMs))}ms`:""]})):v(s.jsxs("span",{className:"text-destructive",children:["❌ ",Za(E?.error||r("连接失败"))]}))}catch(E){v(s.jsxs("span",{className:"text-destructive",children:["❌ ",Za(mt(E))]}))}finally{b(!1)}}return s.jsxs("div",{className:"flex flex-col",children:[s.jsxs(Ph,{value:e.mode,onValueChange:C=>k({mode:C}),className:"flex-row flex-wrap items-center gap-5","aria-label":r("代理方式"),children:[s.jsxs(Je,{className:"inline-flex cursor-pointer items-center gap-2 font-normal",children:[s.jsx(yo,{value:"none"}),r("无代理(直连)")]}),s.jsxs(Je,{className:"inline-flex cursor-pointer items-center gap-2 font-normal",children:[s.jsx(yo,{value:"pool"}),r("已保存的代理")]}),o?s.jsxs(Je,{className:"inline-flex cursor-pointer items-center gap-2 font-normal",title:r("逐请求轮换出口(换 IP):OpenCode Zen 免费档按 IP 限流,单个 IP 的额度用完会对它一律 429"),children:[s.jsx(yo,{value:"rotate"}),r("轮询(换 IP)")]}):null,p?s.jsxs(Je,{className:"inline-flex cursor-pointer items-center gap-2 font-normal",children:[s.jsx(yo,{value:"clash"}),"Clash Verge"]}):null,s.jsxs(Je,{className:"inline-flex cursor-pointer items-center gap-2 font-normal",children:[s.jsx(yo,{value:"custom"}),r("自定义")]})]}),e.mode==="pool"?s.jsxs("div",{className:"mt-3",children:[s.jsxs("div",{className:"field-row",children:[s.jsx("label",{htmlFor:`${a}-pool-exit`,children:r("代理")}),s.jsxs(ut,{value:e.proxyId,disabled:!j?.length,onValueChange:C=>k({proxyId:String(C)}),children:[s.jsx(ft,{id:`${a}-pool-exit`,className:"min-w-[220px]",children:s.jsx(dt,{children:j?.find(C=>C.id===e.proxyId)?du(j.find(C=>C.id===e.proxyId)):j===null?r("正在读取…"):j.length?r("请选择代理"):r("还没有保存的代理")})}),s.jsx(pt,{children:(j??[]).map(C=>s.jsx($e,{value:C.id,children:du(C)},C.id))})]}),s.jsx(ne,{variant:"outline",size:"sm",onClick:()=>A(!0),children:r("重新读取")})]}),s.jsx("div",{className:"detail mt-1.5",children:S?r("读取失败:{error}",{error:S}):j===null?r("正在读取代理列表…"):j.length?r("地址与端口由「网络代理」页管理:那边改一次、测一次,所有引用它的账号一起生效"):r("「网络代理」页还没有出口 —— 去那里新增,或在「订阅管理」里点「同步 Clash Verge」把 Clash 的出口导进来")})]}):null,e.mode==="rotate"?s.jsxs("div",{className:"mt-3",children:[s.jsxs("div",{className:"flex flex-wrap items-center gap-x-2.5 gap-y-1",children:[s.jsx(Pr,{id:`${a}-rotate-all`,checked:e.rotateAll,"aria-label":r("轮询全部代理节点"),onCheckedChange:C=>k({rotateAll:C===!0})}),s.jsx("label",{htmlFor:`${a}-rotate-all`,className:"cursor-pointer text-xs text-subtle",children:r("全部代理节点(推荐)")}),s.jsx("span",{className:"detail",children:r("「网络代理」页里每个启用的出口轮流使用;之后新加的出口自动加入")})]}),e.rotateAll?null:s.jsxs("div",{className:"field-row mt-2.5",children:[s.jsx("label",{htmlFor:`${a}-rotate-exits`,children:r("轮询的代理")}),s.jsx(Gh,{id:`${a}-rotate-exits`,value:e.rotateIds,onValueChange:C=>k({rotateIds:C.map(String)}),options:(j??[]).map(C=>({value:C.id,label:du(C)})),placeholder:r("选择要轮询的代理(可多选)"),"aria-label":r("轮询的代理")}),s.jsx(ne,{variant:"outline",size:"sm",onClick:()=>A(!0),children:r("重新读取")})]}),s.jsx("div",{className:"detail mt-1.5",children:S?r("读取失败:{error}",{error:S}):j===null?r("正在读取代理列表…"):j.length?r("每条请求换一个出口(按顺序轮流),上游看到的 IP 因此是变化的;出口的地址与端口由「网络代理」页管理"):r("「网络代理」页还没有出口 —— 去那里新增,或在「订阅管理」里点「同步 Clash Verge」把 Clash 的出口导进来")})]}):null,e.mode==="clash"?s.jsxs("div",{className:"mt-3",children:[s.jsxs("div",{className:"field-row",children:[s.jsx("label",{htmlFor:`${a}-clash-exit`,children:r("出口")}),s.jsxs(ut,{value:e.listenerUid,disabled:!f.length,onValueChange:C=>k({listenerUid:String(C)}),children:[s.jsx(ft,{id:`${a}-clash-exit`,className:"min-w-[220px]",children:s.jsx(dt,{children:f.find(C=>String(C.uid)===e.listenerUid)?_R(f.find(C=>String(C.uid)===e.listenerUid)):d?.available===!1?r("未检测到 Clash Verge"):f.length?r("请选择出口"):r("没有可用出口")})}),s.jsx(pt,{children:f.map(C=>s.jsx($e,{value:String(C.uid),children:_R(C)},String(C.uid)))})]}),s.jsx(ne,{variant:"outline",size:"sm",onClick:()=>{mR({force:!0}).then(()=>Le(r("✅ 已重新读取 Clash Verge 配置"))).catch(C=>Le(r("读取失败:{error}",{error:mt(C)}),"err"))},children:r("重新读取")})]}),s.jsx("div",{className:"detail mt-1.5",children:d===null?r("正在读取 Clash Verge 配置…"):d.available===!1?d.error?r("不可用:{error}",{error:d.error}):r("未检测到 Clash Verge 配置"):f.length?r("读取自 {dir};端口由 Clash Verge 管理,这里实时同步",{dir:d.dir||"Clash Verge"}):r("Clash Verge 里还没有配置混合监听器或节点端口")}),s.jsxs("p",{className:"detail mt-1.5",children:[r("这是既有配置(直接引用 Clash 出口,不经过代理池)。推荐改用上面的"),s.jsx("b",{children:r("「已保存的代理」")}),r(":到「网络代理」页的「订阅管理」里点「同步 Clash Verge」把出口导进池后即可选 —— 那样能集中测试、也能被多个账号共用。")]})]}):null,e.mode==="custom"?s.jsxs("div",{className:"mt-3",children:[s.jsxs("div",{className:"field-row",children:[s.jsx("label",{htmlFor:`${a}-protocol`,children:r("协议")}),s.jsxs(ut,{value:e.protocol,onValueChange:C=>k({protocol:C}),children:[s.jsx(ft,{id:`${a}-protocol`,className:"min-w-[110px]",children:s.jsx(dt,{children:e.protocol==="socks5"?"SOCKS5":"HTTP"})}),s.jsxs(pt,{children:[s.jsx($e,{value:"http",children:"HTTP"}),s.jsx($e,{value:"socks5",children:"SOCKS5"})]})]}),s.jsx("label",{htmlFor:`${a}-host`,className:"ml-2",children:r("主机")}),s.jsx(Fe,{id:`${a}-host`,className:"min-w-[140px]",placeholder:"127.0.0.1",value:e.host,onChange:C=>k({host:C.currentTarget.value})}),s.jsx("label",{htmlFor:`${a}-port`,children:r("端口")}),s.jsx(Fe,{id:`${a}-port`,type:"number",min:1,max:65535,className:"max-w-[110px]",placeholder:"7890",value:e.port,onChange:C=>k({port:C.currentTarget.value})})]}),s.jsxs("div",{className:"field-row mt-2.5",children:[s.jsx("label",{htmlFor:`${a}-user`,children:r("用户名")}),s.jsx(Fe,{id:`${a}-user`,placeholder:r("可选"),autoComplete:"off",value:e.username,onChange:C=>k({username:C.currentTarget.value})}),s.jsx("label",{htmlFor:`${a}-pass`,children:r("密码")}),s.jsx(Fe,{id:`${a}-pass`,type:"password",placeholder:r("可选"),autoComplete:"new-password",value:e.password,onChange:C=>k({password:C.currentTarget.value})})]})]}):null,s.jsxs("div",{className:"field-row mt-3",children:[s.jsx(ne,{variant:"outline",size:"sm",disabled:h,onClick:()=>{R()},children:r(h?"测试中…":"测试出口")}),s.jsx("span",{className:"detail",children:y})]})]})}function N8({plan:e,hasJwt:t,onChange:a}){const o=m$(e),[c,d]=x.useState(null);return x.useEffect(()=>{if(e!==So)return()=>{};let f=!0;const p=()=>{Promise.resolve(Pe().workbuddyDesktop?.zcodeCaptchaStats?.()).then(b=>{f&&b&&d({ready:Number(b.ready)||0,target:Number(b.target)||0})}).catch(()=>{})};p();const h=window.setInterval(p,5e3);return()=>{f=!1,window.clearInterval(h)}},[e]),s.jsxs("div",{className:"field-row mt-2.5",children:[s.jsx("label",{htmlFor:"account-plan-channel",children:r("使用套餐")}),s.jsxs(ut,{value:e,onValueChange:f=>a(String(f)),children:[s.jsx(ft,{id:"account-plan-channel",className:"min-w-[220px]",children:s.jsx(dt,{children:o})}),s.jsxs(pt,{children:[s.jsx($e,{value:$A,children:r("编码套餐(Coding Plan)— 走开放平台端点,消耗开放平台的额度(订阅套餐 / 资源包 / 充值余额)")}),s.jsx($e,{value:So,children:r("套餐池(Start Plan)— 走 zcode.z.ai 端点,消耗 ZCode 套餐池的额度(新用户体验额度 / 活动领取)")})]})]}),e===So&&!t?s.jsx("span",{className:"detail text-destructive",children:r("该账号没有套餐登录态(jwt),套餐池通道会失败:请重新登录该账号")}):null,e===So?s.jsxs("span",{className:"detail",title:r("套餐池的推理端点要求每条请求带一个阿里云验证码令牌;令牌由本应用在后台静默铸造,界面关闭时无法铸造"),children:[r("验证码令牌:{counts}",{counts:c?`${c.ready} / ${c.target||3}`:r("读取中…")}),c&&c.ready===0?r("(库存为空,正在补;补不上时转发会失败)"):""]}):null]})}function k8({configured:e,value:t,onChange:a,onClear:o,clearBusy:c}){return s.jsxs("div",{className:"field-row mt-2.5",children:[s.jsx("label",{htmlFor:"account-balance-token-input",children:r("余额查询凭证")}),s.jsx(Fe,{id:"account-balance-token-input",className:"min-w-[220px]",placeholder:r(e?"已配置,留空则不修改":"一般不用填"),title:r("积分查询已复用转发用的登录凭证,这里通常留空即可。只有旧版本填过、或从旧代理导入过凭证时才有值"),value:t,onChange:d=>a(d.currentTarget.value)}),e?s.jsx(ne,{variant:"outline",size:"sm",disabled:c,onClick:o,title:r("清除已配置的余额查询凭证"),children:r("清除")}):null]})}function C8({hasApiKey:e,noAuth:t,value:a,onValue:o,onToggleNoAuth:c,onClear:d,clearBusy:f}){return s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"field-row mt-2.5",children:[s.jsx("label",{htmlFor:"account-api-key-input",children:r("API Key")}),s.jsx(Fe,{id:"account-api-key-input",type:"password",autoComplete:"new-password",className:"min-w-[220px]",disabled:t,placeholder:e?r("已配置,留空则不修改"):"sk-…",title:r("上游的 API Key。留空 = 不修改(改凭证不会换账号 id);要清掉已配的凭证用右边的「清除」"),value:a,onChange:p=>o(p.currentTarget.value)}),e&&!t?s.jsx(ne,{variant:"outline",size:"sm",disabled:f,onClick:d,title:r("清除已配置的 API Key(转发时会因缺少凭证被跳过)"),children:r("清除")}):null]}),s.jsx("div",{className:"field-row mt-2.5",children:s.jsxs(Je,{className:"inline-flex cursor-pointer items-center gap-2.5 font-normal",children:[s.jsx(Pr,{checked:t,"aria-label":r("该上游无需鉴权"),onCheckedChange:p=>c(p===!0)}),s.jsx("span",{className:"text-xs text-subtle",children:r("该上游无需鉴权(转发与拉取模型都不发送鉴权头)")})]})}),s.jsxs("p",{className:"detail",children:[r("上游本来不要凭证时(本地 Ollama、OpenCode Zen 的免费档)勾上这一项:账号会被正常选路;只把 Key 留空"),s.jsx("strong",{children:r("又不勾")}),r("会被当成「未配置凭证」而跳过。")]})]})}function T8({provider:e,name:t,protocol:a,baseUrl:o,count:c,emulation:d,onName:f,onProtocol:p,onBaseUrl:h,onEmulation:b,onRemove:y}){const v=Pe().wbProviders?.PROTOCOL_OPTIONS||[{value:"openai",label:r("OpenAI 兼容")},{value:"anthropic",label:"Anthropic"}],j=v.find(w=>w.value===a)?.label||a;return s.jsxs(dn,{children:[s.jsx("h3",{children:r("提供商")}),s.jsxs("p",{children:[r("这一栏改的是"),s.jsx("strong",{children:r("「{name}」本身",{name:e.name||e.id})}),r("(名下 {count} 个账号共用)",{count:c}),r("改协议 / Base URL 会改变它们的转发方式,正在进行的请求可能失败;模型清单与映射在「模型管理」页。")]}),s.jsxs("div",{className:"field-row",children:[s.jsx("label",{htmlFor:"account-provider-name",children:r("名称")}),s.jsx(Fe,{id:"account-provider-name",maxLength:DR,className:"min-w-[220px]",placeholder:r("提供商显示名,1~{max} 个字符",{max:DR}),value:t,onChange:w=>f(w.currentTarget.value)})]}),s.jsxs("div",{className:"field-row mt-2.5",children:[s.jsx("label",{htmlFor:"account-provider-protocol",children:r("协议")}),s.jsxs(ut,{value:a,onValueChange:w=>p(String(w)),children:[s.jsx(ft,{id:"account-provider-protocol",className:"min-w-[180px]",children:s.jsx(dt,{children:j})}),s.jsx(pt,{children:v.map(w=>s.jsx($e,{value:w.value,children:w.label},w.value))})]})]}),s.jsxs("div",{className:"field-row mt-2.5",children:[s.jsx("label",{htmlFor:"account-provider-baseurl",children:r("Base URL")}),s.jsx(Fe,{id:"account-provider-baseurl",className:"min-w-[260px]",placeholder:r("OpenAI 兼容填到 /v1;Anthropic 填根地址"),value:o,onChange:w=>h(w.currentTarget.value)})]}),s.jsx("div",{className:"field-row mt-2.5",children:s.jsxs(Je,{className:"inline-flex cursor-pointer items-center gap-2.5 font-normal",children:[s.jsx(Pr,{checked:d==="opencode","aria-label":r("伪装 OpenCode 官方客户端"),onCheckedChange:w=>b(w===!0?"opencode":"")}),s.jsx("span",{className:"text-xs text-subtle",children:r("伪装 OpenCode 官方客户端(OpenCode Zen 免费档要它才放行)")})]})}),s.jsxs("p",{className:"detail",children:[r("开启后,网关按 OpenCode 官方 CLI 的形状发请求:没填 Key 的账号用匿名凭证"),s.jsx("code",{children:"public"}),r("、补官方会话头、请求体补两个占位工具(上游免费档的三道校验)。"),s.jsx("strong",{children:r("它会改写请求体")}),r(",只对 OpenCode Zen 这类上游有意义,别的家请关掉。")]}),s.jsxs("div",{className:"field-row mt-3",children:[s.jsx(ne,{variant:"destructive",onClick:y,children:r("删除提供商")}),s.jsx("span",{className:"detail",children:r("级联删除名下全部账号,不可恢复")})]})]})}function E8({id:e,onClose:t}){const a=Aa(e),[o,c]=x.useState(a?.enabled!==!1),[d,f]=x.useState(a?.name||""),[p,h]=x.useState(()=>PR(a?.proxy)),[b,y]=x.useState(""),[v,j]=x.useState(()=>mj(a)),[w,S]=x.useState(!1),[N,k]=x.useState(""),[A,P]=x.useState(null),[R,C]=x.useState(""),[E,D]=x.useState("chat_completions"),[I,O]=x.useState(""),[_,z]=x.useState(""),[H,B]=x.useState(""),[L,F]=x.useState(a?.noAuth===!0),[$,X]=x.useState(()=>p8(a)),[K,q]=x.useState(()=>v8(a?.balanceQuery)),[Q,G]=x.useState(()=>u8(a)),[J,Y]=x.useState("basic"),[re,M]=x.useState(()=>String(Number(a?.maxConcurrent)||0));if(x.useEffect(()=>{let Ae=!0;P(null);const oe=Aa(e);return oe?(Promise.resolve(Pe().wbCustomProvidersUi?.find?.(An(oe))).then(me=>{!Ae||!me||(P(me),C(me.name||""),D(me.protocol||"chat_completions"),O(me.baseUrl||""),z(typeof me.clientEmulation=="string"?me.clientEmulation:""))}).catch(()=>{}),()=>{Ae=!1}):()=>{Ae=!1}},[e]),!a)return s.jsx(Yt,{open:!0,onOpenChange:Ae=>{Ae||t()},children:s.jsxs(Xt,{children:[s.jsx(Vt,{children:s.jsx(Ut,{children:r("账号设置")})}),s.jsx(Lt,{children:s.jsx("p",{className:"detail",children:r("账号不存在,请刷新后重试。")})}),s.jsxs(tn,{children:[s.jsx("div",{className:"mr-auto"}),s.jsx(ne,{variant:"outline",onClick:t,children:r("关闭")})]})]})});const U=a,Z=S8(U,Al()),ae=An(U)==="catpaw",ce=An(U).startsWith("custom-"),W=RA(A,U.baseUrl)||p.mode==="rotate",ue=Mf(U.balanceQuery?.scheme),ve={};for(const Ae of ue?.fields??[])ve[Ae.key]=x8(U.balanceQuery,Ae);const ee=!!(ue&&ue.fields.length)&&!b8(U.balanceQuery);async function he(){if(!w){S(!0);try{await Pe().workbuddyDesktop?.updateAccount?.(e,{balanceToken:null}),y(""),Le(r("✅ 已清除余额查询凭证")),await Pe().wbApp?.refresh?.()}catch(Ae){Le(r("清除失败:{error}",{error:mt(Ae)}),"err")}finally{S(!1)}}}async function te(){if(!w){S(!0);try{await Pe().workbuddyDesktop?.updateAccount?.(e,{apiKey:null}),B(""),Le(r("✅ 已清除 API Key(该账号现在没有凭证,转发会被跳过)")),await Pe().wbApp?.refresh?.()}catch(Ae){Le(r("清除失败:{error}",{error:mt(Ae)}),"err")}finally{S(!1)}}}async function ke(Ae){if(!w){S(!0);try{await Pe().workbuddyDesktop?.updateAccount?.(e,{balanceQuery:{[Ae]:null}}),q(oe=>({...oe,[Ae]:""})),Le(r("✅ 已清除查询凭证")),await Pe().wbApp?.refresh?.()}catch(oe){Le(r("清除失败:{error}",{error:mt(oe)}),"err")}finally{S(!1)}}}function le(){if(!ce)return null;const Ae=H.trim(),oe={};return Ae?oe.apiKey=Ae:L!==(U.noAuth===!0)&&(oe.noAuth=L),Object.keys(oe).length?oe:null}function de(){if(!A)return null;const Ae=R.trim(),oe=I.trim();if(!Ae)return{error:r("请填写提供商名称")};if(!oe)return{error:r("请填写提供商的 Base URL")};const me=typeof A.clientEmulation=="string"?A.clientEmulation:"";return A.name===Ae&&A.protocol===E&&A.baseUrl===oe&&me===_?null:{id:A.id,name:Ae,protocol:E,baseUrl:oe,clientEmulation:_}}async function Se(){if(w)return;let Ae;try{Ae=Tj(p)}catch(Tt){Le(mt(Tt),"err");return}const oe=de();if(oe&&"error"in oe){k(s.jsx("span",{className:"text-destructive",children:oe.error}));return}const me=Ea(U)?m8(U,$):null;if(me&&"error"in me){k(s.jsx("span",{className:"text-destructive",children:me.error}));return}const pe=c8(U,Q),Ce=y8(U.balanceQuery?.scheme,K),Ne=le()||{},be=Number(re);if(!Number.isFinite(be)||be<0){Le(r("并发上限必须是 0~{max} 的整数",{max:Ol}),"err");return}const De=Math.min(Ol,Math.round(be)),Ge=Number(U.maxConcurrent)||0,Ct=De!==Ge?{maxConcurrent:De}:{};S(!0);try{const Tt=ae&&b.trim()?{balanceToken:b.trim()}:{},Mt=Jh(U)&&v!==mj(U)?{zcodePlan:v}:{};if(await Pe().workbuddyDesktop?.updateAccount?.(e,{name:d.trim()||U.name,enabled:o,proxy:Ae,...Tt,...Mt,...Ne,...Ct,...Ce?{balanceQuery:Ce}:{},...me&&"patch"in me?me.patch:{},...pe&&"patch"in pe?pe.patch:{}}),oe)try{await Pe().wbCustomProvidersUi?.update?.(oe)}catch(ot){k(s.jsx("span",{className:"text-destructive",children:r("账号已保存,但提供商未更新:{error}",{error:mt(ot)})})),await Pe().wbApp?.refresh?.(),S(!1);return}t(),Le(r("✅ 账号设置已保存"));try{await Pe().wbApp?.refresh?.()}catch{}}catch(Tt){k(s.jsx("span",{className:"text-destructive",children:mt(Tt)})),Le(r("保存失败:{error}",{error:mt(Tt)}),"err")}finally{S(!1)}}const Te=Number(cr(An(U)).concurrencyDefault)||0,_e=ae||ce||Jh(U);return s.jsx(Yt,{open:!0,onOpenChange:Ae=>{Ae||w||t()},children:s.jsxs(Xt,{className:"w-[min(900px,calc(100vw-48px))]",children:[s.jsx(Vt,{children:s.jsx(Ut,{children:r("账号设置 · {name}",{name:ug(a)})})}),s.jsx(Lt,{className:"p-0",children:s.jsxs("div",{className:"acct-dlg",children:[s.jsx("aside",{className:"prov-rail acct-dlg-rail","aria-label":r("账号设置分组"),children:s.jsxs("div",{className:"rail-scroll",children:[s.jsx("div",{className:"rail-label",children:r("账号设置")}),[["basic",r("基本")],..._e?[["credential",r("凭证与套餐")]]:[],...Ea(U)?[["query",r("查询设置")],["limiter",r("限制器")]]:[],["network",r("网络")]].map(([Ae,oe])=>s.jsx(uu,{active:J===Ae,title:oe,className:"shadow-none",onClick:()=>Y(Ae),children:oe},Ae))]})}),s.jsxs("div",{className:"acct-dlg-main",children:[J==="basic"?s.jsxs("div",{children:[s.jsxs("div",{className:"acct-dlg-pane-head",children:[s.jsx("h3",{children:r("基本")}),s.jsx("p",{children:r("这条账号是谁、排第几、能不能接请求。")})]}),s.jsxs("div",{className:"field-row",children:[s.jsx("label",{children:r("启用")}),s.jsx(ns,{checked:o,onCheckedChange:c,"aria-label":r("启用该账号")}),s.jsx("span",{className:"detail",children:r("关闭则不参与转发(余额查询照常,见「查询设置」)")})]}),s.jsxs("div",{className:"field-row",children:[s.jsx("label",{htmlFor:"account-name-input",children:r("备注名")}),s.jsx(Fe,{id:"account-name-input",maxLength:100,placeholder:r("账号显示名称"),className:"max-w-[280px]",value:d,onChange:Ae=>f(Ae.currentTarget.value)})]}),s.jsxs("div",{className:"field-row",children:[s.jsx("label",{children:r("转发顺序")}),s.jsx("span",{className:"detail",children:r("在列表里拖:拖分组带调整整组顺位,拖行首把手调整组内先后(顺序由拖拽表达,不再填数字)")})]}),s.jsxs("div",{className:"field-row",children:[s.jsx("label",{htmlFor:"account-conc-input",children:r("并发上限")}),s.jsx(Fe,{id:"account-conc-input",type:"number",min:0,max:Ol,step:1,className:"max-w-[110px]",value:re,onChange:Ae=>M(Ae.currentTarget.value)}),s.jsx("span",{className:"detail",children:Te>0?r("0 = 按本家默认 {default}",{default:Te}):r("0 = 不限")})]}),s.jsx("p",{className:"detail acct-dlg-hint",children:Te>0?r("并发上限 受上游硬顶约束,达到上限的账号跳过、请求转给其他账号(原列表 ⋯ 菜单的「并发上限」入口已并入这里)"):r("并发上限 0~{max};达到上限的账号跳过、请求转给其他账号(原列表 ⋯ 菜单的「并发上限」入口已并入这里)",{max:Ol})})]}):null,J==="credential"&&_e?s.jsxs("div",{children:[s.jsxs("div",{className:"acct-dlg-pane-head",children:[s.jsx("h3",{children:r("凭证与套餐")}),s.jsx("p",{children:r("这一段按提供商出现:有什么配什么。")})]}),ae?s.jsx(k8,{configured:a.hasBalanceToken===!0,value:b,onChange:y,clearBusy:w,onClear:()=>{he()}}):null,ce?s.jsx(C8,{hasApiKey:U.hasApiKey===!0,noAuth:L,value:H,onValue:B,onToggleNoAuth:F,onClear:()=>{te()},clearBusy:w}):null,Jh(U)?s.jsx(N8,{plan:v,hasJwt:a.canClaim===!0,onChange:j}):null,A?s.jsx(T8,{provider:A,count:Z.length+1,name:R,protocol:E,baseUrl:I,emulation:_,onName:C,onProtocol:D,onBaseUrl:O,onEmulation:z,onRemove:()=>{w||Promise.resolve(Pe().wbCustomProvidersUi?.remove?.(A.id)).then(Ae=>{Ae&&t()})}}):null]}):null,J==="query"&&Ea(U)?s.jsxs("div",{children:[s.jsxs("div",{className:"acct-dlg-pane-head",children:[s.jsx("h3",{children:r("查询设置")}),s.jsx("p",{children:r("余额列读数的自动刷新;也是「限制器」余额规则的数据来源。")})]}),ue?s.jsx(w8,{spec:ue,values:K,configured:ve,onValue:(Ae,oe)=>q(me=>({...me,[Ae]:oe})),onClear:Ae=>{ke(Ae)},clearBusy:w,idPrefix:"account-balance-query"}):null,ee?s.jsx("p",{className:"detail mt-2.5 text-subtle",children:r("查询凭证还没配齐:填好后余额列才有读数,在此之前会显示「未配置」。")}):null,s.jsx(h8,{account:U,draft:$,onChange:X})]}):null,J==="limiter"&&Ea(U)?s.jsxs("div",{children:[s.jsxs("div",{className:"acct-dlg-pane-head",children:[s.jsx("h3",{children:r("限制器")}),s.jsx("p",{children:r("按规则限制该账号参与转发:没有规则(或全部停用)= 不限制;跳过档自动恢复,禁用档需手动启用。")})]}),s.jsx(i8,{account:U,draft:Q,onChange:G})]}):null,J==="network"?s.jsxs("div",{children:[s.jsxs("div",{className:"acct-dlg-pane-head",children:[s.jsx("h3",{children:r("网络")}),s.jsx("p",{children:r("这条账号访问上游走哪条线路。")})]}),s.jsx(LR,{draft:p,onChange:h,idPrefix:"account-proxy",allowRotate:W}),a.proxy?.error?s.jsx("p",{className:"detail text-destructive",children:r("当前代理不可用:{error}(转发时会回退直连)",{error:a.proxy.error})}):null]}):null]})]})}),s.jsxs(tn,{children:[s.jsx("div",{className:"detail mr-auto",style:{minHeight:18},children:N}),s.jsx(ne,{variant:"outline",disabled:w,onClick:t,children:r("取消")}),s.jsx(ne,{variant:"default",disabled:w,onClick:()=>{Se()},children:r(w?"保存中…":"保存")})]})]})})}const A8=[{value:"enable",label:r("启用")},{value:"disable",label:r("禁用")},{value:"proxy",label:r("修改代理")},{value:"concurrency",label:r("设置并发上限")},{value:"remove",label:r("删除")}];function R8({ids:e,action:t,onClose:a}){const[o,c]=x.useState(t),[d,f]=x.useState(()=>PR(null)),[p,h]=x.useState(""),[b,y]=x.useState(!1),[v,j]=x.useState(""),w=e.map(R=>Aa(R)).filter(R=>R!==null),S=w.reduce((R,C)=>Math.max(R,Number(cr(An(C)).concurrencyDefault)||0),0),N=w.length>0&&w.every(R=>s$(R));function k(R){return Promise.resolve(Pe().wbConfirm?.ask?.({title:r("删除选中的账号"),html:r("确定删除选中的 {count} 个账号?此操作不可恢复,账号的登录态会一并移除。",{count:R}),okText:r("删除"),okClass:"danger"})??!1)}async function A(){if(b)return;if(!e.length){Le(r("没有选中的账号"),"err");return}let R;if(o==="proxy")try{R=Tj(d)}catch(E){Le(mt(E),"err");return}let C;if(o==="concurrency"){const E=Number(p.trim());if(!p.trim()||!Number.isFinite(E)||E<0){Le(r("并发上限必须是 0~{max} 的整数",{max:Ol}),"err");return}C=Math.min(Ol,Math.round(E))}if(!(o==="remove"&&!await k(e.length))){if(o==="disable"||o==="remove"){const E=new Set(e);if(!Al().filter(I=>I.enabled!==!1&&!E.has(I.id)).length){const I=r(o==="remove"?"删除":"禁用");if(!await Promise.resolve(Pe().wbConfirm?.ask?.({title:r("全部启用中的账号将被{what}",{what:I}),html:r("这会{what}所有启用中的账号,转发将不可用。确定继续?",{what:I}),okText:I,okClass:o==="remove"?"danger":"primary"})??!1))return}}y(!0),j("");try{const E={action:o,ids:e};o==="proxy"&&(E.proxy=R),o==="concurrency"&&(E.maxConcurrent=C);const D=await Pe().workbuddyDesktop?.batchAccounts?.(E),I=(D?.ok||[]).filter(B=>B.changes?.length).length,O=(D?.removed||[]).length,_=D?.failed||[],z=o==="remove"?O:I,H={enable:r("启用"),disable:r("禁用"),proxy:r("修改代理"),concurrency:r("设置并发上限"),remove:r("删除")}[o]||o;if(_.length){const B=_.slice(0,3).map(L=>ug(Aa(String(L.id)))||L.id).join(r("、"));Le(r("{verb}完成:成功 {ok} 个,失败 {fail} 个({detail}{more})",{verb:H,ok:z,fail:_.length,detail:B,more:_.length>3?r(" 等"):""}),"err"),j(s.jsxs("span",{className:"text-destructive",children:[r("失败 {count} 个:",{count:_.length}),_.map(L=>`${ug(Aa(String(L.id)))||L.id}(${L.error})`).join(r(";"))]}))}else Le(r("✅ {verb}完成:共 {count} 个账号",{verb:H,count:z})),a();await Pe().wbApp?.refresh?.()}catch(E){j(s.jsx("span",{className:"text-destructive",children:mt(E)})),Le(r("批量操作失败:{error}",{error:mt(E)}),"err")}finally{y(!1)}}}const P={enable:r("启用"),disable:r("禁用"),proxy:r("修改代理"),concurrency:r("设置并发上限"),remove:r("删除")}[o]||o;return s.jsx(Yt,{open:!0,onOpenChange:R=>{R||b||a()},children:s.jsxs(Xt,{children:[s.jsx(Vt,{children:s.jsx(Ut,{children:r("批量操作 · 已选 {count} 个账号",{count:e.length})})}),s.jsxs(Lt,{children:[s.jsxs(dn,{children:[s.jsx("h3",{children:r("将作用于以下账号")}),s.jsx("p",{style:{maxHeight:84,overflowY:"auto"},children:w.map(R=>ug(R)).join(r("、"))})]}),s.jsxs(dn,{children:[s.jsx("h3",{children:r("操作")}),s.jsx(Ph,{value:o,onValueChange:c,className:"flex-row flex-wrap items-center gap-5","aria-label":r("批量动作"),children:A8.map(R=>s.jsxs(Je,{className:"inline-flex cursor-pointer items-center gap-2 font-normal",children:[s.jsx(yo,{value:R.value}),R.label]},R.value))}),o==="proxy"?s.jsx("div",{className:"mt-2.5",children:s.jsx(LR,{draft:d,onChange:f,idPrefix:"batch-proxy",allowRotate:N})}):null,o==="concurrency"?s.jsxs("div",{className:"mt-2.5",children:[s.jsxs("div",{className:"field-row",children:[s.jsx("label",{htmlFor:"batch-conc-input",children:r("并发上限")}),s.jsx(Fe,{id:"batch-conc-input",type:"number",min:0,max:Ol,step:1,className:"max-w-[110px]",placeholder:r("不限"),value:p,onChange:R=>h(R.currentTarget.value)}),s.jsx("span",{className:"detail",children:r("0 = 不限")})]}),s.jsx("p",{className:"detail acct-dlg-hint",children:S>0?r("并发上限 0~{max};有上游硬顶的家(如 CodeArts)以它的硬顶为准;达到上限的账号会被跳过、请求转给其他账号",{max:Ol}):r("并发上限 0~{max};达到上限的账号会被跳过、请求转给其他账号",{max:Ol})})]}):null]}),s.jsx("div",{className:"detail",style:{minHeight:18},children:v})]}),s.jsxs(tn,{children:[s.jsx("div",{className:"mr-auto"}),s.jsx(ne,{variant:"outline",disabled:b,onClick:a,children:r("取消")}),s.jsx(ne,{variant:o==="remove"?"destructive":"default",disabled:b,onClick:()=>{A()},children:b?r("执行中…"):r("执行({action})",{action:P})})]})]})})}function O8(){const e=Gs();return e.dialog?e.dialog.kind==="settings"?s.jsx(E8,{id:e.dialog.id,onClose:og},e.dialog.id):s.jsx(R8,{ids:e.dialog.ids,action:e.dialog.action,onClose:og},e.dialog.ids.join(",")):null}var Ej={exports:{}},Df={},Aj={exports:{}},Rj={};var zR;function M8(){return zR||(zR=1,(function(e){function t(X,K){var q=X.length;X.push(K);e:for(;0>>1,G=X[Q];if(0>>1;Qc(re,q))Mc(U,re)?(X[Q]=U,X[M]=q,Q=M):(X[Q]=re,X[Y]=q,Q=Y);else if(Mc(U,q))X[Q]=U,X[M]=q,Q=M;else break e}}return K}function c(X,K){var q=X.sortIndex-K.sortIndex;return q!==0?q:X.id-K.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var d=performance;e.unstable_now=function(){return d.now()}}else{var f=Date,p=f.now();e.unstable_now=function(){return f.now()-p}}var h=[],b=[],y=1,v=null,j=3,w=!1,S=!1,N=!1,k=!1,A=typeof setTimeout=="function"?setTimeout:null,P=typeof clearTimeout=="function"?clearTimeout:null,R=typeof setImmediate<"u"?setImmediate:null;function C(X){for(var K=a(b);K!==null;){if(K.callback===null)o(b);else if(K.startTime<=X)o(b),K.sortIndex=K.expirationTime,t(h,K);else break;K=a(b)}}function E(X){if(N=!1,C(X),!S)if(a(h)!==null)S=!0,D||(D=!0,B());else{var K=a(b);K!==null&&$(E,K.startTime-X)}}var D=!1,I=-1,O=5,_=-1;function z(){return k?!0:!(e.unstable_now()-_X&&z());){var Q=v.callback;if(typeof Q=="function"){v.callback=null,j=v.priorityLevel;var G=Q(v.expirationTime<=X);if(X=e.unstable_now(),typeof G=="function"){v.callback=G,C(X),K=!0;break t}v===a(h)&&o(h),C(X)}else o(h);v=a(h)}if(v!==null)K=!0;else{var J=a(b);J!==null&&$(E,J.startTime-X),K=!1}}break e}finally{v=null,j=q,w=!1}K=void 0}}finally{K?B():D=!1}}}var B;if(typeof R=="function")B=function(){R(H)};else if(typeof MessageChannel<"u"){var L=new MessageChannel,F=L.port2;L.port1.onmessage=H,B=function(){F.postMessage(null)}}else B=function(){A(H,0)};function $(X,K){I=A(function(){X(e.unstable_now())},K)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(X){X.callback=null},e.unstable_forceFrameRate=function(X){0>X||125Q?(X.sortIndex=q,t(b,X),a(h)===null&&X===a(b)&&(N?(P(I),I=-1):N=!0,$(E,q-Q))):(X.sortIndex=G,t(h,X),S||w||(S=!0,D||(D=!0,B()))),X},e.unstable_shouldYield=z,e.unstable_wrapCallback=function(X){var K=j;return function(){var q=j;j=K;try{return X.apply(this,arguments)}finally{j=q}}}})(Rj)),Rj}var BR;function D8(){return BR||(BR=1,Aj.exports=M8()),Aj.exports}var HR;function I8(){if(HR)return Df;HR=1;var e=D8(),t=Xd(),a=M1();function o(n){var l="https://react.dev/errors/"+n;if(1ke||(n.current=te[ke],te[ke]=null,ke--)}function Se(n,l){ke++,te[ke]=n.current,n.current=l}var Te=le(null),_e=le(null),Ae=le(null),oe=le(null);function me(n,l){switch(Se(Ae,l),Se(_e,n),Se(Te,null),l.nodeType){case 9:case 11:n=(n=l.documentElement)&&(n=n.namespaceURI)?l5(n):0;break;default:if(n=l.tagName,l=l.namespaceURI)l=l5(l),n=o5(l,n);else switch(n){case"svg":n=1;break;case"math":n=2;break;default:n=0}}de(Te),Se(Te,n)}function pe(){de(Te),de(_e),de(Ae)}function Ce(n){var l=n.memoizedState;l!==null&&(qd._currentValue=l.memoizedState,Se(oe,n)),l=Te.current;var i=o5(l,n.type);l!==i&&(Se(_e,n),Se(Te,i))}function Ne(n){_e.current===n&&(de(Te),de(_e)),oe.current===n&&(de(oe),qd._currentValue=he)}var be,De;function Ge(n){if(be===void 0)try{throw Error()}catch(i){var l=i.stack.trim().match(/\n( *(at )?)/);be=l&&l[1]||"",De=-1xl in Si?ure(Si,xl,{enumerable:!0,configurable:!0,writable:!0,value:ro}):Si[xl]=ro;var cn=(Si,xl,ro)=>dre(Si,typeof xl!="symbol"?xl+"":xl,ro);(function(){"use strict";function Si(e,t){for(var a=0;ao[c]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}function xl(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var ro={exports:{}},Yd={};var gC;function J5(){if(gC)return Yd;gC=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function a(o,c,d){var f=null;if(d!==void 0&&(f=""+d),c.key!==void 0&&(f=""+c.key),"key"in c){d={};for(var p in c)p!=="key"&&(d[p]=c[p])}else d=c;return c=d.ref,{$$typeof:e,type:o,key:f,ref:c!==void 0?c:null,props:d}}return Yd.Fragment=t,Yd.jsx=a,Yd.jsxs=a,Yd}var xC;function ez(){return xC||(xC=1,ro.exports=J5()),ro.exports}var s=ez(),Cv={exports:{}},ct={};var bC;function tz(){if(bC)return ct;bC=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),c=Symbol.for("react.profiler"),d=Symbol.for("react.consumer"),f=Symbol.for("react.context"),p=Symbol.for("react.forward_ref"),h=Symbol.for("react.suspense"),b=Symbol.for("react.memo"),y=Symbol.for("react.lazy"),v=Symbol.for("react.activity"),j=Symbol.for("react.view_transition"),w=Symbol.iterator;function k(M){return M===null||typeof M!="object"?null:(M=w&&M[w]||M["@@iterator"],typeof M=="function"?M:null)}var S={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},N=Object.assign,R={};function P(M,U,Z){this.props=M,this.context=U,this.refs=R,this.updater=Z||S}P.prototype.isReactComponent={},P.prototype.setState=function(M,U){if(typeof M!="object"&&typeof M!="function"&&M!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,M,U,"setState")},P.prototype.forceUpdate=function(M){this.updater.enqueueForceUpdate(this,M,"forceUpdate")};function T(){}T.prototype=P.prototype;function C(M,U,Z){this.props=M,this.context=U,this.refs=R,this.updater=Z||S}var E=C.prototype=new T;E.constructor=C,N(E,P.prototype),E.isPureReactComponent=!0;var D=Array.isArray;function I(){}var O={H:null,A:null,T:null,S:null},_=Object.prototype.hasOwnProperty;function z(M,U,Z){var ae=Z.ref;return{$$typeof:e,type:M,key:U,ref:ae!==void 0?ae:null,props:Z}}function H(M,U){return z(M.type,U,M.props)}function B(M){return typeof M=="object"&&M!==null&&M.$$typeof===e}function L(M){var U={"=":"=0",":":"=2"};return"$"+M.replace(/[=:]/g,function(Z){return U[Z]})}var F=/\/+/g;function $(M,U){return typeof M=="object"&&M!==null&&M.key!=null?L(""+M.key):U.toString(36)}function X(M){switch(M.status){case"fulfilled":return M.value;case"rejected":throw M.reason;default:switch(typeof M.status=="string"?M.then(I,I):(M.status="pending",M.then(function(U){M.status==="pending"&&(M.status="fulfilled",M.value=U)},function(U){M.status==="pending"&&(M.status="rejected",M.reason=U)})),M.status){case"fulfilled":return M.value;case"rejected":throw M.reason}}throw M}function K(M,U,Z,ae,ce){var W=typeof M;(W==="undefined"||W==="boolean")&&(M=null);var ue=!1;if(M===null)ue=!0;else switch(W){case"bigint":case"string":case"number":ue=!0;break;case"object":switch(M.$$typeof){case e:case t:ue=!0;break;case y:return ue=M._init,K(ue(M._payload),U,Z,ae,ce)}}if(ue)return ce=ce(M),ue=ae===""?"."+$(M,0):ae,D(ce)?(Z="",ue!=null&&(Z=ue.replace(F,"$&/")+"/"),K(ce,U,Z,"",function(he){return he})):ce!=null&&(B(ce)&&(ce=H(ce,Z+(ce.key==null||M&&M.key===ce.key?"":(""+ce.key).replace(F,"$&/")+"/")+ue)),U.push(ce)),1;ue=0;var ve=ae===""?".":ae+":";if(D(M))for(var ee=0;ee"u"?!1:e instanceof ShadowRoot||e instanceof Cn(e).ShadowRoot}function Qd(e){const{overflow:t,overflowX:a,overflowY:o,display:c}=jr(e);return/auto|scroll|overlay|hidden|clip/.test(t+o+a)&&c!=="inline"&&c!=="contents"}function sz(e){return/^(table|td|th)$/.test(Fs(e))}function Um(e){try{if(e.matches(":popover-open"))return!0}catch{}try{return e.matches(":modal")}catch{return!1}}const rz=/transform|translate|scale|rotate|perspective|filter/,az=/paint|layout|strict|content/,Ni=e=>!!e&&e!=="none";let Ev;function Av(e){const t=Rt(e)?jr(e):e;return Ni(t.transform)||Ni(t.translate)||Ni(t.scale)||Ni(t.rotate)||Ni(t.perspective)||!Rv()&&(Ni(t.backdropFilter)||Ni(t.filter))||rz.test(t.willChange||"")||az.test(t.contain||"")}function lz(e){let t=lo(e);for(;pn(t)&&!ao(t);){if(Av(t))return t;if(Um(t))return null;t=lo(t)}return null}function Rv(){return Ev==null&&(Ev=typeof CSS<"u"&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),Ev}function ao(e){return/^(html|body|#document)$/.test(Fs(e))}function jr(e){return Cn(e).getComputedStyle(e)}function Vm(e){return Rt(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function lo(e){if(Fs(e)==="html")return e;const t=e.assignedSlot||e.parentNode||Kc(e)&&e.host||bl(e);return Kc(t)?t.host:t}function yC(e){const t=lo(e);return ao(t)?(e.ownerDocument||e).body:pn(t)&&Qd(t)?t:yC(t)}function Yc(e,t,a){var o;t===void 0&&(t=[]),a===void 0&&(a=!0);const c=yC(e),d=c===((o=e.ownerDocument)==null?void 0:o.body),f=Cn(c);if(d){const p=Ov(f);return t.concat(f,f.visualViewport||[],Qd(c)?c:[],p&&a?Yc(p):[])}else return t.concat(c,Yc(c,[],a))}function Ov(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}const Mv={...nz},jC={};function Ps(e,t){const a=x.useRef(jC);return a.current===jC&&(a.current=e(t)),a}const Dv=Mv.useInsertionEffect,oz=Dv&&Dv!==Mv.useLayoutEffect?Dv:e=>e();function Ie(e){const t=Ps(iz).current;return t.next=e,oz(t.effect),t.trampoline}function iz(){const e={next:void 0,callback:cz,trampoline:(...t)=>e.callback?.(...t),effect:()=>{e.callback=e.next}};return e}function cz(){}const Me=typeof document<"u"?x.useLayoutEffect:()=>{};function Iv(e,t){if(e&&!t)return e;if(!e&&t)return t;if(e||t)return{...e,...t}}const Pv={};function ta(e,t,a,o,c){if(!a&&!o&&!c&&!e)return Fm(t);let d=Fm(e);return t&&(d=Zd(d,t)),a&&(d=Zd(d,a)),o&&(d=Zd(d,o)),c&&(d=Zd(d,c)),d}function uz(e){if(e.length===0)return Pv;if(e.length===1)return Fm(e[0]);let t=Fm(e[0]);for(let a=1;a=65&&c<=90&&(typeof t=="function"||typeof t>"u")}function _v(e){return typeof e=="function"}function SC(e,t){return _v(e)?e(t):e??Pv}function pz(e,t){return t?e?(...a)=>{const o=a[0];if(CC(o)){const d=o;$m(d);const f=t(...a);return d.baseUIHandlerPrevented||e?.(...a),f}const c=t(...a);return e?.(...a),c}:NC(t):e}function NC(e){return e&&((...t)=>{const a=t[0];return CC(a)&&$m(a),e(...t)})}function $m(e){return e.preventBaseUIHandler=()=>{e.baseUIHandlerPrevented=!0},e}function kC(e,t){return t?e?t+" "+e:t:e}function CC(e){return e!=null&&typeof e=="object"&&"nativeEvent"in e}function mz(e,t){return function(o,...c){const d=new URL(e);return d.searchParams.set("code",o.toString()),c.forEach(f=>d.searchParams.append("args[]",f)),`${t} error #${o}; visit ${d} for the full message.`}}const un=mz("https://base-ui.com/production-error","Base UI"),TC=x.createContext(void 0);function EC(e=!1){const t=x.useContext(TC);if(t===void 0&&!e)throw new Error(un(16));return t}function hz(e){const{focusableWhenDisabled:t,disabled:a,composite:o=!1,tabIndex:c=0,isNativeButton:d}=e,f=o&&t!==!1,p=o&&t===!1;return{props:x.useMemo(()=>{const b={onKeyDown(y){a&&t&&y.key!=="Tab"&&y.preventDefault()}};return o||(b.tabIndex=c,!d&&a&&(b.tabIndex=t?c:-1)),(d&&(t||f)||!d&&a)&&(b["aria-disabled"]=a),d&&(!t||p)&&(b.disabled=a),b},[o,a,t,f,p,d,c])}}function Gt(e){return e?.ownerDocument||document}function Xc(e,t,{detail:a=0}={}){e.dispatchEvent(new(Cn(e)).PointerEvent("click",{bubbles:!0,cancelable:!0,composed:!0,detail:a,shiftKey:t.shiftKey,ctrlKey:t.ctrlKey,altKey:t.altKey,metaKey:t.metaKey}))}function na(e={}){const{disabled:t=!1,focusableWhenDisabled:a,tabIndex:o=0,native:c=!0,composite:d}=e,f=x.useRef(null),p=EC(!0),h=d??p!==void 0,{props:b}=hz({focusableWhenDisabled:a,disabled:t,composite:h,tabIndex:o,isNativeButton:c}),y=x.useCallback(()=>{const w=f.current;Lv(w)&&h&&t&&b.disabled===void 0&&w.disabled&&(w.disabled=!1)},[t,b.disabled,h]);Me(y,[y]);const v=x.useCallback((w={})=>{const{onClick:k,onMouseDown:S,onKeyUp:N,onKeyDown:R,onPointerDown:P,...T}=w;return ta({onClick(C){if(t){C.preventDefault();return}k?.(C)},onMouseDown(C){t||S?.(C)},onKeyDown(C){if(t||($m(C),R?.(C),C.baseUIHandlerPrevented))return;const E=C.target===C.currentTarget,D=C.currentTarget,I=Lv(D),O=!c&&gz(D),_=E&&(c?I:!O),z=C.key==="Enter",H=C.key===" ",B=D.getAttribute("role"),L=B?.startsWith("menuitem")||B==="option"||B==="gridcell";if(E&&h&&H){if(C.defaultPrevented&&L)return;C.preventDefault(),(!c||I)&&(C.preventBaseUIHandler(),Xc(D,C));return}if(!_||c||!H&&!z){E&&O&&H&&C.preventDefault();return}C.defaultPrevented||(C.preventDefault(),z&&(C.preventBaseUIHandler(),Xc(D,C)))},onKeyUp(C){if(!t){if($m(C),N?.(C),C.target===C.currentTarget&&c&&h&&Lv(C.currentTarget)&&C.key===" "){C.preventDefault();return}C.baseUIHandlerPrevented||C.target===C.currentTarget&&!c&&!h&&!C.defaultPrevented&&C.key===" "&&(C.preventBaseUIHandler(),Xc(C.currentTarget,C))}},onPointerDown(C){if(t){C.preventDefault();return}P?.(C)}},c?{type:"button"}:{role:"button"},b,T)},[t,b,h,c]),j=Ie(w=>{f.current=w,y()});return{getButtonProps:v,buttonRef:j}}function Lv(e){return pn(e)&&e.tagName==="BUTTON"}function gz(e){return pn(e)&&e.tagName==="A"&&!!e.href}function sa(e,t,a,o){const c=Ps(AC).current;return bz(c,e,t,a,o)&&RC(c,[e,t,a,o]),c.callback}function xz(e){const t=Ps(AC).current;return vz(t,e)&&RC(t,e),t.callback}function AC(){return{callback:null,cleanup:null,refs:[]}}function bz(e,t,a,o,c){return e.refs[0]!==t||e.refs[1]!==a||e.refs[2]!==o||e.refs[3]!==c}function vz(e,t){return e.refs.length!==t.length||e.refs.some((a,o)=>a!==t[o])}function RC(e,t){if(e.refs=t,t.every(a=>a==null)){e.callback=null;return}e.callback=a=>{if(e.cleanup&&(e.cleanup(),e.cleanup=null),a!=null){const o=Array(t.length).fill(null);for(let c=0;c{for(let c=0;c=e}function OC(e){if(!x.isValidElement(e))return null;const t=e,a=t.props;return(zv(19)?a?.ref:t.ref)??null}function Kt(){}const Pr=Object.freeze([]),mn=Object.freeze({});function jz(e,t){const a={};for(const o in e){const c=e[o];if(t?.hasOwnProperty(o)){const d=t[o](c);d!=null&&Object.assign(a,d);continue}c===!0?a[`data-${o.toLowerCase()}`]="":c&&(a[`data-${o.toLowerCase()}`]=c.toString())}return a}function wz(e,t){return typeof e=="function"?e(t):e}function Sz(e,t){return typeof e=="function"?e(t):e}function yt(e,t,a={}){let o=t.render;a.enabled!==!1&&(o=Tz(o));const c=Nz(t,a,o);if(a.enabled===!1)return null;const d=a.state??mn;return Ez(e,o,c,d)}function Nz(e,t,a){const{className:o,style:c}=e,{state:d=mn,ref:f,props:p,stateAttributesMapping:h,enabled:b=!0}=t,y=b?wz(o,d):void 0,v=b?Sz(c,d):void 0,j=b?jz(d,h):mn,w=b&&p?kz(p):void 0,k=b?Iv(j,w)??{}:mn;return typeof document<"u"&&(b?Array.isArray(f)?k.ref=xz([k.ref,OC(a),...f]):k.ref=sa(k.ref,OC(a),f):sa(null,null)),b?(y!==void 0&&(k.className=kC(k.className,y)),v!==void 0&&(k.style=Iv(k.style,v)),k):mn}function kz(e){return Array.isArray(e)?uz(e):ta(void 0,e)}const Cz=Symbol.for("react.lazy");function Tz(e){if(e?.$$typeof!==Cz)return e;const t=x.Children.toArray(e)[0];return x.isValidElement(t)?t:e}function Ez(e,t,a,o){if(t){if(typeof t=="function")return t(a,o);const c=ta(a,t.props);return c.ref=a.ref,x.cloneElement(t,c)}if(e&&typeof e=="string")return Az(e,a);throw new Error(un(8))}function Az(e,t){return e==="button"?x.createElement("button",{type:"button",...t,key:t.key}):e==="img"?x.createElement("img",{alt:"",...t,key:t.key}):x.createElement(e,t)}const Rz=x.forwardRef(function(t,a){const{render:o,className:c,disabled:d=!1,focusableWhenDisabled:f=!1,nativeButton:p=!0,style:h,...b}=t,{getButtonProps:y,buttonRef:v}=na({disabled:d,focusableWhenDisabled:f,native:p});return yt("button",t,{state:{disabled:d},ref:[a,v],props:[b,y]})});function MC(e){var t,a,o="";if(typeof e=="string"||typeof e=="number")o+=e;else if(typeof e=="object")if(Array.isArray(e)){var c=e.length;for(t=0;ttypeof e=="boolean"?`${e}`:e===0?"0":e,PC=DC,Qc=(e,t)=>a=>{var o;if(t?.variants==null)return PC(e,a?.class,a?.className);const{variants:c,defaultVariants:d}=t,f=Object.keys(c).map(b=>{const y=a?.[b],v=d?.[b];if(y===null)return null;const j=IC(y)||IC(v);return c[b][j]}),p=a&&Object.entries(a).reduce((b,y)=>{let[v,j]=y;return j===void 0||(b[v]=j),b},{}),h=t==null||(o=t.compoundVariants)===null||o===void 0?void 0:o.reduce((b,y)=>{let{class:v,className:j,...w}=y;return Object.entries(w).every(k=>{let[S,N]=k;return Array.isArray(N)?N.includes({...d,...p}[S]):{...d,...p}[S]===N})?[...b,v,j]:b},[]);return PC(e,f,h,a?.class,a?.className)},Oz=(e,t)=>{const a=new Array(e.length+t.length);for(let o=0;o({classGroupId:e,validator:t}),_C=(e=new Map,t=null,a)=>({nextPart:e,validators:t,classGroupId:a}),qm="-",LC=[],Dz="arbitrary..",Iz=e=>{const t=_z(e),{conflictingClassGroups:a,conflictingClassGroupModifiers:o}=e;return{getClassGroupId:f=>{if(f.startsWith("[")&&f.endsWith("]"))return Pz(f);const p=f.split(qm),h=p[0]===""&&p.length>1?1:0;return zC(p,h,t)},getConflictingClassGroupIds:(f,p)=>{if(p){const h=o[f],b=a[f];return h?b?Oz(b,h):h:b||LC}return a[f]||LC}}},zC=(e,t,a)=>{if(e.length-t===0)return a.classGroupId;const c=e[t],d=a.nextPart.get(c);if(d){const b=zC(e,t+1,d);if(b)return b}const f=a.validators;if(f===null)return;const p=t===0?e.join(qm):e.slice(t).join(qm),h=f.length;for(let b=0;be.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const t=e.slice(1,-1),a=t.indexOf(":"),o=t.slice(0,a);return o?Dz+o:void 0})(),_z=e=>{const{theme:t,classGroups:a}=e;return Lz(a,t)},Lz=(e,t)=>{const a=_C();for(const o in e){const c=e[o];Bv(c,a,o,t)}return a},Bv=(e,t,a,o)=>{const c=e.length;for(let d=0;d{if(typeof e=="string"){Bz(e,t,a);return}if(typeof e=="function"){Hz(e,t,a,o);return}Uz(e,t,a,o)},Bz=(e,t,a)=>{const o=e===""?t:BC(t,e);o.classGroupId=a},Hz=(e,t,a,o)=>{if(Vz(e)){Bv(e(o),t,a,o);return}t.validators===null&&(t.validators=[]),t.validators.push(Mz(a,e))},Uz=(e,t,a,o)=>{const c=Object.entries(e),d=c.length;for(let f=0;f{let a=e;const o=t.split(qm),c=o.length;for(let d=0;d"isThemeGetter"in e&&e.isThemeGetter===!0,Fz=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,a=Object.create(null),o=Object.create(null);const c=(d,f)=>{a[d]=f,t++,t>e&&(t=0,o=a,a=Object.create(null))};return{get(d){let f=a[d];if(f!==void 0)return f;if((f=o[d])!==void 0)return c(d,f),f},set(d,f){d in a?a[d]=f:c(d,f)}}},Hv="!",HC=":",$z=[],UC=(e,t,a,o,c)=>({modifiers:e,hasImportantModifier:t,baseClassName:a,maybePostfixModifierPosition:o,isExternal:c}),qz=e=>{const{prefix:t,experimentalParseClassName:a}=e;let o=c=>{const d=[];let f=0,p=0,h=0,b;const y=c.length;for(let S=0;Sh?b-h:void 0;return UC(d,w,j,k)};if(t){const c=t+HC,d=o;o=f=>f.startsWith(c)?d(f.slice(c.length)):UC($z,!1,f,void 0,!0)}if(a){const c=o;o=d=>a({className:d,parseClassName:c})}return o},Gz=e=>{const t=new Map;return e.orderSensitiveModifiers.forEach((a,o)=>{t.set(a,1e6+o)}),a=>{const o=[];let c=[];for(let d=0;d0&&(c.sort(),o.push(...c),c=[]),o.push(f)):c.push(f)}return c.length>0&&(c.sort(),o.push(...c)),o}},Kz=e=>({cache:Fz(e.cacheSize),parseClassName:qz(e),sortModifiers:Gz(e),postfixLookupClassGroupIds:Yz(e),...Iz(e)}),Yz=e=>{const t=Object.create(null),a=e.postfixLookupClassGroups;if(a)for(let o=0;o{const{parseClassName:a,getClassGroupId:o,getConflictingClassGroupIds:c,sortModifiers:d,postfixLookupClassGroupIds:f}=t,p=[],h=e.trim().split(Xz);let b="";for(let y=h.length-1;y>=0;y-=1){const v=h[y],{isExternal:j,modifiers:w,hasImportantModifier:k,baseClassName:S,maybePostfixModifierPosition:N}=a(v);if(j){b=v+(b.length>0?" "+b:b);continue}let R=!!N,P;if(R){const I=S.substring(0,N);P=o(I);const O=P&&f[P]?o(S):void 0;O&&O!==P&&(P=O,R=!1)}else P=o(S);if(!P){if(!R){b=v+(b.length>0?" "+b:b);continue}if(P=o(S),!P){b=v+(b.length>0?" "+b:b);continue}R=!1}const T=w.length===0?"":w.length===1?w[0]:d(w).join(":"),C=k?T+Hv:T,E=C+P;if(p.indexOf(E)>-1)continue;p.push(E);const D=c(P,R);for(let I=0;I0?" "+b:b)}return b},Zz=(...e)=>{let t=0,a,o,c="";for(;t{if(typeof e=="string")return e;let t,a="";for(let o=0;o{let a,o,c,d;const f=h=>{const b=t.reduce((y,v)=>v(y),e());return a=Kz(b),o=a.cache.get,c=a.cache.set,d=p,p(h)},p=h=>{const b=o(h);if(b)return b;const y=Qz(h,a);return c(h,y),y};return d=f,(...h)=>d(Zz(...h))},Jz=[],ks=e=>{const t=a=>a[e]||Jz;return t.isThemeGetter=!0,t.themeKey=e,t},FC=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,$C=/^\((?:(\w[\w-]*):)?(.+)\)$/i,eB=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,tB=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,nB=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,sB=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix|color|light-dark)\(.+\)$/,rB=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,aB=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,oo=e=>eB.test(e),Nt=e=>!!e&&!Number.isNaN(Number(e)),qa=e=>!!e&&Number.isInteger(Number(e)),Uv=e=>e.endsWith("%")&&Nt(e.slice(0,-1)),vl=e=>tB.test(e),qC=()=>!0,lB=e=>nB.test(e)&&!sB.test(e),Vv=()=>!1,oB=e=>rB.test(e),iB=e=>aB.test(e),cB=e=>!Ye(e)&&!Qe(e),uB=e=>e.startsWith("@container")&&(e[10]==="/"&&e[11]!==void 0||e[11]==="s"&&e[16]!==void 0&&e.startsWith("-size/",10)||e[11]==="n"&&e[18]!==void 0&&e.startsWith("-normal/",10)),dB=e=>io(e,ZC,Vv),Ye=e=>FC.test(e),ki=e=>io(e,WC,lB),GC=e=>io(e,vB,Nt),fB=e=>io(e,e1,qC),pB=e=>io(e,JC,Vv),KC=e=>io(e,XC,Vv),mB=e=>io(e,QC,iB),Gm=e=>io(e,t1,oB),Qe=e=>$C.test(e),Wd=e=>Ci(e,WC),hB=e=>Ci(e,JC),YC=e=>Ci(e,XC),gB=e=>Ci(e,ZC),xB=e=>Ci(e,QC),Km=e=>Ci(e,t1,!0),bB=e=>Ci(e,e1,!0),io=(e,t,a)=>{const o=FC.exec(e);return o?o[1]?t(o[1]):a(o[2]):!1},Ci=(e,t,a=!1)=>{const o=$C.exec(e);return o?o[1]?t(o[1]):a:!1},XC=e=>e==="position"||e==="percentage",QC=e=>e==="image"||e==="url",ZC=e=>e==="length"||e==="size"||e==="bg-size",WC=e=>e==="length",vB=e=>e==="number",JC=e=>e==="family-name",e1=e=>e==="number"||e==="weight",t1=e=>e==="shadow",yB=Wz(()=>{const e=ks("color"),t=ks("font"),a=ks("text"),o=ks("font-weight"),c=ks("tracking"),d=ks("leading"),f=ks("breakpoint"),p=ks("container"),h=ks("spacing"),b=ks("radius"),y=ks("shadow"),v=ks("inset-shadow"),j=ks("text-shadow"),w=ks("drop-shadow"),k=ks("blur"),S=ks("perspective"),N=ks("aspect"),R=ks("ease"),P=ks("animate"),T=()=>["auto","avoid","all","avoid-page","page","left","right","column"],C=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],E=()=>[...C(),Qe,Ye],D=()=>["auto","hidden","clip","visible","scroll"],I=()=>["auto","contain","none"],O=()=>[Qe,Ye,h],_=()=>[oo,"full","auto",...O()],z=()=>[qa,"none","subgrid",Qe,Ye],H=()=>["auto",{span:["full",qa,Qe,Ye]},qa,Qe,Ye],B=()=>[qa,"auto",Qe,Ye],L=()=>["auto","min","max","fr",Qe,Ye],F=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],$=()=>["start","end","center","stretch","center-safe","end-safe"],X=()=>["auto",...O()],K=()=>[oo,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...O()],q=()=>[p,oo,"screen","full","dvw","lvw","svw","min","max","fit",...O()],Q=()=>[oo,"screen","full","lh","dvh","lvh","svh","min","max","fit",...O()],G=()=>[e,Qe,Ye],J=()=>[...C(),YC,KC,{position:[Qe,Ye]}],Y=()=>["no-repeat",{repeat:["","x","y","space","round"]}],re=()=>["auto","cover","contain",gB,dB,{size:[Qe,Ye]}],M=()=>[Uv,Wd,ki],U=()=>["","none","full",b,Qe,Ye],Z=()=>["",Nt,Wd,ki],ae=()=>["solid","dashed","dotted","double"],ce=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],W=()=>[Nt,Uv,YC,KC],ue=()=>["","none",k,Qe,Ye],ve=()=>["none",Nt,Qe,Ye],ee=()=>["none",Nt,Qe,Ye],he=()=>[Nt,Qe,Ye],te=()=>[oo,"full",...O()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[vl],breakpoint:[vl],color:[qC],container:[vl],"drop-shadow":[vl],ease:["in","out","in-out"],font:[cB],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[vl],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[vl],shadow:[vl],spacing:["px",Nt],text:[vl],"text-shadow":[vl],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",oo,Ye,Qe,N]}],container:["container"],"container-type":[{"@container":["","normal","size",Qe,Ye]}],"container-named":[uB],columns:[{columns:[Nt,"auto",Ye,Qe,p]}],"break-after":[{"break-after":T()}],"break-before":[{"break-before":T()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:E()}],overflow:[{overflow:D()}],"overflow-x":[{"overflow-x":D()}],"overflow-y":[{"overflow-y":D()}],overscroll:[{overscroll:I()}],"overscroll-x":[{"overscroll-x":I()}],"overscroll-y":[{"overscroll-y":I()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:_()}],"inset-x":[{"inset-x":_()}],"inset-y":[{"inset-y":_()}],start:[{"inset-s":_(),start:_()}],end:[{"inset-e":_(),end:_()}],"inset-bs":[{"inset-bs":_()}],"inset-be":[{"inset-be":_()}],top:[{top:_()}],right:[{right:_()}],bottom:[{bottom:_()}],left:[{left:_()}],visibility:["visible","invisible","collapse"],z:[{z:[qa,"auto",Qe,Ye]}],basis:[{basis:[oo,"full","auto",p,...O()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[Nt,oo,"auto","initial","none",Ye]}],grow:[{grow:["",Nt,Qe,Ye]}],shrink:[{shrink:["",Nt,Qe,Ye]}],order:[{order:[qa,"first","last","none",Qe,Ye]}],"grid-cols":[{"grid-cols":z()}],"col-start-end":[{col:H()}],"col-start":[{"col-start":B()}],"col-end":[{"col-end":B()}],"grid-rows":[{"grid-rows":z()}],"row-start-end":[{row:H()}],"row-start":[{"row-start":B()}],"row-end":[{"row-end":B()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":L()}],"auto-rows":[{"auto-rows":L()}],gap:[{gap:O()}],"gap-x":[{"gap-x":O()}],"gap-y":[{"gap-y":O()}],"justify-content":[{justify:[...F(),"normal"]}],"justify-items":[{"justify-items":[...$(),"normal"]}],"justify-self":[{"justify-self":["auto",...$()]}],"align-content":[{content:["normal",...F()]}],"align-items":[{items:[...$(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...$(),{baseline:["","last"]}]}],"place-content":[{"place-content":F()}],"place-items":[{"place-items":[...$(),"baseline"]}],"place-self":[{"place-self":["auto",...$()]}],p:[{p:O()}],px:[{px:O()}],py:[{py:O()}],ps:[{ps:O()}],pe:[{pe:O()}],pbs:[{pbs:O()}],pbe:[{pbe:O()}],pt:[{pt:O()}],pr:[{pr:O()}],pb:[{pb:O()}],pl:[{pl:O()}],m:[{m:X()}],mx:[{mx:X()}],my:[{my:X()}],ms:[{ms:X()}],me:[{me:X()}],mbs:[{mbs:X()}],mbe:[{mbe:X()}],mt:[{mt:X()}],mr:[{mr:X()}],mb:[{mb:X()}],ml:[{ml:X()}],"space-x":[{"space-x":O()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":O()}],"space-y-reverse":["space-y-reverse"],size:[{size:K()}],"inline-size":[{inline:["auto",...q()]}],"min-inline-size":[{"min-inline":["auto",...q()]}],"max-inline-size":[{"max-inline":["none",...q()]}],"block-size":[{block:["auto",...Q()]}],"min-block-size":[{"min-block":["auto",...Q()]}],"max-block-size":[{"max-block":["none",...Q()]}],w:[{w:[p,"screen",...K()]}],"min-w":[{"min-w":[p,"screen","none",...K()]}],"max-w":[{"max-w":[p,"screen","none","prose",{screen:[f]},...K()]}],h:[{h:["screen","lh",...K()]}],"min-h":[{"min-h":["screen","lh","none",...K()]}],"max-h":[{"max-h":["screen","lh","none",...K()]}],"font-size":[{text:["base",a,Wd,ki]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[o,bB,fB]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",Uv,Ye]}],"font-family":[{font:[hB,pB,t]}],"font-features":[{"font-features":[Ye]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[c,Qe,Ye]}],"line-clamp":[{"line-clamp":[Nt,"none",Qe,GC]}],leading:[{leading:["none",d,...O()]}],"list-image":[{"list-image":["none",Qe,Ye]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",Qe,Ye]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:G()}],"text-color":[{text:G()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...ae(),"wavy"]}],"text-decoration-thickness":[{decoration:[Nt,"from-font","auto",Qe,ki]}],"text-decoration-color":[{decoration:G()}],"underline-offset":[{"underline-offset":[Nt,"auto",Qe,Ye]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:O()}],"tab-size":[{tab:[qa,Qe,Ye]}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",Qe,Ye]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",Qe,Ye]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:J()}],"bg-repeat":[{bg:Y()}],"bg-size":[{bg:re()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},qa,Qe,Ye],radial:["",Qe,Ye],conic:["",qa,Qe,Ye]},xB,mB]}],"bg-color":[{bg:G()}],"gradient-from-pos":[{from:M()}],"gradient-via-pos":[{via:M()}],"gradient-to-pos":[{to:M()}],"gradient-from":[{from:G()}],"gradient-via":[{via:G()}],"gradient-to":[{to:G()}],rounded:[{rounded:U()}],"rounded-s":[{"rounded-s":U()}],"rounded-e":[{"rounded-e":U()}],"rounded-t":[{"rounded-t":U()}],"rounded-r":[{"rounded-r":U()}],"rounded-b":[{"rounded-b":U()}],"rounded-l":[{"rounded-l":U()}],"rounded-ss":[{"rounded-ss":U()}],"rounded-se":[{"rounded-se":U()}],"rounded-ee":[{"rounded-ee":U()}],"rounded-es":[{"rounded-es":U()}],"rounded-tl":[{"rounded-tl":U()}],"rounded-tr":[{"rounded-tr":U()}],"rounded-br":[{"rounded-br":U()}],"rounded-bl":[{"rounded-bl":U()}],"border-w":[{border:Z()}],"border-w-x":[{"border-x":Z()}],"border-w-y":[{"border-y":Z()}],"border-w-s":[{"border-s":Z()}],"border-w-e":[{"border-e":Z()}],"border-w-bs":[{"border-bs":Z()}],"border-w-be":[{"border-be":Z()}],"border-w-t":[{"border-t":Z()}],"border-w-r":[{"border-r":Z()}],"border-w-b":[{"border-b":Z()}],"border-w-l":[{"border-l":Z()}],"divide-x":[{"divide-x":Z()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":Z()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...ae(),"hidden","none"]}],"divide-style":[{divide:[...ae(),"hidden","none"]}],"border-color":[{border:G()}],"border-color-x":[{"border-x":G()}],"border-color-y":[{"border-y":G()}],"border-color-s":[{"border-s":G()}],"border-color-e":[{"border-e":G()}],"border-color-bs":[{"border-bs":G()}],"border-color-be":[{"border-be":G()}],"border-color-t":[{"border-t":G()}],"border-color-r":[{"border-r":G()}],"border-color-b":[{"border-b":G()}],"border-color-l":[{"border-l":G()}],"divide-color":[{divide:G()}],"outline-style":[{outline:[...ae(),"none","hidden"]}],"outline-offset":[{"outline-offset":[Nt,Qe,Ye]}],"outline-w":[{outline:["",Nt,Wd,ki]}],"outline-color":[{outline:G()}],shadow:[{shadow:["","inner","none",y,Km,Gm]}],"shadow-color":[{shadow:G()}],"inset-shadow":[{"inset-shadow":["none",v,Km,Gm]}],"inset-shadow-color":[{"inset-shadow":G()}],"ring-w":[{ring:Z()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:G()}],"ring-offset-w":[{"ring-offset":[Nt,ki]}],"ring-offset-color":[{"ring-offset":G()}],"inset-ring-w":[{"inset-ring":Z()}],"inset-ring-color":[{"inset-ring":G()}],"text-shadow":[{"text-shadow":["none",j,Km,Gm]}],"text-shadow-color":[{"text-shadow":G()}],opacity:[{opacity:[Nt,Qe,Ye]}],"mix-blend":[{"mix-blend":[...ce(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":ce()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[Nt]}],"mask-image-linear-from-pos":[{"mask-linear-from":W()}],"mask-image-linear-to-pos":[{"mask-linear-to":W()}],"mask-image-linear-from-color":[{"mask-linear-from":G()}],"mask-image-linear-to-color":[{"mask-linear-to":G()}],"mask-image-t-from-pos":[{"mask-t-from":W()}],"mask-image-t-to-pos":[{"mask-t-to":W()}],"mask-image-t-from-color":[{"mask-t-from":G()}],"mask-image-t-to-color":[{"mask-t-to":G()}],"mask-image-r-from-pos":[{"mask-r-from":W()}],"mask-image-r-to-pos":[{"mask-r-to":W()}],"mask-image-r-from-color":[{"mask-r-from":G()}],"mask-image-r-to-color":[{"mask-r-to":G()}],"mask-image-b-from-pos":[{"mask-b-from":W()}],"mask-image-b-to-pos":[{"mask-b-to":W()}],"mask-image-b-from-color":[{"mask-b-from":G()}],"mask-image-b-to-color":[{"mask-b-to":G()}],"mask-image-l-from-pos":[{"mask-l-from":W()}],"mask-image-l-to-pos":[{"mask-l-to":W()}],"mask-image-l-from-color":[{"mask-l-from":G()}],"mask-image-l-to-color":[{"mask-l-to":G()}],"mask-image-x-from-pos":[{"mask-x-from":W()}],"mask-image-x-to-pos":[{"mask-x-to":W()}],"mask-image-x-from-color":[{"mask-x-from":G()}],"mask-image-x-to-color":[{"mask-x-to":G()}],"mask-image-y-from-pos":[{"mask-y-from":W()}],"mask-image-y-to-pos":[{"mask-y-to":W()}],"mask-image-y-from-color":[{"mask-y-from":G()}],"mask-image-y-to-color":[{"mask-y-to":G()}],"mask-image-radial":[{"mask-radial":[Qe,Ye]}],"mask-image-radial-from-pos":[{"mask-radial-from":W()}],"mask-image-radial-to-pos":[{"mask-radial-to":W()}],"mask-image-radial-from-color":[{"mask-radial-from":G()}],"mask-image-radial-to-color":[{"mask-radial-to":G()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":C()}],"mask-image-conic-pos":[{"mask-conic":[Nt]}],"mask-image-conic-from-pos":[{"mask-conic-from":W()}],"mask-image-conic-to-pos":[{"mask-conic-to":W()}],"mask-image-conic-from-color":[{"mask-conic-from":G()}],"mask-image-conic-to-color":[{"mask-conic-to":G()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:J()}],"mask-repeat":[{mask:Y()}],"mask-size":[{mask:re()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",Qe,Ye]}],filter:[{filter:["","none",Qe,Ye]}],blur:[{blur:ue()}],brightness:[{brightness:[Nt,Qe,Ye]}],contrast:[{contrast:[Nt,Qe,Ye]}],"drop-shadow":[{"drop-shadow":["","none",w,Km,Gm]}],"drop-shadow-color":[{"drop-shadow":G()}],grayscale:[{grayscale:["",Nt,Qe,Ye]}],"hue-rotate":[{"hue-rotate":[Nt,Qe,Ye]}],invert:[{invert:["",Nt,Qe,Ye]}],saturate:[{saturate:[Nt,Qe,Ye]}],sepia:[{sepia:["",Nt,Qe,Ye]}],"backdrop-filter":[{"backdrop-filter":["","none",Qe,Ye]}],"backdrop-blur":[{"backdrop-blur":ue()}],"backdrop-brightness":[{"backdrop-brightness":[Nt,Qe,Ye]}],"backdrop-contrast":[{"backdrop-contrast":[Nt,Qe,Ye]}],"backdrop-grayscale":[{"backdrop-grayscale":["",Nt,Qe,Ye]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[Nt,Qe,Ye]}],"backdrop-invert":[{"backdrop-invert":["",Nt,Qe,Ye]}],"backdrop-opacity":[{"backdrop-opacity":[Nt,Qe,Ye]}],"backdrop-saturate":[{"backdrop-saturate":[Nt,Qe,Ye]}],"backdrop-sepia":[{"backdrop-sepia":["",Nt,Qe,Ye]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":O()}],"border-spacing-x":[{"border-spacing-x":O()}],"border-spacing-y":[{"border-spacing-y":O()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",Qe,Ye]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[Nt,"initial",Qe,Ye]}],ease:[{ease:["linear","initial",R,Qe,Ye]}],delay:[{delay:[Nt,Qe,Ye]}],animate:[{animate:["none",P,Qe,Ye]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[S,Qe,Ye]}],"perspective-origin":[{"perspective-origin":E()}],rotate:[{rotate:ve()}],"rotate-x":[{"rotate-x":ve()}],"rotate-y":[{"rotate-y":ve()}],"rotate-z":[{"rotate-z":ve()}],scale:[{scale:ee()}],"scale-x":[{"scale-x":ee()}],"scale-y":[{"scale-y":ee()}],"scale-z":[{"scale-z":ee()}],"scale-3d":["scale-3d"],skew:[{skew:he()}],"skew-x":[{"skew-x":he()}],"skew-y":[{"skew-y":he()}],transform:[{transform:[Qe,Ye,"","none","gpu","cpu"]}],"transform-origin":[{origin:E()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:te()}],"translate-x":[{"translate-x":te()}],"translate-y":[{"translate-y":te()}],"translate-z":[{"translate-z":te()}],"translate-none":["translate-none"],zoom:[{zoom:[qa,Qe,Ye]}],accent:[{accent:G()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:G()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",Qe,Ye]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scrollbar-thumb-color":[{"scrollbar-thumb":G()}],"scrollbar-track-color":[{"scrollbar-track":G()}],"scrollbar-gutter":[{"scrollbar-gutter":["auto","stable","both"]}],"scrollbar-w":[{scrollbar:["auto","thin","none"]}],"scroll-m":[{"scroll-m":O()}],"scroll-mx":[{"scroll-mx":O()}],"scroll-my":[{"scroll-my":O()}],"scroll-ms":[{"scroll-ms":O()}],"scroll-me":[{"scroll-me":O()}],"scroll-mbs":[{"scroll-mbs":O()}],"scroll-mbe":[{"scroll-mbe":O()}],"scroll-mt":[{"scroll-mt":O()}],"scroll-mr":[{"scroll-mr":O()}],"scroll-mb":[{"scroll-mb":O()}],"scroll-ml":[{"scroll-ml":O()}],"scroll-p":[{"scroll-p":O()}],"scroll-px":[{"scroll-px":O()}],"scroll-py":[{"scroll-py":O()}],"scroll-ps":[{"scroll-ps":O()}],"scroll-pe":[{"scroll-pe":O()}],"scroll-pbs":[{"scroll-pbs":O()}],"scroll-pbe":[{"scroll-pbe":O()}],"scroll-pt":[{"scroll-pt":O()}],"scroll-pr":[{"scroll-pr":O()}],"scroll-pb":[{"scroll-pb":O()}],"scroll-pl":[{"scroll-pl":O()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",Qe,Ye]}],fill:[{fill:["none",...G()]}],"stroke-w":[{stroke:[Nt,Wd,ki,GC]}],stroke:[{stroke:["none",...G()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{"container-named":["container-type"],overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","inset-bs","inset-be","start","end","top","right","bottom","left"],"inset-x":["start","end","right","left"],"inset-y":["inset-bs","inset-be","top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pbs","pbe","pt","pr","pb","pl"],px:["ps","pe","pr","pl"],py:["pbs","pbe","pt","pb"],m:["mx","my","ms","me","mbs","mbe","mt","mr","mb","ml"],mx:["ms","me","mr","ml"],my:["mbs","mbe","mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-bs","border-w-be","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-s","border-w-e","border-w-r","border-w-l"],"border-w-y":["border-w-bs","border-w-be","border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-bs","border-color-be","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-s","border-color-e","border-color-r","border-color-l"],"border-color-y":["border-color-bs","border-color-be","border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mbs","scroll-mbe","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-ms","scroll-me","scroll-mr","scroll-ml"],"scroll-my":["scroll-mbs","scroll-mbe","scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pbs","scroll-pbe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-ps","scroll-pe","scroll-pr","scroll-pl"],"scroll-py":["scroll-pbs","scroll-pbe","scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},postfixLookupClassGroups:["container-type"],orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}});function Ue(...e){return yB(DC(e))}const jB=Qc(["group/button inline-flex shrink-0 items-center justify-center gap-1.5 whitespace-nowrap border","font-medium transition-[background-color,border-color,color,transform,box-shadow] duration-150 ease-out","outline-none select-none active:translate-y-[0.5px]","disabled:pointer-events-none disabled:opacity-45 disabled:shadow-none","[&_svg]:pointer-events-none [&_svg]:shrink-0"],{variants:{variant:{default:"border-primary bg-primary font-semibold text-primary-on shadow-glow hover:border-primary-hover hover:bg-primary-hover",outline:"border-control-border bg-control text-foreground shadow-1 hover:border-control-border-hover hover:bg-control-hover",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"border-transparent bg-transparent text-subtle shadow-none hover:bg-control-hover hover:text-foreground",destructive:"border-destructive-bd bg-destructive-soft text-destructive hover:bg-destructive-hover",dashed:"border-dashed border-border-strong bg-transparent text-muted-foreground shadow-none hover:border-primary hover:text-primary-fg",link:"border-transparent bg-transparent text-primary shadow-none underline-offset-4 hover:underline"},size:{default:"h-[30px] rounded-md px-3 text-[12.5px]","2xs":"h-4 rounded-pill px-1.5 text-[10px]",xs:"h-6 rounded-sm px-2 text-[11.5px]",sm:"h-[26px] rounded-sm px-2.5 text-[12px]",lg:"h-9 rounded-md px-4 text-[13px]",icon:"h-[30px] w-[30px] rounded-md p-0","icon-2xs":"size-4 rounded-pill p-0","icon-xs":"size-6 rounded-sm p-0","icon-sm":"h-[26px] w-[26px] rounded-sm p-0","icon-lg":"size-9 rounded-md p-0"}},defaultVariants:{variant:"default",size:"default"}});function ne({className:e,variant:t,size:a,...o}){return s.jsx(Rz,{className:Ue(jB({variant:t,size:a}),e),...o})}const wB="data-valid",SB="data-invalid",NB={badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valid:null,valueMissing:!1},n1={valid:null,touched:!1,dirty:!1,filled:!1,focused:!1},kB={disabled:!1,...n1},Ti={valid(e){return e===null?null:e?{[wB]:""}:{[SB]:""}}},s1={invalid:void 0,name:void 0,validityData:{state:NB,errors:[],error:"",value:"",initialValue:null},setValidityData:Kt,disabled:void 0,setTouched:Kt,setDirty:Kt,setFilled:Kt,setFocused:Kt,validationMode:"onSubmit",shouldValidateOnChange:()=>!1,state:kB,registerFieldControl:Kt,validation:{getValidationProps:(e,t=mn)=>t,inputRef:{current:null},registeredInputs:new Map,registerInput:Kt,getInputControl:()=>null,commit:async()=>{},change:Kt}},r1=x.createContext(s1);function Na(e=!0){const t=x.useContext(r1);if(t.setValidityData===Kt&&!e)throw new Error(un(28));return t}const CB=x.createContext(void 0);function TB(e=!1){const t=x.useContext(CB);if(!t&&!e)throw new Error(un(86));return t}const EB=x.createContext({elementRef:{current:null},formRef:{current:{fields:new Map}},errors:{},clearErrors:Kt,validationMode:"onSubmit",submitCountRef:{current:0}});function Zc(){return x.useContext(EB)}let a1=0;function AB(e,t="mui"){const[a,o]=x.useState(e),c=e||a;return x.useEffect(()=>{a==null&&(a1+=1,o(`${t}-${a1}`))},[a,t]),c}const l1=Mv.useId;function Jd(e,t){if(l1!==void 0){const a=l1();return e??(t?`${t}-${a}`:a)}return AB(e,t)}function ka(e){return Jd(e,"base-ui")}const RB=x.createContext({controlId:void 0,registerControlId:Kt,resetControlId:Kt,labelId:void 0,setLabelId:Kt,messageIds:[],setMessageIds:Kt,getDescriptionProps:e=>e});function yl(){return x.useContext(RB)}function Fv(e,t,a,o=!0,c){const[d,f]=x.useState(),p=ka(c?`${c}-label`:void 0),h=e??t??d;return Me(()=>{const b=e||t||!o?void 0:OB(a.current,p);d!==b&&f(b)}),h}function OB(e,t){const a=MB(e);if(a)return!a.id&&t&&(a.id=t),a.id||void 0}function MB(e){if(!e)return;const t=e.parentElement;if(t&&t.tagName==="LABEL")return t;const a=e.id;if(a){const c=e.nextElementSibling;if(c&&c.htmlFor===a)return c}const o=e.labels;return o&&o[0]}function co(e={}){const{id:t,enabled:a=!0}=e,{controlId:o,registerControlId:c,resetControlId:d}=yl(),f=ka(),p=Ps(()=>Symbol()),h=x.useRef(!1),b=x.useRef(!1),y=Ie(()=>{!h.current||c===Kt||(h.current=!1,c(p.current,void 0))});return Me(()=>{if(!a||c===Kt){y();return}let v;if(t!==void 0)b.current=!0,v=t;else if(b.current)v=f;else{d();return}if(v===void 0){y();return}h.current=!0,c(p.current,v)},[t,a,c,d,f,p,y]),Me(()=>y,[y]),(a?o:void 0)??t??f}function DB(){return typeof navigator>"u"?{userAgent:"",platform:"",maxTouchPoints:0}:{userAgent:navigator.userAgent,platform:navigator.platform??"",maxTouchPoints:navigator.maxTouchPoints??0}}const{userAgent:IB,platform:PB,maxTouchPoints:_B}=DB(),Ym=IB.toLowerCase(),ef=PB.toLowerCase(),tf=/^i(os$|p)/.test(ef)||ef==="macintel"&&_B>1,o1="android",Xm=ef===o1||Ym.includes(o1),i1=!tf&&ef.startsWith("mac");ef.startsWith("win");const LB=i1||tf,jl=typeof CSS<"u"&&!!CSS.supports?.("-webkit-backdrop-filter:none"),c1=!jl&&Ym.includes("firefox");!jl&&Ym.includes("chrom");const zB=LB,$v=/jsdom|happydom/.test(Ym);function ir(e){let t=e.activeElement;for(;t?.shadowRoot?.activeElement!=null;)t=t.shadowRoot.activeElement;return t}function Ze(e,t){if(!e||!t)return!1;const a=t.getRootNode?.();if(e.contains(t))return!0;if(a&&Kc(a)){let o=t;for(;o;){if(e===o)return!0;o=o.parentNode||o.host}}return!1}function fs(e){return"composedPath"in e?e.composedPath()[0]??e.target:e.target}const qv="data-base-ui-focusable",u1="input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])",Ei="ArrowLeft",Ai="ArrowRight",Gv="ArrowUp",Qm="ArrowDown",d1="data-starting-style",BB="data-ending-style",HB={[d1]:""},UB={[BB]:""},uo={transitionStatus(e){return e==="starting"?HB:e==="ending"?UB:null}},VB="data-open",FB="data-closed",$B="data-anchor-hidden",f1="data-popup-open",qB="data-pressed",GB={[f1]:""},KB={[f1]:"",[qB]:""},YB={[VB]:""},XB={[FB]:""},QB={[$B]:""},Kv={open(e){return e?GB:null}},Yv={open(e){return e?KB:null}},Wc={open(e){return e?YB:XB},anchorHidden(e){return e?QB:null}},Xv={...Wc,...uo},Qv="data-trigger-disabled";function Zm(e,t){if(!Rt(e))return!1;const a=e;if(t.hasElement(a))return!a.hasAttribute(Qv);for(const[,o]of t.entries())if(Ze(o,a))return!o.hasAttribute(Qv);return!1}function Zv(e,t){if(t==null)return!1;if("composedPath"in e)return e.composedPath().includes(t);const a=e;return a.target!=null&&t.contains(a.target)}function ZB(e){return e.matches("html,body")}function Wm(e){return pn(e)&&e.matches(u1)}function WB(e){return e?.closest(`button,a[href],[role="button"],select,[tabindex]:not([tabindex="-1"]),${u1}`)!=null}function Wv(e){return e?e.getAttribute("role")==="combobox"&&Wm(e):!1}function JB(e){if(!e||$v)return!0;try{return e.matches(":focus-visible")}catch{return!0}}function Jm(e){return e?e.hasAttribute(qv)?e:e.querySelector(`[${qv}]`)||e:null}function fo(e,t,a=!0){return e.filter(c=>c.parentId===t).flatMap(c=>[...!a||c.context?.open?[c]:[],...fo(e,c.id,a)])}function p1(e,t){let a=[],o=e.find(c=>c.id===t)?.parentId;for(;o;){const c=e.find(d=>d.id===o);o=c?.parentId,c&&(a=a.concat(c))}return a}function Cs(e){e.preventDefault(),e.stopPropagation()}function e4(e){return"nativeEvent"in e}function eh(e){return e.pointerType===""&&e.isTrusted?!0:Xm&&e.pointerType?e.type==="click"&&e.buttons===1:e.detail===0&&!e.pointerType}function Jv(e){return $v?!1:!Xm&&e.width===0&&e.height===0||Xm&&e.width===1&&e.height===1&&e.pressure===0&&e.detail===0&&e.pointerType==="mouse"||e.width<1&&e.height<1&&e.pressure===0&&e.detail===0&&e.pointerType==="touch"}function po(e,t){const a=["mouse","pen"];return t||a.push("",void 0),a.includes(e)}function t4(e){const t=e.type;return t==="click"||t==="mousedown"||t==="keydown"||t==="keyup"}const Jc=Math.min,wl=Math.max,th=Math.round,Ri=Math.floor,Sl=e=>({x:e,y:e}),n4={left:"right",right:"left",bottom:"top",top:"bottom"};function m1(e,t,a){return wl(e,Jc(t,a))}function mo(e,t){return typeof e=="function"?e(t):e}function ra(e){return e.split("-")[0]}function Nl(e){return e.split("-")[1]}function ey(e){return e==="x"?"y":"x"}function ty(e){return e==="y"?"height":"width"}function aa(e){const t=e[0];return t==="t"||t==="b"?"y":"x"}function ny(e){return ey(aa(e))}function s4(e,t,a){a===void 0&&(a=!1);const o=Nl(e),c=ny(e),d=ty(c);let f=c==="x"?o===(a?"end":"start")?"right":"left":o==="start"?"bottom":"top";return t.reference[d]>t.floating[d]&&(f=nh(f)),[f,nh(f)]}function r4(e){const t=nh(e);return[sy(e),t,sy(t)]}function sy(e){return e.includes("start")?e.replace("start","end"):e.replace("end","start")}const h1=["left","right"],g1=["right","left"],a4=["top","bottom"],l4=["bottom","top"];function o4(e,t,a){switch(e){case"top":case"bottom":return a?t?g1:h1:t?h1:g1;case"left":case"right":return t?a4:l4;default:return[]}}function i4(e,t,a,o){const c=Nl(e);let d=o4(ra(e),a==="start",o);return c&&(d=d.map(f=>f+"-"+c),t&&(d=d.concat(d.map(sy)))),d}function nh(e){const t=ra(e);return n4[t]+e.slice(t.length)}function c4(e){var t,a,o,c;return{top:(t=e.top)!=null?t:0,right:(a=e.right)!=null?a:0,bottom:(o=e.bottom)!=null?o:0,left:(c=e.left)!=null?c:0}}function x1(e){return typeof e!="number"?c4(e):{top:e,right:e,bottom:e,left:e}}function nf(e){const{x:t,y:a,width:o,height:c}=e;return{width:o,height:c,top:a,left:t,right:t+o,bottom:a+c,x:t,y:a}}function sh(e,t,a){return Math.floor(e/t)!==a}function ho(e,t){return t<0||t>=e.length}function rh(e,t){return _s(e.current,{disabledIndices:t})}function ry(e,t){return _s(e.current,{decrement:!0,startingIndex:e.current.length,disabledIndices:t})}function _s(e,{startingIndex:t=-1,decrement:a=!1,disabledIndices:o,amount:c=1}={}){let d=t;do d+=a?-c:c;while(d>=0&&d<=e.length-1&&go(e,d,o));return d}function u4(e,{event:t,orientation:a,loopFocus:o,onLoop:c,rtl:d,cols:f,disabledIndices:p,minIndex:h,maxIndex:b,prevIndex:y,stopEvent:v=!1}){let j=y,w;if(t.key===Gv?w="up":t.key===Qm&&(w="down"),w){const k=[],S=[];let N=!1,R=0;{let _=null,z=-1;e.forEach((H,B)=>{if(H==null)return;R+=1;const L=H.closest('[role="row"]');L&&(N=!0),(L!==_||z===-1)&&(_=L,z+=1,k[z]=[]),k[z].push(B),S[B]=z})}let P=!1,T=0;if(N)for(const _ of k){const z=_.length;z>T&&(T=z),z!==f&&(P=!0)}const C=P&&R{if(!P||y===-1)return;const z=S[y];if(z==null)return;const H=k[z].indexOf(y),B=_==="up"?-1:1;for(let L=z+B,F=0;F=k.length){if(!o||C)return;if(L=L<0?k.length-1:0,c){const X=Math.min(H,k[L].length-1),K=k[L][X]??k[L][0],q=c(t,y,K);L=S[q]??L}}const $=k[L];for(let X=Math.min(H,$.length-1);X>=0;X-=1){const K=$[X];if(!go(e,K,p))return K}}},I=_=>{if(!C||y===-1)return;const z=y%E,H=_==="up"?-E:E,B=b-b%E,L=Ri(b/E)+1;for(let F=y-z+H,$=0;$b){if(!o)return;F=F<0?B:0}const X=Math.min(F+E-1,b);for(let K=Math.min(F+z,X);K>=F;K-=1)if(!go(e,K,p))return K}};v&&Cs(t);const O=D(w)??I(w);if(O!==void 0)j=O;else if(y===-1)j=w==="up"?b:h;else if(j=_s(e,{startingIndex:y,amount:E,decrement:w==="up",disabledIndices:p}),o){if(w==="up"&&(y-E_?H:H-E,c&&(j=c(t,y,j))}w==="down"&&y+E>b&&(j=_s(e,{startingIndex:y%E-E,amount:E,disabledIndices:p}),c&&(j=c(t,y,j)))}ho(e,j)&&(j=y)}if(a==="both"){const k=Ri(y/f);t.key===(d?Ei:Ai)&&(v&&Cs(t),y%f!==f-1?(j=_s(e,{startingIndex:y,disabledIndices:p}),o&&sh(j,f,k)&&(j=_s(e,{startingIndex:y-y%f-1,disabledIndices:p}),c&&(j=c(t,y,j)))):o&&(j=_s(e,{startingIndex:y-y%f-1,disabledIndices:p}),c&&(j=c(t,y,j))),sh(j,f,k)&&(j=y)),t.key===(d?Ai:Ei)&&(v&&Cs(t),y%f!==0?(j=_s(e,{startingIndex:y,decrement:!0,disabledIndices:p}),o&&sh(j,f,k)&&(j=_s(e,{startingIndex:y+(f-y%f),decrement:!0,disabledIndices:p}),c&&(j=c(t,y,j)))):o&&(j=_s(e,{startingIndex:y+(f-y%f),decrement:!0,disabledIndices:p}),c&&(j=c(t,y,j))),sh(j,f,k)&&(j=y));const S=Ri(b/f)===k;ho(e,j)&&(o&&S?(j=t.key===(d?Ai:Ei)?b:_s(e,{startingIndex:y-y%f-1,disabledIndices:p}),c&&(j=c(t,y,j))):j=y)}return j}function go(e,t,a){if(typeof a=="function"?a(t):a?.includes(t)??!1)return!0;const c=e[t];return c?!ah(c)||c.matches(":disabled")?!0:!a&&(c.hasAttribute("disabled")||c.getAttribute("aria-disabled")==="true"):!1}function d4(e){return e.visibility==="hidden"||e.visibility==="collapse"}function ah(e,t=e?jr(e):null){return!e||!e.isConnected||!t||d4(t)?!1:typeof e.checkVisibility=="function"?e.checkVisibility():t.display!=="none"&&t.display!=="contents"}const f4='a[href],button,input,select,textarea,summary,details,iframe,object,embed,[tabindex],[contenteditable]:not([contenteditable="false"]),audio[controls],video[controls]';function p4(e){const t=e.assignedSlot;if(t)return t;if(e.parentElement)return e.parentElement;const a=e.getRootNode();return Kc(a)?a.host:null}function ay(e){for(const t of Array.from(e.children))if(Fs(t)==="summary")return t;return null}function m4(e,t){const a=ay(t);return!!a&&(e===a||Ze(a,e))}function b1(e){const t=e?Fs(e):"";return e!=null&&e.matches(f4)&&(t!=="summary"||e.parentElement!=null&&Fs(e.parentElement)==="details"&&ay(e.parentElement)===e)&&(t!=="details"||ay(e)==null)&&(t!=="input"||e.type!=="hidden")}function v1(e){if(!b1(e)||!e.isConnected||e.matches(":disabled"))return!1;for(let t=e;t;t=p4(t)){const a=t!==e,o=Fs(t)==="slot";if(t.hasAttribute("inert")||a&&Fs(t)==="details"&&!t.open&&!m4(e,t)||t.hasAttribute("hidden")||!o&&!h4(t,a))return!1}return!0}function h4(e,t){const a=jr(e);return t?a.display!=="none":ah(e,a)}function y1(e){const t=e.tabIndex;if(t<0){const a=Fs(e);if(a==="details"||a==="audio"||a==="video"||pn(e)&&e.isContentEditable)return 0}return t}function ly(e){if(Fs(e)!=="input")return null;const t=e;return t.type==="radio"&&t.name!==""?t:null}function g4(e,t){const a=ly(e);if(!a)return!0;const o=t.find(c=>{const d=ly(c);return d?.name===a.name&&d.form===a.form&&d.checked});return o?o===a:t.find(c=>{const d=ly(c);return d?.name===a.name&&d.form===a.form})===a}function j1(e){if(pn(e)&&Fs(e)==="slot"){const t=e.assignedElements({flatten:!0});if(t.length>0)return t}return pn(e)&&e.shadowRoot?Array.from(e.shadowRoot.children):Array.from(e.children)}function w1(e,t){j1(e).forEach(a=>{b1(a)&&t.push(a),w1(a,t)})}function S1(e,t,a){j1(e).forEach(o=>{pn(o)&&o.matches(t)&&a.push(o),S1(o,t,a)})}function oy(e){return v1(e)&&y1(e)>=0}function N1(e){const t=[];return w1(e,t),t.filter(v1)}function sf(e){const t=N1(e);return t.filter(a=>y1(a)>=0&&g4(a,t))}function k1(e,t){const a=sf(e),o=a.length;if(o===0)return;const c=ir(Gt(e)),d=a.indexOf(c),f=d===-1?t===1?0:o-1:d+t;return a[f]}function iy(e){return k1(Gt(e).body,1)||e}function C1(e){return k1(Gt(e).body,-1)||e}function T1(e,t){if(!e)return null;const a=sf(Gt(e).body),o=a.length;if(o===0)return null;const c=a.indexOf(e);if(c===-1)return null;const d=(c+t+o)%o;return a[d]}function x4(e){return T1(e,1)}function b4(e){return T1(e,-1)}function eu(e,t){const a=t||e.currentTarget,o=e.relatedTarget;return!o||!Ze(a,o)}function v4(e){sf(e).forEach(a=>{a.dataset.tabindex=a.getAttribute("tabindex")||"",a.setAttribute("tabindex","-1")})}function E1(e){const t=[];S1(e,"[data-tabindex]",t),t.forEach(a=>{const o=a.dataset.tabindex;delete a.dataset.tabindex,o?a.setAttribute("tabindex",o):a.removeAttribute("tabindex")})}function cy(e){x.useEffect(e,Pr)}const rf=0;class la{constructor(){cn(this,"currentId",rf);cn(this,"clear",()=>{this.currentId!==rf&&(clearTimeout(this.currentId),this.currentId=rf)});cn(this,"disposeEffect",()=>this.clear)}static create(){return new la}start(t,a){this.clear(),this.currentId=setTimeout(()=>{this.currentId=rf,a()},t)}isStarted(){return this.currentId!==rf}}function er(){const e=Ps(la.create).current;return cy(e.disposeEffect),e}function y4(e,t){return e.matches(":disabled")?!1:!t||e.form===t?!0:e.form===null&&!e.hasAttribute("form")}const j4=x.createContext({disabled:!1});function A1(){return x.useContext(j4)}var uy={exports:{}},$s={};var R1;function w4(){if(R1)return $s;R1=1;var e=Xd();function t(y){var v="https://react.dev/errors/"+y;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),uy.exports=w4(),uy.exports}var Ts=M1();const lh=null;class S4{constructor(){cn(this,"callbacks",[]);cn(this,"callbacksCount",0);cn(this,"nextId",1);cn(this,"startId",1);cn(this,"isScheduled",!1);cn(this,"tick",t=>{this.isScheduled=!1;const a=this.callbacks,o=this.callbacksCount;if(this.callbacks=[],this.callbacksCount=0,this.startId=this.nextId,o>0)for(let c=0;c=this.callbacks.length||this.callbacks[a]!==null&&(this.callbacks[a]=null,this.callbacksCount-=1)}}let oh=new S4;class Ga{constructor(){cn(this,"currentId",lh);cn(this,"cancel",()=>{this.currentId!==lh&&(oh.cancel(this.currentId),this.currentId=lh)});cn(this,"disposeEffect",()=>this.cancel)}static create(){return new Ga}static request(t){return oh.request(t)}static cancel(t){return oh.cancel(t)}request(t){this.cancel(),this.currentId=oh.request(()=>{this.currentId=lh,t()})}}function tu(){const e=Ps(Ga.create).current;return cy(e.disposeEffect),e}function kl(e){return e==null?e:"current"in e?e.current:e}let ih=null;function N4(e){if(!ih){const t=[];ih=t,queueMicrotask(()=>{ih=null,Ts.flushSync(()=>{for(const a of t)a()})})}ih.push(e)}function D1(e,t=!1,a=!1){const o=tu();return Ie((c,d=null)=>{o.cancel();const f=kl(e);if(f==null)return;const p=f,h=()=>{if(!a){Ts.flushSync(c);return}N4(()=>{d?.aborted||c()})};if(typeof p.getAnimations!="function"||globalThis.BASE_UI_ANIMATIONS_DISABLED){c();return}function b(){Promise.all(p.getAnimations().map(y=>y.finished)).then(()=>{d?.aborted||h()},()=>{if(d?.aborted)return;if(p.getAnimations().some(v=>v.pending||v.playState!=="finished")){b();return}h()})}if(t){const y=d1;if(!p.hasAttribute(y)){o.request(b);return}const v=new MutationObserver(()=>{p.hasAttribute(y)||(v.disconnect(),b())});v.observe(p,{attributes:!0,attributeFilter:[y]}),d?.addEventListener("abort",()=>v.disconnect(),{once:!0});return}o.request(b)})}function oa(e){const{enabled:t=!0,open:a,ref:o,batch:c=!1,onComplete:d}=e,f=Ie(d),p=D1(o,a,c);x.useEffect(()=>{if(!t)return;const h=new AbortController;return p(f,h.signal),()=>{h.abort()}},[t,a,f,p])}function Oi(e,t=!1,a=!1,o=!1){const[c,d]=x.useState(e&&t?"idle":void 0),[f,p]=x.useState(e&&!o);return e&&!f&&(p(!0),d("starting")),!e&&f&&c!=="ending"&&!a&&d("ending"),!e&&!f&&c==="ending"&&d(void 0),Me(()=>{if(!e&&f&&c!=="ending"&&a){const h=Ga.request(()=>{d("ending")});return()=>{Ga.cancel(h)}}},[e,f,c,a]),Me(()=>{if(!e||t)return;const h=Ga.request(()=>{d(void 0)});return()=>{Ga.cancel(h)}},[t,e]),Me(()=>{if(!e||!t)return;e&&f&&c!=="idle"&&d("starting");const h=Ga.request(()=>{d("idle")});return()=>{Ga.cancel(h)}},[t,e,f,c]),{mounted:f,setMounted:p,transitionStatus:c}}function Ka({controlled:e,default:t,name:a,state:o="value"}){const{current:c}=x.useRef(e!==void 0),[d,f]=x.useState(t),p=c&&e!==void 0?e:d,h=x.useCallback(b=>{c||f(b)},[]);return[p,h]}function nu(e,t,a,o,c=!0,d){const{registerFieldControl:f}=Na(),p=Ps(()=>Symbol());Me(()=>{const h=p.current;if(!c){f(h,void 0);return}f(h,{controlRef:e,getValue:o,id:t,name:d,value:a})},[e,c,o,t,d,f,p,a]),Me(()=>{const h=p.current;return()=>{f(h,void 0)}},[f,p])}function ia(e,t){const a=x.useRef(e),o=Ie(t);Me(()=>{a.current!==e&&o(a.current),a.current=e},[e,o])}const Qn="none",xo="trigger-press",qs="trigger-hover",ch="trigger-focus",uh="outside-press",af="item-press",dy="close-press",lf="input-change",Ya="input-clear",k4="input-press",bo="focus-out",su="escape-key",fy="list-navigation",I1="keyboard",P1="pointer",_1="cancel-open",C4="disabled",py="imperative-action",T4="window-resize";function qe(e,t,a,o){let c=!1,d=!1;const f=o??mn;return{reason:e,event:t??new Event("base-ui"),cancel(){c=!0},allowPropagation(){d=!0},get isCanceled(){return c},get isPropagationAllowed(){return d},trigger:a,...f}}function E4(e,t,a){const o=a??mn;return{reason:e,event:t??new Event("base-ui"),...o}}const A4=x.forwardRef(function(t,a){const{render:o,className:c,id:d,name:f,value:p,disabled:h=!1,onValueChange:b,defaultValue:y,autoFocus:v=!1,style:j,...w}=t,{state:k,name:S,disabled:N,setTouched:R,setDirty:P,validityData:T,setFocused:C,setFilled:E,validationMode:D,validation:I}=Na(),{clearErrors:O,elementRef:_,submitCountRef:z}=Zc(),H=N||h,B=S??f,L={...k,disabled:H},{labelId:F}=yl(),$=co({id:d}),[X]=Ka({controlled:p,default:y,name:"FieldControl",state:"value"}),K=p!==void 0,q=K?X:void 0,Q=q==null?void 0:String(q),G=Ie(()=>I.inputRef.current?.value);nu(I.inputRef,$,Q,G,!H,f),Me(()=>{const M=Q??I.inputRef.current?.value;M!==void 0&&E(M!=="")},[Q,I.inputRef,E]),ia(Q,()=>{Q!==void 0&&(O(B),P(Q!==(T.initialValue??"")),I.change(Q))});const J=x.useRef(null),Y=er();return Me(()=>{v&&J.current===ir(Gt(J.current))&&C(!0)},[v,C]),yt("input",t,{ref:[a,J],state:L,props:[{id:$,disabled:H,name:B,ref:I.inputRef,"aria-labelledby":F,autoFocus:v,...K?{value:q}:{defaultValue:y},onChange(M){const U=M.currentTarget.value,Z=qe(Qn,M.nativeEvent);b?.(U,Z),!K&&(P(U!==(T.initialValue??"")),E(U!==""),!M.nativeEvent.defaultPrevented&&!Z.isCanceled&&(O(B),I.change(U)))},onFocus(){C(!0)},onBlur(M){if(R(!0),C(!1),D==="onBlur"){const U=M.currentTarget.value;I.commit(U),K&&queueMicrotask(()=>{const Z=I.inputRef.current?.value;Z!==void 0&&Z!==U&&Z!==(T.initialValue??"")&&I.commit(Z)})}},onKeyDown(M){if(M.currentTarget.tagName==="INPUT"&&M.key==="Enter"){R(!0);const U=M.currentTarget.value,Z=M.currentTarget.form;if(Z&&Z===_.current&&!M.defaultPrevented){const ae=M.currentTarget,ce=z.current;Y.start(0,()=>{z.current===ce&&I.commit(ae.value)})}else I.commit(U)}}},w,M=>I.getValidationProps(H,M)],stateAttributesMapping:Ti})}),R4=x.forwardRef(function(t,a){return s.jsx(A4,{ref:a,...t})});function Fe({className:e,type:t,ref:a,...o}){return s.jsx(R4,{ref:a,type:t,"data-slot":"input",className:Ue("h-[30px] w-full min-w-0 rounded-md border border-control-border bg-control px-2.5","text-[12.5px] text-foreground outline-none","transition-[border-color,box-shadow] duration-150 ease-out","placeholder:text-muted-foreground","hover:border-control-border-hover","focus:border-primary focus:shadow-focus","disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-surface-3 disabled:text-muted-foreground","file:inline-flex file:border-0 file:bg-transparent file:text-foreground",e),...o})}function Mi({className:e,...t}){return s.jsx("textarea",{"data-slot":"textarea",className:Ue("min-h-26 w-full resize-y rounded-md border border-control-border bg-control px-3 py-2.5","font-mono text-[12px] leading-[1.6] text-foreground outline-none","transition-[border-color,box-shadow] duration-150 ease-out","placeholder:text-muted-foreground","hover:border-control-border-hover","focus:border-primary focus:shadow-focus","disabled:cursor-not-allowed disabled:bg-surface-3 disabled:text-muted-foreground",e),...t})}function Di({className:e,...t}){return s.jsx("div",{"data-slot":"input-group",role:"group",className:Ue("group/input-group relative flex h-[30px] w-full min-w-0 items-center rounded-md border border-control-border bg-control","transition-[border-color,box-shadow] duration-150 ease-out","outline-none","has-[[data-slot=input-group-control]:focus-visible]:border-primary","has-[[data-slot=input-group-control]:focus-visible]:shadow-focus","has-[[data-slot=input-group-control]:hover:not(:focus-visible)]:border-control-border-hover","has-[>textarea]:h-auto","has-[>[data-align=inline-start]]:[&>[data-slot=input-group-control]]:pl-1.5","has-[>[data-align=inline-end]]:[&>[data-slot=input-group-control]]:pr-1.5","has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col","has-[>[data-align=block-start]]:[&>[data-slot=input-group-control]]:pb-1.5","has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col","has-[>[data-align=block-end]]:[&>[data-slot=input-group-control]]:pt-1.5",e),...t})}const O4=Qc(["flex h-auto cursor-text items-center justify-center gap-1.5 select-none","text-[12px] font-medium text-muted-foreground","group-data-[disabled=true]/input-group:opacity-50"],{variants:{align:{"inline-start":"order-first pl-[9px] has-[>button]:-ml-1","inline-end":"order-last pr-[9px] has-[>button]:-mr-1","block-start":"order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-1.5","block-end":"order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-1.5"}},defaultVariants:{align:"inline-start"}});function Ii({className:e,align:t="inline-start",...a}){return s.jsx("div",{role:"group","data-slot":"input-group-addon","data-align":t,className:Ue(O4({align:t}),e),onClick:o=>{o.target.closest("button")||o.currentTarget.parentElement?.querySelector("input")?.focus()},...a})}const M4=Qc("flex items-center shadow-none",{variants:{size:{xs:"h-6 gap-1 rounded-xs px-1.5",sm:"h-8 gap-1.5 rounded-sm px-2.5","icon-xs":"size-6 rounded-xs p-0","icon-sm":"size-8 rounded-sm p-0"}},defaultVariants:{size:"xs"}});function D4({className:e,type:t="button",variant:a="ghost",size:o="xs",...c}){return s.jsx(ne,{type:t,"data-size":o,variant:a,className:Ue(M4({size:o}),e),...c})}function Pi({className:e,...t}){return s.jsx(Fe,{"data-slot":"input-group-control",className:Ue("flex-1 rounded-none border-0 bg-transparent shadow-none focus:border-0 focus:shadow-none",e),...t})}function I4(e){return yt(e.defaultTagName??"div",e,e)}const P4=Qc("inline-flex w-fit shrink-0 items-center justify-center gap-[5px] overflow-hidden whitespace-nowrap border font-semibold",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground",secondary:"border-transparent bg-secondary text-secondary-foreground",destructive:"border-destructive-bd bg-destructive-soft text-destructive",outline:"border-control-border bg-control text-subtle",ghost:"border-transparent bg-transparent text-muted-foreground",link:"border-transparent bg-transparent text-primary underline-offset-4 hover:underline",success:"border-success-bd bg-success-soft text-success",warning:"border-warning-bd bg-warning-soft text-warning",info:"border-info-bd bg-info-soft text-info",brand:"border-primary-bd bg-primary-soft text-primary-fg",cn:"border-cn-bd bg-cn-soft text-cn",intl:"border-intl-bd bg-intl-soft text-intl",sensitive:"border-sensitive-bd bg-sensitive-soft text-sensitive"},shape:{pill:"min-h-[21px] rounded-pill px-[9px] py-px text-[11.5px]",tag:"min-h-[19px] rounded-xs px-2 py-0 text-[11px]"}},defaultVariants:{variant:"default",shape:"pill"}});function ze({className:e,variant:t,shape:a,render:o,...c}){return I4({render:o,defaultTagName:"span",props:ta({"data-slot":"badge"},c,{className:Ue(P4({variant:t,shape:a}),e)})})}function my({className:e,...t}){return s.jsx("span",{className:Ue("size-1.5 flex-none rounded-full bg-current",e),...t})}function vo(e,t){if(typeof window>"u")return e;const a=window.wbI18n;return a?a.t(e,t)??e:e}function of({className:e,...t}){return s.jsx("svg",{"data-slot":"spinner",role:"status","aria-label":vo("加载中"),viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",className:Ue("size-4 animate-spin [animation-duration:0.7s]",e),...t,children:s.jsx("path",{d:"M21 12a9 9 0 1 1-6.219-8.56"})})}function Je({className:e,...t}){return s.jsx("label",{"data-slot":"label",className:Ue("flex items-center gap-[6px] text-[11.5px] text-muted-foreground",e),...t})}const L1={clipPath:"inset(50%)",overflow:"hidden",whiteSpace:"nowrap",border:0,padding:0,width:1,height:1,margin:-1},_i={...L1,position:"fixed",top:0,left:0},ru={...L1,position:"absolute"},z1=x.createContext(void 0);function _4(){const e=x.useContext(z1);if(e===void 0)throw new Error(un(63));return e}const L4="data-checked",z4="data-unchecked",B1={...Ti,checked(e){return e?{[L4]:""}:{[z4]:""}}},B4=x.forwardRef(function(t,a){const{checked:o,className:c,defaultChecked:d,"aria-labelledby":f,form:p,id:h,inputRef:b,name:y,nativeButton:v=!1,onCheckedChange:j,readOnly:w=!1,required:k=!1,disabled:S=!1,render:N,uncheckedValue:R,value:P,style:T,...C}=t,{clearErrors:E}=Zc(),{state:D,setTouched:I,setDirty:O,validityData:_,setFilled:z,setFocused:H,validationMode:B,disabled:L,name:F,validation:$}=Na(),{labelId:X}=yl(),K=L||S,q=F??y,Q=x.useRef(null),G=sa(Q,b,$.inputRef),J=x.useRef(null),Y=ka(),re=co({id:h}),M=v?void 0:re,[U,Z]=Ka({controlled:o,default:!!d,name:"Switch",state:"checked"});nu(J,Y,U,void 0,!K,y),Me(()=>{z(U)},[U,z]),ia(U,()=>{E(q),O(U!==_.initialValue),$.change(U)});const{getButtonProps:ae,buttonRef:ce}=na({disabled:K,native:v}),W=Fv(f,X,Q,!v,M),ue={id:v?re:Y,role:"switch","aria-checked":U,"aria-readonly":w||void 0,"aria-required":k||void 0,"aria-labelledby":W,onFocus(){K||H(!0)},onBlur(){const te=Q.current;!te||K||(I(!0),H(!1),B==="onBlur"&&$.commit(te.checked))},onClick(te){if(w||K)return;te.preventDefault();const ke=Q.current;ke&&Xc(ke,te)}},ve={...$.getValidationProps(K),checked:U,disabled:K,form:p,id:M,name:q,required:k,style:q?ru:_i,tabIndex:-1,type:"checkbox","aria-hidden":!0,ref:G,onChange(te){if(te.nativeEvent.defaultPrevented)return;if(w){te.preventDefault();return}const ke=te.currentTarget.checked,le=qe(Qn,te.nativeEvent);j?.(ke,le),!le.isCanceled&&Z(ke)},onClick(te){te.stopPropagation()},onFocus(){J.current?.focus()},...P!==void 0?{value:P}:mn},ee=x.useMemo(()=>({...D,checked:U,disabled:K,readOnly:w,required:k}),[D,U,K,w,k]),he=yt("span",t,{state:ee,ref:[a,J,ce],props:[ue,C,ae,te=>$.getValidationProps(K,te)],stateAttributesMapping:B1});return s.jsxs(z1.Provider,{value:ee,children:[he,!U&&q&&R!==void 0&&s.jsx("input",{type:"hidden",form:p,name:q,value:R,disabled:K}),s.jsx("input",{...ve,suppressHydrationWarning:!0})]})}),H4=x.forwardRef(function(t,a){const{render:o,className:c,style:d,...f}=t,p=_4();return yt("span",t,{state:p,ref:a,stateAttributesMapping:B1,props:f})});function Zn({className:e,size:t="default",...a}){const o=t==="sm";return s.jsx(B4,{"data-slot":"switch",className:Ue("relative inline-flex flex-none cursor-pointer items-center rounded-pill border-0 bg-border-strong p-0","transition-colors duration-[180ms] ease-out","data-checked:bg-primary","focus-visible:shadow-focus focus-visible:outline-none","data-disabled:cursor-not-allowed data-disabled:opacity-50",o?"h-[14px] w-6":"h-[21px] w-9",e),...a,children:s.jsx(H4,{"data-slot":"switch-thumb",className:Ue("block rounded-full bg-primary-on shadow-1","transition-transform duration-[180ms] [transition-timing-function:cubic-bezier(.3,1.4,.6,1)]",o?"size-[10px] translate-x-0.5 data-checked:translate-x-[10px]":"size-[17px] translate-x-0.5 data-checked:translate-x-[15px]")})})}function U4(e){if(!e)return null;for(const t of e.elements){const a=t.tagName;if(a==="BUTTON"||a==="INPUT"){const o=t;if(o.type==="submit")return o}}return null}const V4="data-checked",F4="data-unchecked";function H1(e){return{checked(t){return e.indeterminate?{}:t?{[V4]:""}:{[F4]:""}},...Ti}}const $4=x.createContext(void 0);function q4(){return x.useContext($4)}const U1=x.createContext(void 0);function G4(){const e=x.useContext(U1);if(e===void 0)throw new Error(un(14));return e}const K4="data-parent",Y4=x.forwardRef(function(t,a){const{checked:o,className:c,defaultChecked:d=!1,"aria-labelledby":f,disabled:p=!1,form:h,id:b,indeterminate:y=!1,inputRef:v,name:j,onCheckedChange:w,parent:k=!1,readOnly:S=!1,render:N,required:R=!1,uncheckedValue:P,value:T,nativeButton:C=!1,style:E,...D}=t,{clearErrors:I}=Zc(),{disabled:O,name:_,setDirty:z,setFilled:H,setFocused:B,setTouched:L,state:F,validationMode:$,validityData:X,validation:K}=Na(),q=A1(),{labelId:Q,registerControlId:G,getDescriptionProps:J}=yl(),Y=q4(),re=Y?.allValues===void 0?void 0:Y.parent,M=re!==void 0,U=O||q.disabled||Y?.disabled||p,Z=_??j,ae=T??Z,ce=ka(),W=Y?.registerControlId!==G,ue=co({id:b||void 0,enabled:W}),ve=C?ue:ce;let ee={};M&&(k?ee=re.getParentProps():ae!==void 0&&(ee=re.getChildProps(ae)));const{checked:he=o,indeterminate:te=y,onCheckedChange:ke,...le}=ee,de=Y?.value,Se=x.useRef(null),{getButtonProps:Te,buttonRef:Le}=na({disabled:U,native:C}),Ae=Y?.validation??K,[oe,me]=Ka({controlled:ae!==void 0&&de!==void 0&&!k?de.includes(ae):he,default:d,name:"Checkbox",state:"checked"}),pe=M?!!he:oe,Ce=M&&te||y;nu(Se,ce,oe,void 0,!Y&&!U,j);const Ne=re?.registerChildId,be=x.useRef(null),De=Ae.registerInput,Ge=Y?ae:void 0,Ct=x.useCallback(it=>De(it,{controlRef:Se,value:Ge}),[De,Ge]),Tt=sa(v,be,k?void 0:Ct),Mt=Fv(f,Q,be,!C,ue);Me(()=>{be.current&&(be.current.indeterminate=Ce),Y||H(oe)},[oe,Ce,Y,H]),ia(oe,()=>{Y||(I(Z),z(oe!==X.initialValue),Ae.change(oe))});const ot=ta({checked:oe,disabled:U,form:h,name:k?void 0:Z,id:C?void 0:ue,required:R,ref:Tt,style:Z?ru:_i,tabIndex:-1,type:"checkbox","aria-hidden":!0,onChange(it){if(it.nativeEvent.defaultPrevented)return;if(S){it.preventDefault();return}const $t=it.currentTarget.checked,Vn=qe(Qn,it.nativeEvent);if(w?.($t,Vn),!Vn.isCanceled&&(ke?.($t,Vn),!Vn.isCanceled&&(me($t),ae!==void 0&&Y!==void 0&&!k&&!M))){const rn=$t?[...Y.value,ae]:Y.value.filter(nt=>nt!==ae);Y.setValue(rn,Vn)}},onClick(it){it.stopPropagation()},onFocus(){Se.current?.focus()}},T!==void 0?{value:(Y?oe&&T:T)||""}:mn,J,it=>Ae.getValidationProps(U,it));x.useEffect(()=>{if(!re||ae===void 0)return;const it=re.disabledStatesRef.current;return it.set(ae,U),()=>{it.delete(ae)}},[re,U,ae]);const Kn=x.useMemo(()=>({...F,checked:pe,disabled:U,readOnly:S,required:R,indeterminate:Ce}),[F,pe,U,S,R,Ce]),ms=H1(Kn),Yn=yt("span",t,{state:Kn,ref:[Le,Se,a],props:[{id:ve,role:"checkbox","aria-checked":Ce?"mixed":pe,"aria-readonly":S||void 0,"aria-required":R||void 0,"aria-labelledby":Mt,[K4]:k?"":void 0,onFocus(){U||B(!0)},onBlur(){const it=be.current;it&&(L(!0),B(!1),$==="onBlur"&&Ae.commit(Y?de:it.checked))},onKeyDown(it){if(it.key!=="Enter"||(it.preventBaseUIHandler(),it.defaultPrevented))return;const $t=be.current?.form??null,Vn=it.currentTarget,rn=it.nativeEvent,nt=it.preventDefault,Dt=rn.preventDefault;let qt=!1;it.preventDefault=()=>{qt=!0,nt.call(it)},rn.preventDefault=()=>{qt=!0,Dt.call(rn)},Dt.call(rn),Cn(Vn).queueMicrotask(()=>{it.preventDefault=nt,rn.preventDefault=Dt,qt||U4($t)?.click()})},onClick(it){if(S||U)return;it.preventDefault();const $t=be.current;$t&&Xc($t,it)}},D,le,Te,J,it=>Ae.getValidationProps(U,it)],stateAttributesMapping:ms}),vs=Yn.props.id;return Me(()=>{if(!(!Ne||k||ae===void 0||vs===void 0))return Ne(ae,vs)},[Ne,k,ae,vs]),s.jsxs(U1.Provider,{value:Kn,children:[Yn,!oe&&!Y&&Z&&!k&&P!==void 0&&s.jsx("input",{type:"hidden",form:h,name:Z,value:P,disabled:U}),s.jsx("input",{...ot,suppressHydrationWarning:!0})]})}),X4=x.forwardRef(function(t,a){const{render:o,className:c,style:d,keepMounted:f=!1,...p}=t,h=G4(),b=h.checked||h.indeterminate,{mounted:y,transitionStatus:v,setMounted:j}=Oi(b),w=x.useRef(null),k={...h,transitionStatus:v};oa({batch:!0,enabled:!b,open:b,ref:w,onComplete(){b||j(!1)}});const N={...H1(h),...uo},R=f||y,P=yt("span",t,{ref:[a,w],state:k,stateAttributesMapping:N,props:p});return R?P:null});function _r({className:e,...t}){return s.jsx(Y4,{"data-slot":"checkbox",className:Ue("group/checkbox relative inline-flex size-3.5 shrink-0 cursor-pointer items-center justify-center rounded-[3px] border border-control-border bg-control","outline-none transition-colors duration-150 ease-out","hover:border-control-border-hover","data-checked:border-primary data-checked:bg-primary","focus-visible:shadow-focus","data-disabled:cursor-not-allowed data-disabled:opacity-45",e),...t,children:s.jsx(X4,{"data-slot":"checkbox-indicator",className:"grid place-content-center text-primary-foreground data-unchecked:hidden",children:s.jsxs("svg",{viewBox:"0 0 12 12",className:"size-2.5","aria-hidden":"true",children:[s.jsx("path",{d:"M2 6h8",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",fill:"none",className:"hidden group-aria-[checked=indeterminate]/checkbox:block"}),s.jsx("path",{d:"M2.5 6.2 4.8 8.5 9.5 3.8",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",fill:"none",className:"group-aria-[checked=indeterminate]/checkbox:hidden"})]})})})}function hy(e){return Array.isArray(e)?e.map(t=>hy(t)).join(","):e==null?"":String(e)}const V1=new Map;function Q4(e,t){const a=JSON.stringify({locale:hy(e),options:t}),o=V1.get(a);if(o)return o;const c=new Intl.NumberFormat(e,t);return V1.set(a,c),c}function F1(e,t,a){return e==null?"":Q4(t,a).format(e)}function Li(e,t=Number.MIN_SAFE_INTEGER,a=Number.MAX_SAFE_INTEGER){return Math.max(t,Math.min(e,a))}function Z4(e,t,a){return(e-t)*100/(a-t)}const $1=x.createContext(void 0);function q1(){const e=x.useContext($1);if(e===void 0)throw new Error(un(51));return e}const W4="data-complete",J4="data-indeterminate",eH="data-progressing",gy={status(e){return e==="progressing"?{[eH]:""}:e==="complete"?{[W4]:""}:e==="indeterminate"?{[J4]:""}:null}},tH=x.forwardRef(function(t,a){const{format:o,getAriaValueText:c,locale:d,max:f=100,min:p=0,value:h,render:b,className:y,children:v,style:j,...w}=t,[k,S]=x.useState();let N="indeterminate",R=null,P=null,T="",C="indeterminate progress";if(h!=null&&Number.isFinite(h)){const _=Z4(h,p,f);R=Li(Number.isNaN(_)?0:_,0,100),P=Li(h,p,f),N=P===f?"complete":"progressing",T=o?F1(P,d,o):F1(R/100,d,{style:"percent"}),C=T}const E=x.useMemo(()=>({status:N}),[N]),D={"aria-labelledby":k,"aria-valuemax":f,"aria-valuemin":p,"aria-valuenow":P??void 0,"aria-valuetext":c?c(T,h):C,role:"progressbar",children:s.jsxs(x.Fragment,{children:[v,s.jsx("span",{role:"presentation",style:_i,children:"x"})]})},I=x.useMemo(()=>({formattedValue:T,percentageValue:R,setLabelId:S,state:E,value:h}),[T,R,S,E,h]),O=yt("div",t,{state:E,ref:a,props:[D,w],stateAttributesMapping:gy});return s.jsx($1.Provider,{value:I,children:O})}),nH=x.forwardRef(function(t,a){const{render:o,className:c,style:d,...f}=t,{state:p}=q1();return yt("div",t,{state:p,ref:a,props:f,stateAttributesMapping:gy})}),sH=x.forwardRef(function(t,a){const{render:o,className:c,style:d,...f}=t,{percentageValue:p,state:h}=q1(),b=p==null?{}:{insetInlineStart:0,height:"inherit",width:`${p}%`};return yt("div",t,{state:h,ref:a,props:[{style:b},f],stateAttributesMapping:gy})});function cf({className:e,children:t,value:a,...o}){return s.jsxs(tH,{value:a,"data-slot":"progress",className:Ue("flex w-full flex-wrap items-center gap-3",e),...o,children:[t,s.jsx(rH,{children:s.jsx(aH,{})})]})}function rH({className:e,...t}){return s.jsx(nH,{"data-slot":"progress-track",className:Ue("relative flex h-1.5 w-full items-center overflow-x-hidden overflow-y-hidden rounded-pill bg-surface-3",e),...t})}function aH({className:e,...t}){return s.jsx(sH,{"data-slot":"progress-indicator",className:Ue("h-full rounded-[inherit] bg-primary transition-[width] duration-300 ease-out",e),...t})}const xy=[];let by;function lH(){return by}function oH(e){xy.push(e)}function dh(e){const t=(a,o)=>{const c=Ps(iH).current;let d;try{by=c;for(const f of xy)f.before(c);d=e(a,o);for(const f of xy)f.after(c);c.didInitialize=!0}finally{by=void 0}return d};return t.displayName=e.displayName||e.name,t}function G1(e){return x.forwardRef(dh(e))}function iH(){return{didInitialize:!1}}const K1=x.createContext(void 0);function uf(e){const t=x.useContext(K1);if(t===void 0&&!e)throw new Error(un(72));return t}function cH(e,t){return t!=null&&!po(t)?0:typeof e=="function"?e():e}function zi(e,t,a){const o=cH(e,a);return typeof o=="number"?o:o?.[t]}function Y1(e){return typeof e=="function"?e():e}function X1(e,t){return t||e==="click"||e==="mousedown"}function uH(e){return e?.includes("mouse")&&e!=="mousedown"}const Q1=x.createContext({hasProvider:!1,timeoutMs:0,delayRef:{current:0},initialDelayRef:{current:0},timeout:new la,currentIdRef:{current:null},currentContextRef:{current:null}});function dH(e,t){e.current=t.current}function fH(e){const{children:t,delay:a,timeoutMs:o=0}=e,c=x.useRef(a),d=x.useRef(a),f=x.useRef(null),p=x.useRef(null),h=er();return Me(()=>{if(d.current=a,!f.current){c.current=a;return}c.current={open:zi(c.current,"open"),close:zi(a,"close")}},[a,f,c,d]),s.jsx(Q1.Provider,{value:x.useMemo(()=>({hasProvider:!0,delayRef:c,initialDelayRef:d,currentIdRef:f,timeoutMs:o,currentContextRef:p,timeout:h}),[o,h]),children:t})}function pH(e,t={open:!1}){const{open:a}=t,o="rootStore"in e?e.rootStore:e,c=o.useState("floatingId"),d=x.useContext(Q1),{currentIdRef:f,delayRef:p,timeoutMs:h,initialDelayRef:b,currentContextRef:y,hasProvider:v,timeout:j}=d,[w,k]=x.useState(!1),S=x.useRef(a);return Me(()=>{S.current=a},[a]),Me(()=>{function N(){y.current?.setIsInstantPhase(!1),f.current=null,y.current=null,p.current=b.current,j.clear()}if(f.current&&!a&&f.current===c){if(k(!1),h){const R=c;return j.start(h,()=>{o.select("open")||f.current&&f.current!==R||N()}),()=>{(S.current||f.current!==R)&&j.clear()}}N()}},[a,c,f,p,h,b,y,j,o]),Me(()=>{if(!a)return;const N=y.current,R=f.current;j.clear(),y.current={onOpenChange:o.setOpen,setIsInstantPhase:k},f.current=c,p.current={open:0,close:zi(b.current,"close")},R!==null&&R!==c?(k(!0),N?.setIsInstantPhase(!0),N?.onOpenChange(!1,qe(Qn))):(k(!1),N?.setIsInstantPhase(!1))},[a,c,o,f,p,b,y,j]),Me(()=>()=>{if(f.current===c){if(y.current=null,!S.current)return;f.current=null,dH(p,b),j.clear()}},[y,f,p,c,b,j]),x.useMemo(()=>({activeIdRef:f,hasProvider:v,delayRef:p,isInstantPhase:w}),[f,v,p,w])}function St(e,t,a,o){return e.addEventListener(t,a,o),()=>{e.removeEventListener(t,a,o)}}function Xa(...e){return()=>{for(let t=0;t{t.current=t.next}};return t}const au=x.forwardRef(function(t,a){const[o,c]=x.useState();Me(()=>{zB&&jl&&c("button")},[]);const d={tabIndex:0,role:o};return s.jsx("span",{...t,ref:a,style:_i,"aria-hidden":o?void 0:!0,...d,"data-base-ui-focus-guard":""})});function df(e){return`data-base-ui-${e}`}let fh=0;function ph(e,t={}){const{preventScroll:a=!1,sync:o=!1,shouldFocus:c}=t;cancelAnimationFrame(fh);function d(){c&&!c()||e?.focus({preventScroll:a})}if(o)return d(),Kt;const f=requestAnimationFrame(d);return fh=f,()=>{fh===f&&(cancelAnimationFrame(f),fh=0)}}const vy={inert:new WeakMap,"aria-hidden":new WeakMap},Z1="data-base-ui-inert",yy={inert:new WeakSet,"aria-hidden":new WeakSet};let ff=new WeakMap,jy=0;function hH(e){return yy[e]}function W1(e){return e?Kc(e)?e.host:W1(e.parentNode):null}const J1=(e,t)=>t.map(a=>{if(e.contains(a))return a;const o=W1(a);return e.contains(o)?o:null}).filter(a=>a!=null),eT=e=>{const t=new Set;return e.forEach(a=>{let o=a;for(;o&&!t.has(o);)t.add(o),o=o.parentNode}),t},tT=(e,t,a)=>{const o=[],c=d=>{!d||a.has(d)||Array.from(d.children).forEach(f=>{Fs(f)!=="script"&&(t.has(f)?c(f):o.push(f))})};return c(e),o};function gH(e,t,a,o,{mark:c=!0}){let d=null;o?d="inert":a&&(d="aria-hidden");let f=null,p=null;const h=J1(t,e),b=c?tT(t,eT(h),new Set(h)):[],y=[],v=[];if(d){const j=vy[d],w=hH(d);p=w,f=j;const k=J1(t,Array.from(t.querySelectorAll("[aria-live]"))),S=h.concat(k);tT(t,eT(S),new Set(S)).forEach(R=>{const P=R.getAttribute(d),T=P!==null&&P!=="false",C=(j.get(R)||0)+1;j.set(R,C),y.push(R),C===1&&T&&w.add(R),T||R.setAttribute(d,d==="inert"?"":"true")})}return c&&b.forEach(j=>{const w=(ff.get(j)||0)+1;ff.set(j,w),v.push(j),w===1&&j.setAttribute(Z1,"")}),jy+=1,()=>{f&&y.forEach(j=>{const k=(f.get(j)||0)-1;f.set(j,k),k||(!p?.has(j)&&d&&j.removeAttribute(d),p?.delete(j))}),c&&v.forEach(j=>{const w=(ff.get(j)||0)-1;ff.set(j,w),w||j.removeAttribute(Z1)}),jy-=1,jy||(vy.inert=new WeakMap,vy["aria-hidden"]=new WeakMap,yy.inert=new WeakSet,yy["aria-hidden"]=new WeakSet,ff=new WeakMap)}}function nT(e,t={}){const{ariaHidden:a=!1,inert:o=!1,mark:c=!0}=t,d=Gt(e[0]).body;return gH(e,d,a,o,{mark:c})}const xH=500,bH={style:{transition:"none"}},sT="data-base-ui-click-trigger",rT={fallbackAxisSide:"none"},aT={fallbackAxisSide:"end"},vH={clipPath:"inset(50%)",position:"fixed",top:0,left:0},lT=x.createContext(null),oT=()=>x.useContext(lT),yH=df("portal");function iT(e={}){const{ref:t,container:a,componentProps:o=mn,elementProps:c}=e,d=Jd(),p=oT()?.portalNode,[h,b]=x.useState(null),[y,v]=x.useState(null),j=Ie(N=>{N!==null&&v(N)}),w=x.useRef(null);Me(()=>{if(a===null){w.current&&(w.current=null,v(null),b(null));return}const N=(a&&(Tv(a)?a:a.current))??p??document.body;if(N==null){w.current&&(w.current=null,v(null),b(null));return}w.current!==N&&(w.current=N,v(null),b(N))},[a,p]);const k=yt("div",o,{ref:[t,j],props:[{id:d,[yH]:""},c]}),S=h&&k?Ts.createPortal(k,h):null;return{node:y,nodeId:x.isValidElement(k)?k.props.id:void 0,subtree:S}}const mh=x.forwardRef(function(t,a){const{render:o,className:c,style:d,children:f,container:p,portalOwnerRole:h,...b}=t,{node:y,nodeId:v,subtree:j}=iT({container:p,ref:a,componentProps:t,elementProps:b}),w=x.useRef(null),k=x.useRef(null),S=x.useRef(null),N=x.useRef(null),[R,P]=x.useState(null),T=x.useRef(!1),C=R?.modal,E=R?.open,D=!!R&&!R.modal&&R.open&&!!y;x.useEffect(()=>{if(!y||C)return;function O(_){y&&_.relatedTarget&&eu(_)&&(_.type==="focusin"?T.current&&(E1(y),T.current=!1):(v4(y),T.current=!0))}return Xa(St(y,"focusin",O,!0),St(y,"focusout",O,!0))},[y,C]),Me(()=>{!y||E!==!0||!T.current||(E1(y),T.current=!1)},[E,y]);const I=x.useMemo(()=>({beforeOutsideRef:w,afterOutsideRef:k,beforeInsideRef:S,afterInsideRef:N,portalNode:y,setFocusManagerState:P}),[y]);return s.jsxs(x.Fragment,{children:[j,s.jsxs(lT.Provider,{value:I,children:[D&&y&&s.jsx(au,{"data-type":"outside",ref:w,onFocus:O=>{if(eu(O,y))S.current?.focus();else{const _=R?R.domReference:null;C1(_)?.focus()}}}),D&&y&&s.jsx("span",{role:h,"aria-owns":v,style:vH}),y&&Ts.createPortal(f,y),D&&y&&s.jsx(au,{"data-type":"outside",ref:k,onFocus:O=>{if(eu(O,y))N.current?.focus();else{const _=R?R.domReference:null;iy(_)?.focus(),R?.closeOnFocusOut&&R?.onOpenChange(!1,qe(bo,O.nativeEvent))}}})]})]})});function cT(){const e=new Map;return{emit(t,a){e.get(t)?.forEach(o=>o(a))},on(t,a){e.has(t)||e.set(t,new Set),e.get(t).add(a)},off(t,a){e.get(t)?.delete(a)}}}class jH{constructor(){cn(this,"nodesRef",{current:[]});cn(this,"events",cT())}addNode(t){this.nodesRef.current.push(t)}removeNode(t){const a=this.nodesRef.current.findIndex(o=>o===t);a!==-1&&this.nodesRef.current.splice(a,1)}}const uT=x.createContext(null),dT=x.createContext(null),lu=()=>x.useContext(uT)?.id||null,Bi=e=>{const t=x.useContext(dT);return e??t};function wH(e){const t=Jd(),a=Bi(e),o=lu();return Me(()=>{if(!t)return;const c={id:t,parentId:o};return a?.addNode(c),()=>{a?.removeNode(c)}},[a,t,o]),t}function SH(e){const{children:t,id:a}=e,o=lu();return s.jsx(uT.Provider,{value:x.useMemo(()=>({id:a,parentId:o}),[a,o]),children:t})}function NH(e){const{children:t,externalTree:a}=e,o=Ps(()=>a??new jH).current;return s.jsx(dT.Provider,{value:o,children:t})}function kH(e,t){const a=Cn(fs(e));return e instanceof a.KeyboardEvent?"keyboard":e instanceof a.FocusEvent?t||"keyboard":"pointerType"in e?e.pointerType||"keyboard":"touches"in e?"touch":e instanceof a.MouseEvent?t||(e.detail===0?"keyboard":"mouse"):""}const fT=20;let yo=[];function wy(){yo=yo.filter(e=>e.deref()?.isConnected)}function pT(e){wy(),e&&Fs(e)!=="body"&&(yo.push(new WeakRef(e)),yo.length>fT&&(yo=yo.slice(-fT)))}function mT(){return wy(),yo[yo.length-1]?.deref()}function CH(e){return e?oy(e)?e:sf(e)[0]||e:null}function hT(e){if(e.hasAttribute("tabindex")&&!e.hasAttribute("data-tabindex")||!e.getAttribute("role")?.includes("dialog"))return;const a=N1(e).filter(c=>{const d=c.getAttribute("data-tabindex")||"";return oy(c)||c.hasAttribute("data-tabindex")&&!d.startsWith("-")}),o=e.getAttribute("tabindex");a.length===0?o!=="0"&&(e.setAttribute("tabindex","0"),e.setAttribute("data-tabindex","0")):(o!=="-1"||e.hasAttribute("data-tabindex")&&e.getAttribute("data-tabindex")!=="-1")&&(e.setAttribute("tabindex","-1"),e.setAttribute("data-tabindex","-1"))}function hh(e){const{context:t,children:a,disabled:o=!1,initialFocus:c=!0,returnFocus:d=!0,restoreFocus:f=!1,modal:p=!0,closeOnFocusOut:h=!0,openInteractionType:b="",nextFocusableElement:y,previousFocusableElement:v,beforeContentFocusGuardRef:j,externalTree:w,getInsideElements:k}=e,S="rootStore"in t?t.rootStore:t,N=S.useState("open"),R=S.useState("domReferenceElement"),P=S.useState("floatingElement"),{events:T,dataRef:C}=S.context,E=Ie(()=>C.current.floatingContext?.nodeId),D=c===!1,I=Wv(R)&&D,O=Wn(c),_=Wn(d),z=Wn(b),H=Wn(N),B=Bi(w),L=oT(),F=x.useRef(!1),$=x.useRef(!1),X=x.useRef(!1),K=x.useRef(null),q=x.useRef(""),Q=x.useRef(""),G=x.useRef(null),J=x.useRef(null),Y=sa(G,j,L?.beforeInsideRef),re=sa(J,L?.afterInsideRef),M=er(),U=er(),Z=tu(),ae=L!=null,ce=Jm(P),W=Ie((ee=ce)=>ee?sf(ee):[]),ue=Ie(()=>k?.().filter(ee=>ee!=null)??[]);x.useEffect(()=>{if(o||!p)return;function ee(te){te.key==="Tab"&&Ze(ce,ir(Gt(ce)))&&W().length===0&&!I&&Cs(te)}const he=Gt(ce);return St(he,"keydown",ee)},[o,ce,p,I,W]),x.useEffect(()=>{if(o||!N)return;const ee=Gt(ce);function he(){X.current=!1}function te(le){const de=fs(le),Se=ue(),Te=Ze(P,de)||Ze(R,de)||Ze(L?.portalNode,de)||Se.some(Le=>Le===de||Ze(Le,de));X.current=!Te,Q.current=le.pointerType||"keyboard",de?.closest(`[${sT}]`)&&($.current=!0,U.start(0,()=>{$.current=!1}))}function ke(){Q.current="keyboard"}return Xa(St(ee,"pointerdown",te,!0),St(ee,"pointerup",he,!0),St(ee,"pointercancel",he,!0),St(ee,"keydown",ke,!0),he)},[o,P,R,ce,N,L,U,ue]),x.useEffect(()=>{if(o||!h)return;const ee=Gt(ce);function he(){$.current=!0,U.start(0,()=>{$.current=!1})}function te(Se){const Te=fs(Se);oy(Te)&&(K.current=Te)}function ke(Se){const Te=Se.relatedTarget,Le=Se.currentTarget,Ae=fs(Se);p&&Te==null&&Ae!=null&&Ze(P,Ae)&&pT(Ae),queueMicrotask(()=>{const oe=E(),me=S.context.triggerElements,pe=ue(),Ce=Te?.hasAttribute(df("focus-guard"))&&[G.current,J.current,L?.beforeInsideRef.current,L?.afterInsideRef.current,L?.beforeOutsideRef.current,L?.afterOutsideRef.current,kl(v),kl(y)].includes(Te),Ne=!(Ze(R,Te)||Ze(P,Te)||Ze(Te,P)||Ze(L?.portalNode,Te)||pe.some(be=>be===Te||Ze(be,Te))||me.hasMatchingElement(be=>Ze(be,Te))||Ce||B&&(fo(B.nodesRef.current,oe).find(be=>Ze(be.context?.elements.floating,Te)||Ze(be.context?.elements.domReference,Te))||p1(B.nodesRef.current,oe).find(be=>[be.context?.elements.floating,Jm(be.context?.elements.floating)].includes(Te)||be.context?.elements.domReference===Te)));if(Le===R&&ce&&hT(ce),f&&Le!==R&&!ah(Ae)&&ir(ee)===ee.body){if(pn(ce)&&(ce.focus(),f==="popup")){Z.request(()=>{ce.focus()});return}const be=W(),De=K.current,Ge=(De&&be.includes(De)?De:null)||be[be.length-1]||ce;pn(Ge)&&Ge.focus()}if(C.current.insideReactTree){C.current.insideReactTree=!1;return}(I||!p)&&Te&&Ne&&!$.current&&(I||Te!==mT())&&(F.current=!0,S.setOpen(!1,qe(bo,Se)))})}function le(){X.current||(C.current.insideReactTree=!0,M.start(0,()=>{C.current.insideReactTree=!1}))}const de=pn(R)?R:null;if(!(!P&&!de))return Xa(de&&St(de,"focusout",ke),de&&St(de,"pointerdown",he),P&&St(P,"focusin",te),P&&St(P,"focusout",ke),P&&L&&St(P,"focusout",le,!0))},[o,R,P,ce,p,B,L,S,h,f,W,I,E,C,M,U,Z,y,v,ue]),x.useEffect(()=>{if(o||!P||!N)return;const ee=Array.from(L?.portalNode?.querySelectorAll(`[${df("portal")}]`)||[]),te=(B?p1(B.nodesRef.current,E()):[]).find(Le=>Wv(Le.context?.elements.domReference||null))?.context?.elements.domReference,le=[...[P,...ee,G.current,J.current,L?.beforeOutsideRef.current,L?.afterOutsideRef.current,...ue()],te,kl(v),kl(y),I?R:null].filter(Le=>Le!=null),de=nT(le,{ariaHidden:p||I,mark:!1}),Se=[P,...ee].filter(Le=>Le!=null),Te=nT(Se);return()=>{Te(),de()}},[N,o,R,P,p,L,I,B,E,y,v,ue]),Me(()=>{if(!N||o||!pn(ce))return;q.current="",Q.current="";const ee=Gt(ce),he=ir(ee);queueMicrotask(()=>{const te=O.current,ke=typeof te=="function"?te(z.current||""):te;if(ke===void 0||ke===!1||Ze(ce,he))return;let de=null;const Se=()=>(de==null&&(de=W(ce)),de[0]||ce);let Te;ke===!0||ke===null?Te=Se():Te=kl(ke),Te=Te||Se();const Le=Ze(ce,ir(ee));ph(Te,{preventScroll:Te===ce,shouldFocus(){if(!H.current)return!1;if(Le)return!0;const Ae=ir(ee);return!(Ae!==Te&&Ze(ce,Ae))}})})},[o,N,ce,W,O,z,H]),Me(()=>{if(o||!ce)return;const ee=Gt(ce),he=ir(ee),te=z.current==null;pT(he);function ke(de){if(de.open||(q.current=kH(de.nativeEvent,Q.current)),de.reason===qs&&de.nativeEvent.type==="mouseleave"&&(F.current=!0),de.reason===uh)if(de.nested)F.current=!1;else if(eh(de.nativeEvent)||Jv(de.nativeEvent))F.current=!1;else{let Se=!1;Gt(ce).createElement("div").focus({get preventScroll(){return Se=!0,!1}}),Se?F.current=!1:F.current=!0}}T.on("openchange",ke);function le(de){const Se=_.current;let Te=typeof Se=="function"?Se(de):Se;if(Te===void 0||Te===!1)return null;Te===null&&(Te=!0);const Le=R?.isConnected?R:null,Ae=he?.isConnected&&Fs(he)!=="body"?he:null;let oe=te?Ae||Le:Le||Ae;return oe||(oe=mT()||null),typeof Te=="boolean"?oe:kl(Te)||oe||null}return()=>{T.off("openchange",ke);const de=ir(ee),Se=ue(),Te=Ze(P,de)||Se.some(me=>me===de||Ze(me,de))||B&&fo(B.nodesRef.current,E(),!1).some(me=>Ze(me.context?.elements.floating,de)),Le=_.current,Ae=q.current,oe=le(Ae);queueMicrotask(()=>{const me=CH(oe),pe=typeof Le!="boolean";if(Le&&!F.current&&pn(me)&&(!(!pe&&me!==de&&de!==ee.body)||Te)){const Ce={preventScroll:!0};Ae==="keyboard"&&(Ce.focusVisible=!0),me.focus(Ce)}F.current=!1})}},[o,P,ce,_,z,T,B,R,E,ue]),Me(()=>{if(!jl||N||!P)return;const ee=ir(Gt(P));!pn(ee)||!Wm(ee)||Ze(P,ee)&&ee.blur()},[N,P]),Me(()=>{if(!(o||!L))return L.setFocusManagerState({modal:p,closeOnFocusOut:h,open:N,onOpenChange:S.setOpen,domReference:R}),()=>{L.setFocusManagerState(null)}},[o,L,p,N,S,h,R]),Me(()=>{if(!(o||!ce))return hT(ce),()=>{queueMicrotask(wy)}},[o,ce]);const ve=!o&&(p?!I:!0)&&(ae||p);return s.jsxs(x.Fragment,{children:[ve&&s.jsx(au,{"data-type":"inside",ref:Y,onFocus:ee=>{if(p){const he=W();ph(he[he.length-1])}else L?.portalNode&&(F.current=!1,eu(ee,L.portalNode)?iy(R)?.focus():kl(v??L.beforeOutsideRef)?.focus())}}),a,ve&&s.jsx(au,{"data-type":"inside",ref:re,onFocus:ee=>{p?ph(W()[0]):L?.portalNode&&(h&&(F.current=!0),eu(ee,L.portalNode)?C1(R)?.focus():kl(y??L.afterOutsideRef)?.focus())}})]})}function gh(e,t={}){const{enabled:a=!0,event:o="click",toggle:c=!0,ignoreMouse:d=!1,stickIfOpen:f=!0,touchOpenDelay:p=0,reason:h=xo}=t,b="rootStore"in e?e.rootStore:e,y=b.context.dataRef,v=x.useRef(void 0),j=tu(),w=er(),k=x.useMemo(()=>{function S(R,P,T,C){const E=qe(h,P,T);R&&C==="touch"&&p>0?w.start(p,()=>{b.setOpen(!0,E)}):b.setOpen(R,E)}function N(R,P,T){const C=y.current.openEvent,E=b.select("domReferenceElement")!==P;return R&&E||!R||!c?!0:C&&f?!T(C.type):!1}return{onPointerDown(R){v.current=po(R.pointerType,!0)&&Jv(R.nativeEvent)?"virtual":R.pointerType},onMouseDown(R){const P=v.current,T=R.nativeEvent,C=b.select("open");if(R.button!==0||o==="click"||po(P,!0)&&d)return;const E=N(C,R.currentTarget,O=>O==="click"||O==="mousedown"),D=fs(T);if(Wm(D)){S(E,T,D,P);return}const I=R.currentTarget;j.request(()=>{S(E,T,I,P)})},onClick(R){if(o==="mousedown-only")return;const P=v.current;if(o==="mousedown"&&P){v.current=void 0;return}if(po(P,!0)&&d)return;const T=b.select("open"),C=N(T,R.currentTarget,E=>E==="click"||E==="mousedown"||E==="keydown"||E==="keyup");S(C,R.nativeEvent,R.currentTarget,P)},onKeyDown(){v.current=void 0}}},[y,o,d,h,b,f,c,j,w,p]);return x.useMemo(()=>a?{reference:k}:mn,[a,k])}function TH(e,t){let a=null,o=null,c=!1;return{contextElement:e||void 0,getBoundingClientRect(){const d=e?.getBoundingClientRect()||{width:0,height:0,x:0,y:0},f=t.axis==="x"||t.axis==="both",p=t.axis==="y"||t.axis==="both",h=["mouseenter","mousemove"].includes(t.dataRef.current.openEvent?.type||"")&&t.pointerType!=="touch";let b=d.width,y=d.height,v=d.x,j=d.y;return a==null&&t.x&&f&&(a=d.x-t.x),o==null&&t.y&&p&&(o=d.y-t.y),v-=a||0,j-=o||0,b=0,y=0,!c||h?(b=t.axis==="y"?d.width:0,y=t.axis==="x"?d.height:0,v=f&&t.x!=null?t.x:v,j=p&&t.y!=null?t.y:j):c&&!h&&(y=t.axis==="x"?d.height:y,b=t.axis==="y"?d.width:b),c=!0,{width:b,height:y,x:v,y:j,top:j,right:v+b,bottom:j+y,left:v}}}}function gT(e){return e!=null&&e.clientX!=null}function EH(e,t={}){const{enabled:a=!0,axis:o="both"}=t,c="rootStore"in e?e.rootStore:e,d=c.useState("open"),f=c.useState("floatingElement"),p=c.useState("domReferenceElement"),h=c.context.dataRef,b=x.useRef(!1),y=x.useRef(null),[v,j]=x.useState(),[w,k]=x.useState([]),S=Ie(C=>{c.set("positionReference",C)}),N=Ie((C,E,D)=>{b.current||h.current.openEvent&&!gT(h.current.openEvent)||c.set("positionReference",TH(D??p,{x:C,y:E,axis:o,dataRef:h,pointerType:v}))}),R=Ie(C=>{d?y.current||(N(C.clientX,C.clientY,C.currentTarget),k([])):N(C.clientX,C.clientY,C.currentTarget)}),P=po(v)?f:d;x.useEffect(()=>{if(!a){S(p);return}if(!P)return;function C(){y.current?.(),y.current=null}const E=Cn(f);function D(I){const O=fs(I);Ze(f,O)?C():N(I.clientX,I.clientY)}return!h.current.openEvent||gT(h.current.openEvent)?y.current=St(E,"mousemove",D):S(p),C},[P,a,f,h,p,c,N,S,w]),x.useEffect(()=>()=>{c.set("positionReference",null)},[c]),x.useEffect(()=>{a&&!f&&(b.current=!1)},[a,f]),x.useEffect(()=>{!a&&d&&(b.current=!0)},[a,d]);const T=x.useMemo(()=>{function C(E){j(E.pointerType)}return{onPointerDown:C,onPointerEnter:C,onMouseMove:R,onMouseEnter:R}},[R]);return x.useMemo(()=>a?{reference:T,trigger:T}:{},[a,T])}function AH(){return!1}function RH(e){return{escapeKey:typeof e=="boolean"?e:e?.escapeKey??!1,outsidePress:typeof e=="boolean"?e:e?.outsidePress??!0}}function pf(e,t={}){const{enabled:a=!0,escapeKey:o=!0,outsidePress:c=!0,outsidePressEvent:d="sloppy",referencePress:f=AH,bubbles:p,externalTree:h}=t,b="rootStore"in e?e.rootStore:e,y=b.useState("open"),v=b.useState("floatingElement"),{dataRef:j,events:w}=b.context,k=Bi(h),S=Ie(typeof c=="function"?c:()=>!1),N=typeof c=="function"?S:c,R=N!==!1,P=Ie(()=>d),{escapeKey:T,outsidePress:C}=RH(p),E=x.useRef(!1),D=x.useRef(!1),I=x.useRef(!1),O=x.useRef(!1),_=x.useRef(!1),z=x.useRef(""),H=x.useRef(null),B=er(),L=er(),F=Ie(()=>{L.clear(),j.current.insideReactTree=!1}),$=Ie(M=>{const U=j.current.floatingContext?.nodeId;return(k?fo(k.nodesRef.current,U):[]).some(ae=>ae.context?.open&&!ae.context.dataRef.current[M])}),X=Ie(M=>Zv(M,b.select("floatingElement"))||Zv(M,b.select("domReferenceElement"))),K=Ie(M=>{f()&&b.setOpen(!1,qe(xo,M.nativeEvent))}),q=Ie(M=>{if(!y||!a||!o||M.key!=="Escape"||_.current||!T&&$("__escapeKeyBubbles"))return;const U=e4(M)?M.nativeEvent:M,Z=qe(su,U);b.setOpen(!1,Z),Z.isCanceled||M.preventDefault(),!T&&!Z.isPropagationAllowed&&M.stopPropagation()}),Q=Ie(()=>{j.current.insideReactTree=!0,L.start(0,F)}),G=Ie(M=>{if(!y||!a||M.button!==0)return;const U=fs(M.nativeEvent);Ze(b.select("floatingElement"),U)&&(E.current||(E.current=!0,D.current=!1))}),J=Ie(M=>{!y||!a||(M.defaultPrevented||M.nativeEvent.defaultPrevented)&&E.current&&(D.current=!0)});x.useEffect(()=>{function M(U){U.open||(O.current=!1)}return w.on("openchange",M),()=>{w.off("openchange",M)}},[w]),x.useEffect(()=>{if(!y||!a)return y||(O.current=!1),F;j.current.__escapeKeyBubbles=T,j.current.__outsidePressBubbles=C;const M=new la,U=new la,Z=Gt(v);function ae(){M.clear(),_.current=!0}function ce(){M.start(jl?5:0,()=>{_.current=!1})}function W(){I.current=!0,U.start(0,()=>{I.current=!1})}function ue(){E.current=!1,D.current=!1}function ve(){const Ne=z.current,be=Ne==="pen"||!Ne?"mouse":Ne,De=P(),Ge=typeof De=="function"?De():De;return typeof Ge=="string"?Ge:Ge[be]}function ee(Ne){const be=ve();return be==="intentional"&&Ne.type!=="click"||be==="sloppy"&&Ne.type==="click"}function he(Ne){const be=j.current.floatingContext?.nodeId,De=k&&fo(k.nodesRef.current,be).some(Ge=>Zv(Ne,Ge.context?.elements.floating));return X(Ne)||De}function te(Ne){if(ee(Ne)){Ne.type!=="click"&&!X(Ne)&&(U.clear(),I.current=!1),F();return}if(j.current.insideReactTree){F();return}const be=fs(Ne),De=`[${df("inert")}]`,Ge=Rt(be)?be.getRootNode():null,Ct=Array.from((Kc(Ge)?Ge:Gt(b.select("floatingElement"))).querySelectorAll(De)),Tt=b.context.triggerElements;if(be&&(Tt.hasElement(be)||Tt.hasMatchingElement(ot=>Ze(ot,be))))return;let Mt=Rt(be)?be:null;for(;Mt&&!ao(Mt);){const ot=lo(Mt);if(ao(ot)||!Rt(ot))break;Mt=ot}if(!(Ct.length&&Rt(be)&&!ZB(be)&&!Ze(be,b.select("floatingElement"))&&Ct.every(ot=>!Ze(Mt,ot)))){if(pn(be)&&!("touches"in Ne)){const ot=ao(be),Kn=jr(be),ms=/auto|scroll/,Yn=ot||ms.test(Kn.overflowX),vs=ot||ms.test(Kn.overflowY),it=Yn&&be.clientWidth>0&&be.scrollWidth>be.clientWidth,$t=vs&&be.clientHeight>0&&be.scrollHeight>be.clientHeight,Vn=Kn.direction==="rtl",rn=$t&&(Vn?Ne.offsetX<=be.offsetWidth-be.clientWidth:Ne.offsetX>be.clientWidth),nt=it&&Ne.offsetY>be.clientHeight;if(rn||nt)return}if(!he(Ne)){if(ve()==="intentional"){if(Ne.detail!==0&&!eh(Ne)&&!O.current)return;if(I.current){U.clear(),I.current=!1;return}}typeof N=="function"&&!N(Ne)||$("__outsidePressBubbles")||(b.setOpen(!1,qe(uh,Ne)),F())}}}function ke(Ne){ve()!=="sloppy"||Ne.pointerType==="touch"||!b.select("open")||!a||X(Ne)||te(Ne)}function le(Ne){if(ve()!=="sloppy"||!b.select("open")||!a||X(Ne))return;const be=Ne.touches[0];be&&(H.current={startTime:Date.now(),startX:be.clientX,startY:be.clientY,dismissOnTouchEnd:!1,dismissOnMouseDown:!0},B.start(1e3,()=>{H.current&&(H.current.dismissOnTouchEnd=!1,H.current.dismissOnMouseDown=!1)}))}function de(Ne,be){const De=fs(Ne);if(!De)return;const Ge=St(De,Ne.type,()=>{be(Ne),Ge()})}function Se(Ne){z.current="touch",de(Ne,le)}function Te(Ne){B.clear(),Ne.type==="pointerdown"&&(Ne.button===0&&(O.current=!0),z.current=Ne.pointerType),!(Ne.type==="mousedown"&&H.current&&!H.current.dismissOnMouseDown)&&de(Ne,be=>{be.type==="pointerdown"?ke(be):te(be)})}function Le(Ne){if(Ne.type==="pointercancel"&&(O.current=!1),!E.current)return;const be=D.current;if(ue(),ve()==="intentional"){if(Ne.type==="pointercancel"){be&&W();return}if(!he(Ne)){if(be){W();return}typeof N=="function"&&!N(Ne)||(U.clear(),I.current=!0,F())}}}function Ae(Ne){if(ve()!=="sloppy"||!H.current||X(Ne))return;const be=Ne.touches[0];if(!be)return;const De=Math.abs(be.clientX-H.current.startX),Ge=Math.abs(be.clientY-H.current.startY),Ct=Math.sqrt(De*De+Ge*Ge);Ct>5&&(H.current.dismissOnTouchEnd=!0),Ct>10&&(te(Ne),B.clear(),H.current=null)}function oe(Ne){de(Ne,Ae)}function me(Ne){ve()!=="sloppy"||!H.current||X(Ne)||(H.current.dismissOnTouchEnd&&te(Ne),B.clear(),H.current=null)}function pe(Ne){de(Ne,me)}const Ce=Xa(o&&Xa(St(Z,"keydown",q),St(Z,"compositionstart",ae),St(Z,"compositionend",ce)),R&&Xa(St(Z,"click",Te,!0),St(Z,"pointerdown",Te,!0),St(Z,"pointerup",Le,!0),St(Z,"pointercancel",Le,!0),St(Z,"mousedown",Te,!0),St(Z,"mouseup",Le,!0),St(Z,"touchstart",Se,{capture:!0,passive:!0}),St(Z,"touchmove",oe,{capture:!0,passive:!0}),St(Z,"touchend",pe,{capture:!0,passive:!0})));return()=>{Ce(),M.clear(),U.clear(),ue(),I.current=!1,F()}},[j,v,o,R,N,y,a,T,C,q,F,P,$,X,k,b,B]);const Y=x.useMemo(()=>({onKeyDown:q,onPointerDown:K,onClick:K}),[q,K]),re=x.useMemo(()=>({onKeyDown:q,onPointerDown:J,onMouseDown:J,onClickCapture:Q,onMouseDownCapture(M){Q(),G(M)},onPointerDownCapture(M){Q(),G(M)},onMouseUpCapture:Q,onTouchEndCapture:Q,onTouchMoveCapture:Q}),[q,Q,G,J]);return x.useMemo(()=>a?{reference:Y,floating:re,trigger:Y}:{},[a,Y,re])}function xT(e,t,a){let{reference:o,floating:c}=e;const d=aa(t),f=ny(t),p=ty(f),h=ra(t),b=d==="y",y=o.x+o.width/2-c.width/2,v=o.y+o.height/2-c.height/2,j=o[p]/2-c[p]/2;let w;switch(h){case"top":w={x:y,y:o.y-c.height};break;case"bottom":w={x:y,y:o.y+o.height};break;case"right":w={x:o.x+o.width,y:v};break;case"left":w={x:o.x-c.width,y:v};break;default:w={x:o.x,y:o.y}}const k=Nl(t);return k&&(w[f]+=j*(k==="end"?1:-1)*(a&&b?-1:1)),w}async function OH(e,t){var a;t===void 0&&(t={});const{x:o,y:c,platform:d,rects:f,elements:p,strategy:h}=e,{boundary:b="clippingAncestors",rootBoundary:y="viewport",elementContext:v="floating",altBoundary:j=!1,padding:w=0}=mo(t,e),k=x1(w),N=p[j?v==="floating"?"reference":"floating":v],R=nf(await d.getClippingRect({element:(a=await(d.isElement==null?void 0:d.isElement(N)))==null||a?N:N.contextElement||await(d.getDocumentElement==null?void 0:d.getDocumentElement(p.floating)),boundary:b,rootBoundary:y,strategy:h})),P=v==="floating"?{x:o,y:c,width:f.floating.width,height:f.floating.height}:f.reference,T=await(d.getOffsetParent==null?void 0:d.getOffsetParent(p.floating)),C=await(d.isElement==null?void 0:d.isElement(T))&&await(d.getScale==null?void 0:d.getScale(T))||{x:1,y:1},E=nf(d.convertOffsetParentRelativeRectToViewportRelativeRect?await d.convertOffsetParentRelativeRectToViewportRelativeRect({elements:p,rect:P,offsetParent:T,strategy:h}):P);return{top:(R.top-E.top+k.top)/C.y,bottom:(E.bottom-R.bottom+k.bottom)/C.y,left:(R.left-E.left+k.left)/C.x,right:(E.right-R.right+k.right)/C.x}}const MH=50,DH=async(e,t,a)=>{const{placement:o="bottom",strategy:c="absolute",middleware:d=[],platform:f}=a,p=f.detectOverflow?f:{...f,detectOverflow:OH},h=await(f.isRTL==null?void 0:f.isRTL(t));let b=await f.getElementRects({reference:e,floating:t,strategy:c}),{x:y,y:v}=xT(b,o,h),j=o,w=0;const k={};for(let S=0;SF<=0)){var H,B;const F=(((H=d.flip)==null?void 0:H.index)||0)+1,$=I[F];if($&&(!(v==="alignment"?P!==aa($):!1)||z.every(q=>aa(q.placement)===P?q.overflows[0]>0:!0)))return{data:{index:F,overflows:z},reset:{placement:$}};let X=(B=z.filter(K=>K.overflows[0]<=0).sort((K,q)=>K.overflows[1]-q.overflows[1])[0])==null?void 0:B.placement;if(!X)switch(w){case"bestFit":{var L;const K=(L=z.filter(q=>{if(D){const Q=aa(q.placement);return Q===P||Q==="y"}return!0}).map(q=>[q.placement,q.overflows.filter(Q=>Q>0).reduce((Q,G)=>Q+G,0)]).sort((q,Q)=>q[1]-Q[1])[0])==null?void 0:L[0];K&&(X=K);break}case"initialPlacement":X=p;break}if(c!==X)return{reset:{placement:X}}}return{}}}},bT=new Set(["left","top"]);async function PH(e,t){const{placement:a,platform:o,elements:c}=e,d=await(o.isRTL==null?void 0:o.isRTL(c.floating)),f=ra(a),p=Nl(a),h=aa(a)==="y",b=bT.has(f)?-1:1,y=d&&h?-1:1,v=mo(t,e);let{mainAxis:j,crossAxis:w,alignmentAxis:k}=typeof v=="number"?{mainAxis:v,crossAxis:0,alignmentAxis:null}:{mainAxis:v.mainAxis||0,crossAxis:v.crossAxis||0,alignmentAxis:v.alignmentAxis};return p&&typeof k=="number"&&(w=p==="end"?k*-1:k),h?{x:w*y,y:j*b}:{x:j*b,y:w*y}}const _H=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var a,o;const{x:c,y:d,placement:f,middlewareData:p}=t,h=await PH(t,e);return f===((a=p.offset)==null?void 0:a.placement)&&(o=p.arrow)!=null&&o.alignmentOffset?{}:{x:c+h.x,y:d+h.y,data:{...h,placement:f}}}}},LH=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:a,y:o,placement:c,platform:d}=t,{mainAxis:f=!0,crossAxis:p=!1,limiter:h={fn:P=>{let{x:T,y:C}=P;return{x:T,y:C}}},...b}=mo(e,t),y={x:a,y:o},v=await d.detectOverflow(t,b),j=aa(c),w=ey(j);let k=y[w],S=y[j];const N=(P,T)=>m1(T+v[P==="y"?"top":"left"],T,T-v[P==="y"?"bottom":"right"]);f&&(k=N(w,k)),p&&(S=N(j,S));const R=h.fn({...t,[w]:k,[j]:S});return{...R,data:{x:R.x-a,y:R.y-o,enabled:{[w]:f,[j]:p}}}}}},zH=function(e){return e===void 0&&(e={}),{options:e,fn(t){var a,o;const{x:c,y:d,placement:f,rects:p,middlewareData:h}=t,{offset:b=0,mainAxis:y=!0,crossAxis:v=!0}=mo(e,t),j={x:c,y:d},w=aa(f),k=ey(w);let S=j[k],N=j[w];const R=mo(b,t),P=typeof R=="number"?{mainAxis:R,crossAxis:0}:{mainAxis:(a=R.mainAxis)!=null?a:0,crossAxis:(o=R.crossAxis)!=null?o:0};if(y){const E=k==="y"?"height":"width",D=p.reference[k]-p.floating[E]+P.mainAxis,I=p.reference[k]+p.reference[E]-P.mainAxis;SI&&(S=I)}if(v){var T,C;const E=k==="y"?"width":"height",D=bT.has(ra(f)),I=p.reference[w]-p.floating[E]+(D&&((T=h.offset)==null?void 0:T[w])||0)+(D?0:P.crossAxis),O=p.reference[w]+p.reference[E]+(D?0:((C=h.offset)==null?void 0:C[w])||0)-(D?P.crossAxis:0);NO&&(N=O)}return{[k]:S,[w]:N}}}},BH=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){const{placement:a,rects:o,platform:c,elements:d}=t,{apply:f=()=>{},...p}=mo(e,t),h=await c.detectOverflow(t,p),b=ra(a),y=Nl(a),v=aa(a)==="y",{width:j,height:w}=o.floating;let k,S;b==="top"||b==="bottom"?(k=b,S=y===(await(c.isRTL==null?void 0:c.isRTL(d.floating))?"start":"end")?"left":"right"):(S=b,k=y==="end"?"top":"bottom");const N=w-h.top-h.bottom,R=j-h.left-h.right,P=Jc(w-h[k],N),T=Jc(j-h[S],R),C=t.middlewareData.shift,E=!C;let D=P,I=T;C!=null&&C.enabled.x&&(I=R),C!=null&&C.enabled.y&&(D=N),E&&!y&&(v?I=j-2*wl(h.left,h.right):D=w-2*wl(h.top,h.bottom)),await f({...t,availableWidth:I,availableHeight:D});const O=await c.getDimensions(d.floating);return j!==O.width||w!==O.height?{reset:{rects:!0}}:{}}}};function vT(e){const t=jr(e);let a=parseFloat(t.width)||0,o=parseFloat(t.height)||0;const c=pn(e),d=c?e.offsetWidth:a,f=c?e.offsetHeight:o,p=th(a)!==d||th(o)!==f;return p&&(a=d,o=f),{width:a,height:o,$:p}}function Sy(e){return Rt(e)?e:e.contextElement}function ou(e){const t=Sy(e);if(!pn(t))return Sl(1);const a=t.getBoundingClientRect(),{width:o,height:c,$:d}=vT(t);let f=(d?th(a.width):a.width)/o,p=(d?th(a.height):a.height)/c;return(!f||!Number.isFinite(f))&&(f=1),(!p||!Number.isFinite(p))&&(p=1),{x:f,y:p}}const HH=Sl(0);function yT(e){const t=Cn(e);return!Rv()||!t.visualViewport?HH:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function UH(e,t,a){return t===void 0&&(t=!1),!!a&&t&&a===Cn(e)}function Hi(e,t,a,o){t===void 0&&(t=!1),a===void 0&&(a=!1);const c=e.getBoundingClientRect(),d=Sy(e);let f=Sl(1);t&&(o?Rt(o)&&(f=ou(o)):f=ou(e));const p=UH(d,a,o)?yT(d):Sl(0);let h=(c.left+p.x)/f.x,b=(c.top+p.y)/f.y,y=c.width/f.x,v=c.height/f.y;if(d&&o){const j=Cn(d),w=Rt(o)?Cn(o):o;let k=j,S=Ov(k);for(;S&&w!==k;){const N=ou(S),R=S.getBoundingClientRect(),P=jr(S),T=R.left+(S.clientLeft+parseFloat(P.paddingLeft))*N.x,C=R.top+(S.clientTop+parseFloat(P.paddingTop))*N.y;h*=N.x,b*=N.y,y*=N.x,v*=N.y,h+=T,b+=C,k=Cn(S),S=Ov(k)}}return nf({width:y,height:v,x:h,y:b})}function xh(e,t){const a=Vm(e).scrollLeft;return t?t.left+a:Hi(bl(e)).left+a}function jT(e,t){const a=e.getBoundingClientRect(),o=a.left+t.scrollLeft-xh(e,a),c=a.top+t.scrollTop;return{x:o,y:c}}function VH(e){let{elements:t,rect:a,offsetParent:o,strategy:c}=e;const d=c==="fixed",f=bl(o),p=t?Um(t.floating):!1;if(o===f||p&&d)return a;let h={scrollLeft:0,scrollTop:0},b=Sl(1);const y=Sl(0),v=pn(o);if((v||!d)&&((Fs(o)!=="body"||Qd(f))&&(h=Vm(o)),v)){const w=Hi(o);b=ou(o),y.x=w.x+o.clientLeft,y.y=w.y+o.clientTop}const j=f&&!v&&!d?jT(f,h):Sl(0);return{width:a.width*b.x,height:a.height*b.y,x:a.x*b.x-h.scrollLeft*b.x+y.x+j.x,y:a.y*b.y-h.scrollTop*b.y+y.y+j.y}}function FH(e){return e.getClientRects?Array.from(e.getClientRects()):[]}function $H(e){const t=Vm(e),a=e.ownerDocument.body,o=wl(e.scrollWidth,e.clientWidth,a.scrollWidth,a.clientWidth),c=wl(e.scrollHeight,e.clientHeight,a.scrollHeight,a.clientHeight);let d=-t.scrollLeft+xh(e);const f=-t.scrollTop;return jr(a).direction==="rtl"&&(d+=wl(e.clientWidth,a.clientWidth)-o),{width:o,height:c,x:d,y:f}}const qH=25;function GH(e,t,a){a===void 0&&(a="viewport");const o=a==="layoutViewport",c=Cn(e),d=bl(e),f=c.visualViewport;let p=d.clientWidth,h=d.clientHeight,b=0,y=0;if(f){const j=!Rv()||t==="fixed";o?j||(b=-f.offsetLeft,y=-f.offsetTop):(p=f.width,h=f.height,j&&(b=f.offsetLeft,y=f.offsetTop))}if(xh(d)<=0){const j=d.ownerDocument,w=j.body,k=getComputedStyle(w),S=j.compatMode==="CSS1Compat"&&parseFloat(k.marginLeft)+parseFloat(k.marginRight)||0,N=Math.abs(d.clientWidth-w.clientWidth-S),R=getComputedStyle(d).scrollbarGutter==="stable both-edges"?N/2:N;R<=qH&&(p-=R)}return{width:p,height:h,x:b,y}}function KH(e,t){const a=Hi(e,!0,t==="fixed"),o=a.top+e.clientTop,c=a.left+e.clientLeft,d=ou(e),f=e.clientWidth*d.x,p=e.clientHeight*d.y,h=c*d.x,b=o*d.y;return{width:f,height:p,x:h,y:b}}function wT(e,t,a){let o;if(t==="viewport"||t==="layoutViewport")o=GH(e,a,t);else if(t==="document")o=$H(bl(e));else if(Rt(t))o=KH(t,a);else{const c=yT(e);o={x:t.x-c.x,y:t.y-c.y,width:t.width,height:t.height}}return nf(o)}function YH(e,t){const a=t.get(e);if(a)return a;let o=Yc(e,[],!1).filter(p=>Rt(p)&&Fs(p)!=="body"),c=null;const d=jr(e).position==="fixed";let f=d?lo(e):e;for(;Rt(f)&&!ao(f);){const p=jr(f),h=Av(f),b=c?c.position:d?"fixed":"";!h&&(b==="fixed"||b==="absolute"&&p.position==="static")?o=o.filter(v=>v!==f):c=p,f=lo(f)}return t.set(e,o),o}function XH(e){let{element:t,boundary:a,rootBoundary:o,strategy:c}=e;const f=[...a==="clippingAncestors"?Um(t)?[]:YH(t,this._c):[].concat(a),o],p=wT(t,f[0],c);let h=p.top,b=p.right,y=p.bottom,v=p.left;for(let j=1;j{p(!1,1e-7)},1e3)}I=!1}try{o=new IntersectionObserver(O,{...D,root:d.ownerDocument})}catch{o=new IntersectionObserver(O,D)}o.observe(e)}const h=Cn(e),b=()=>p(a);return h.addEventListener("resize",b),p(!0),()=>{h.removeEventListener("resize",b),f()}}function TT(e,t,a,o){o===void 0&&(o={});const{ancestorScroll:c=!0,ancestorResize:d=!0,elementResize:f=typeof ResizeObserver=="function",layoutShift:p=typeof IntersectionObserver=="function",animationFrame:h=!1}=o,b=Sy(e),y=c||d?[...b?Yc(b):[],...t?Yc(t):[]]:[];y.forEach(R=>{c&&R.addEventListener("scroll",a),d&&R.addEventListener("resize",a)});const v=b&&p?eU(b,a,d):null;let j=-1,w=null;f&&(w=new ResizeObserver(R=>{let[P]=R;P&&P.target===b&&w&&t&&(w.unobserve(t),cancelAnimationFrame(j),j=requestAnimationFrame(()=>{var T;(T=w)==null||T.observe(t)})),a()}),b&&!h&&w.observe(b),t&&w.observe(t));let k,S=h?Hi(e):null;h&&N();function N(){const R=Hi(e);S&&!CT(S,R)&&a(),S=R,k=requestAnimationFrame(N)}return a(),()=>{var R;y.forEach(P=>{c&&P.removeEventListener("scroll",a),d&&P.removeEventListener("resize",a)}),v?.(),(R=w)==null||R.disconnect(),w=null,h&&cancelAnimationFrame(k)}}const tU=_H,nU=LH,sU=IH,rU=BH,aU=zH,lU=(e,t,a)=>{const o=new Map,c=a??{},d={...kT,...c.platform,_c:o};return DH(e,t,{...c,platform:d})};var oU=typeof document<"u",iU=function(){},bh=oU?x.useLayoutEffect:iU;function vh(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let a,o,c;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(a=e.length,a!==t.length)return!1;for(o=a;o--!==0;)if(!vh(e[o],t[o]))return!1;return!0}if(c=Object.keys(e),a=c.length,a!==Object.keys(t).length)return!1;for(o=a;o--!==0;)if(!{}.hasOwnProperty.call(t,c[o]))return!1;for(o=a;o--!==0;){const d=c[o];if(!(d==="_owner"&&e.$$typeof)&&!vh(e[d],t[d]))return!1}return!0}return e!==e&&t!==t}function ET(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function AT(e,t){const a=ET(e);return Math.round(t*a)/a}function ky(e){const t=x.useRef(e);return bh(()=>{t.current=e}),t}function cU(e){e===void 0&&(e={});const{placement:t="bottom",strategy:a="absolute",middleware:o=[],platform:c,elements:{reference:d,floating:f}={},transform:p=!0,whileElementsMounted:h,open:b}=e,[y,v]=x.useState({x:0,y:0,strategy:a,placement:t,middlewareData:{},isPositioned:!1}),[j,w]=x.useState(o);vh(j,o)||w(o);const[k,S]=x.useState(null),[N,R]=x.useState(null),P=x.useCallback(q=>{q!==D.current&&(D.current=q,S(q))},[]),T=x.useCallback(q=>{q!==I.current&&(I.current=q,R(q))},[]),C=d||k,E=f||N,D=x.useRef(null),I=x.useRef(null),O=x.useRef(y),_=h!=null,z=ky(h),H=ky(c),B=ky(b),L=x.useCallback(()=>{if(!D.current||!I.current)return;const q={placement:t,strategy:a,middleware:j};H.current&&(q.platform=H.current),lU(D.current,I.current,q).then(Q=>{const G={...Q,isPositioned:B.current!==!1};F.current&&!vh(O.current,G)&&(O.current=G,Ts.flushSync(()=>{v(G)}))})},[j,t,a,H,B]);bh(()=>{b===!1&&O.current.isPositioned&&(O.current.isPositioned=!1,v(q=>({...q,isPositioned:!1})))},[b]);const F=x.useRef(!1);bh(()=>(F.current=!0,()=>{F.current=!1}),[]),bh(()=>{if(C&&(D.current=C),E&&(I.current=E),C&&E){if(z.current)return z.current(C,E,L);L()}},[C,E,L,z,_]);const $=x.useMemo(()=>({reference:D,floating:I,setReference:P,setFloating:T}),[P,T]),X=x.useMemo(()=>({reference:C,floating:E}),[C,E]),K=x.useMemo(()=>{const q={position:a,left:0,top:0};if(!X.floating)return q;const Q=AT(X.floating,y.x),G=AT(X.floating,y.y);return p?{...q,transform:"translate("+Q+"px, "+G+"px)",...ET(X.floating)>=1.5&&{willChange:"transform"}}:{position:a,left:Q,top:G}},[a,p,X.floating,y.x,y.y]);return x.useMemo(()=>({...y,update:L,refs:$,elements:X,floatingStyles:K}),[y,L,$,X,K])}const uU=(e,t)=>{const a=tU(e);return{name:a.name,fn:a.fn,options:[e,t]}},dU=(e,t)=>{const a=nU(e);return{name:a.name,fn:a.fn,options:[e,t]}},fU=(e,t)=>({fn:aU(e).fn,options:[e,t]}),pU=(e,t)=>{const a=sU(e);return{name:a.name,fn:a.fn,options:[e,t]}},mU=(e,t)=>{const a=rU(e);return{name:a.name,fn:a.fn,options:[e,t]}};var Cy={exports:{}},Ty={};var RT;function hU(){if(RT)return Ty;RT=1;var e=Xd();function t(v,j){return v===j&&(v!==0||1/v===1/j)||v!==v&&j!==j}var a=typeof Object.is=="function"?Object.is:t,o=e.useState,c=e.useEffect,d=e.useLayoutEffect,f=e.useDebugValue;function p(v,j){var w=j(),k=o({inst:{value:w,getSnapshot:j}}),S=k[0].inst,N=k[1];return d(function(){S.value=w,S.getSnapshot=j,h(S)&&N({inst:S})},[v,w,j]),c(function(){return h(S)&&N({inst:S}),v(function(){h(S)&&N({inst:S})})},[v]),f(w),w}function h(v){var j=v.getSnapshot;v=v.value;try{var w=j();return!a(v,w)}catch{return!0}}function b(v,j){return j()}var y=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?b:p;return Ty.useSyncExternalStore=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:y,Ty}var OT;function MT(){return OT||(OT=1,Cy.exports=hU()),Cy.exports}var Ey=MT(),Ay={exports:{}},Ry={};var DT;function gU(){if(DT)return Ry;DT=1;var e=Xd(),t=MT();function a(b,y){return b===y&&(b!==0||1/b===1/y)||b!==b&&y!==y}var o=typeof Object.is=="function"?Object.is:a,c=t.useSyncExternalStore,d=e.useRef,f=e.useEffect,p=e.useMemo,h=e.useDebugValue;return Ry.useSyncExternalStoreWithSelector=function(b,y,v,j,w){var k=d(null);if(k.current===null){var S={hasValue:!1,value:null};k.current=S}else S=k.current;k=p(function(){function R(D){if(!P){if(P=!0,T=D,D=j(D),w!==void 0&&S.hasValue){var I=S.value;if(w(I,D))return C=I}return C=D}if(I=C,o(T,D))return I;var O=j(D);return w!==void 0&&w(I,O)?(T=D,I):(T=D,C=O)}var P=!1,T,C,E=v===void 0?null:v;return[function(){return R(y())},E===null?void 0:function(){return R(E())}]},[y,v,j,w]);var N=c(b,k[0],k[1]);return f(function(){S.hasValue=!0,S.value=N},[N]),h(N),N},Ry}var IT;function xU(){return IT||(IT=1,Ay.exports=gU()),Ay.exports}var bU=xU();const vU=zv(19)?jU:wU;function PT(e,t,a,o,c){return vU(e,t,a,o,c)}function yU(e,t,a,o,c){const d=x.useCallback(()=>t(e.getSnapshot(),a,o,c),[e,t,a,o,c]);return Ey.useSyncExternalStore(e.subscribe,d,d)}oH({before(e){e.syncIndex=0,e.didInitialize||(e.syncTick=1,e.syncHooks=[],e.didChangeStore=!0,e.getSnapshot=()=>{let t=!1;for(let a=0;a0&&(e.didChangeStore&&(e.didChangeStore=!1,e.subscribe=t=>{const a=new Set;for(const c of e.syncHooks)a.add(c.store);const o=[];for(const c of a)o.push(c.subscribe(t));return()=>{for(const c of o)c()}}),Ey.useSyncExternalStore(e.subscribe,e.getSnapshot,e.getSnapshot))}});function jU(e,t,a,o,c){const d=lH();if(!d)return yU(e,t,a,o,c);const f=d.syncIndex;d.syncIndex+=1;let p;return d.didInitialize?(p=d.syncHooks[f],(p.store!==e||p.selector!==t||!Object.is(p.a1,a)||!Object.is(p.a2,o)||!Object.is(p.a3,c))&&(p.store!==e&&(d.didChangeStore=!0),p.store=e,p.selector=t,p.a1=a,p.a2=o,p.a3=c,p.value=t(e.getSnapshot(),a,o,c))):(p={store:e,selector:t,a1:a,a2:o,a3:c,value:t(e.getSnapshot(),a,o,c)},d.syncHooks.push(p)),p.value}function wU(e,t,a,o,c){return bU.useSyncExternalStoreWithSelector(e.subscribe,e.getSnapshot,e.getSnapshot,d=>t(d,a,o,c))}class SU{constructor(t){cn(this,"subscribe",t=>(this.listeners.add(t),()=>{this.listeners.delete(t)}));cn(this,"getSnapshot",()=>this.state);this.state=t,this.listeners=new Set,this.updateTick=0}static create(t){return new this(t)}setState(t){if(this.state===t)return;this.state=t,this.updateTick+=1;const a=this.updateTick;for(const o of this.listeners){if(a!==this.updateTick)return;o(t)}}update(t){for(const a in t)if(!Object.is(this.state[a],t[a])){this.setState({...this.state,...t});return}}set(t,a){Object.is(this.state[t],a)||this.setState({...this.state,[t]:a})}notifyAll(){const t={...this.state};this.setState(t)}use(t,a,o,c){return PT(this,t,a,o,c)}}class iu extends SU{constructor(t,a={},o){super(t),this.context=a,this.selectors=o}useSyncedValue(t,a){x.useDebugValue(t);const o=this;Me(()=>{o.state[t]!==a&&o.set(t,a)},[o,t,a])}useSyncedValueWithCleanup(t,a){const o=this;Me(()=>(o.state[t]!==a&&o.set(t,a),()=>{o.set(t,void 0)}),[o,t,a])}useSyncedValues(t){const a=this,o=Object.values(t);Me(()=>{a.update(t)},[a,...o])}useControlledProp(t,a){x.useDebugValue(t);const o=this,c=a!==void 0;Me(()=>{c&&!Object.is(o.state[t],a)&&o.setState({...o.state,[t]:a})},[o,t,a,c])}select(t,a,o,c){const d=this.selectors[t];return d(this.state,a,o,c)}useState(t,a,o,c){return x.useDebugValue(t),PT(this,this.selectors[t],a,o,c)}useContextCallback(t,a){x.useDebugValue(t);const o=Ie(a??Kt);this.context[t]=o}useStateSetter(t){const a=x.useRef(void 0);return a.current===void 0&&(a.current=o=>{this.set(t,o)}),a.current}observe(t,a){let o;typeof t=="function"?o=t:o=this.selectors[t];let c=o(this.state);return a(c,c,this),this.subscribe(d=>{const f=o(d);if(!Object.is(c,f)){const p=c;c=f,a(f,p,this)}})}}const NU={open:e=>e.open,transitionStatus:e=>e.transitionStatus,domReferenceElement:e=>e.domReferenceElement,referenceElement:e=>e.positionReference??e.referenceElement,floatingElement:e=>e.floatingElement,floatingId:e=>e.floatingId};class Oy extends iu{constructor(a){const{syncOnly:o,nested:c,onOpenChange:d,triggerElements:f,...p}=a;super({...p,positionReference:p.referenceElement,domReferenceElement:p.referenceElement},{onOpenChange:d,dataRef:{current:{}},events:cT(),nested:c,triggerElements:f},NU);cn(this,"syncOpenEvent",(a,o)=>{(!a||!this.state.open||o!=null&&t4(o))&&(this.context.dataRef.current.openEvent=a?o:void 0)});cn(this,"dispatchOpenChange",(a,o)=>{this.syncOpenEvent(a,o.event);const c={open:a,reason:o.reason,nativeEvent:o.event,nested:this.context.nested,triggerElement:o.trigger};this.context.events.emit("openchange",c)});cn(this,"setOpen",(a,o)=>{if(this.syncOnly){this.context.onOpenChange?.(a,o);return}this.dispatchOpenChange(a,o),this.context.onOpenChange?.(a,o)});this.syncOnly=o}}function kU(e){const{popupStore:t,treatPopupAsFloatingElement:a=!1,floatingRootContext:o,floatingId:c,nested:d,onOpenChange:f}=e,p=t.useState("open"),h=t.useState("activeTriggerElement"),b=t.useState(a?"popupElement":"positionerElement"),y=t.context.triggerElements,v=f,j=x.useRef(null);o===void 0&&j.current===null&&(j.current=new Oy({open:p,transitionStatus:void 0,referenceElement:h,floatingElement:b,triggerElements:y,onOpenChange:v,floatingId:c,syncOnly:!0,nested:d}));const w=o??j.current;return t.useSyncedValue("floatingId",c),Me(()=>{const k={open:p,floatingId:c,referenceElement:h,floatingElement:b};Rt(h)&&(k.domReferenceElement=h),w.state.positionReference===w.state.referenceElement&&(k.positionReference=h),w.update(k)},[p,c,h,b,w]),w.context.onOpenChange=v,w.context.nested=d,w}const mf={tabIndex:-1,[qv]:""};function _T(e){return t=>t==="touch"?e.current:!0}function My(e,t=!1){const a=Jd(),o=lu()!=null,c=Ps(()=>e(a,o)).current;return kU({popupStore:c,treatPopupAsFloatingElement:t,floatingRootContext:c.state.floatingRootContext,floatingId:a,nested:o,onOpenChange:c.setOpen}),c}function Dy({handle:e,store:t}){return Me(()=>e.attachStore(t),[e,t]),null}function LT(e){const t=e.context.triggerElements.size;e.select("open")&&e.state.triggerCount!==t&&e.set("triggerCount",t)}function CU(e,t){const a=x.useRef(null);return Ie(o=>{const c=a.current;if(c!==null){if(c.element===o&&c.store===t&&c.id===e)return;a.current=null;const d=c.store;d.context.triggerElements.getById(c.id)===c.element&&(d.context.triggerElements.delete(c.id),LT(d))}o!==null&&e!==void 0&&(a.current={store:t,id:e,element:o},t.context.triggerElements.add(e,o),LT(t))})}function Iy(e,t,a,o=!1){let c=e.preventUnmountingOnClose;t?c=!1:o&&(c=!0);const d=a?.id??null;let f=e.activeTriggerId,p=e.activeTriggerElement;return(d||t)&&(f=d,p=a??null),{open:t,preventUnmountingOnClose:c,activeTriggerId:f,activeTriggerElement:p}}function zT(e){let t=!1;return e.preventUnmountOnClose=()=>{t=!0},()=>t}function TU(e,t,a,o={}){const c=a.reason,d=c===qs,f=t&&c===ch,p=!t&&(c===xo||c===su),h=zT(a);if(e.context.onOpenChange?.(t,a),a.isCanceled)return;o.onBeforeDispatch?.(),e.state.floatingRootContext.dispatchOpenChange(t,a);const b=()=>{const y=Iy(e.state,t,a.trigger,h()),v={...o.extraState,...y};f?v.instantType="focus":p?v.instantType="dismiss":d&&(v.instantType=void 0),e.update(v)};d?Ts.flushSync(b):b()}function BT(e,t,a,o){const c=a.useState("isMountedByTrigger",e),d=CU(e,a),f=Ie(h=>{const b=a.select("open"),y=a.select("activeTriggerId");if(y===e){const v={activeTriggerElement:h,...b?o:null};a.update(v);return}if(y==null&&b){const v={activeTriggerId:e??null,activeTriggerElement:h,...o};a.update(v)}}),p=Ie(h=>{d(h),h&&f(h)});return Me(()=>(p(t.current),()=>p(null)),[p,t,a,e]),Me(()=>{if(c){const h={activeTriggerElement:t.current,...o};a.update(h)}},[c,a,t,...Object.values(o)]),{registerTrigger:p,isMountedByThisTrigger:c}}function Py(e,t={}){const{closeOnActiveTriggerUnmount:a=!1}=t,o=x.useRef(null),c=e.useState("open"),d=e.useState("triggerCount"),f=e.useState("activeTriggerId"),p=e.useState("activeTriggerElement");Me(()=>{if(!c){o.current=null,e.state.triggerCount!==0&&e.set("triggerCount",0);return}const h=e.context.triggerElements.size,b={};e.state.triggerCount!==h&&(b.triggerCount=h);const y=e.select("activeTriggerId");let v=null;if(y){const j=e.context.triggerElements.getById(y);if(j)o.current=y,j!==e.state.activeTriggerElement&&(b.activeTriggerElement=j);else{for(const[w,k]of e.context.triggerElements.entries())if(k===e.state.activeTriggerElement){b.activeTriggerId=w,b.activeTriggerElement=k,o.current=w;break}b.activeTriggerId===void 0&&(o.current===y?v=y:o.current=null)}}else o.current=null;if(!v&&!y&&h===1){const j=e.context.triggerElements.entries().next();if(!j.done){const[w,k]=j.value;b.activeTriggerId=w,b.activeTriggerElement=k,o.current=w}}(b.triggerCount!==void 0||b.activeTriggerId!==void 0||b.activeTriggerElement!==void 0)&&e.update(b),v&&a&&queueMicrotask(()=>{if(e.select("open")&&e.select("activeTriggerId")===v&&!e.context.triggerElements.getById(v)){const j=qe(Qn);e.setOpen(!1,j),j.isCanceled||e.update({activeTriggerId:null,activeTriggerElement:null})}})},[c,e,d,f,p,a])}function _y(e,t,a,o){const{mounted:c,setMounted:d,transitionStatus:f}=Oi(e,!1,!1,o),p=t.useState("preventUnmountingOnClose"),h=e?!1:p;t.useSyncedValues({mounted:c,transitionStatus:f,preventUnmountingOnClose:h});const b=Ie(()=>{d(!1),t.update({activeTriggerId:null,activeTriggerElement:null,mounted:!1,preventUnmountingOnClose:!1}),a?.(),t.context.onOpenChangeComplete?.(!1)});return oa({enabled:c&&!e&&!h,open:e,ref:t.context.popupRef,onComplete(){e||b()}}),{forceUnmount:b,transitionStatus:f}}function Ly(e,t){e.useSyncedValues(t),Me(()=>()=>{e.update({activeTriggerProps:mn,inactiveTriggerProps:mn,popupProps:mn})},[e])}function HT(e,t){Me(()=>{!t&&e.state.openMethod!==null&&e.set("openMethod",null)},[t,e]),Me(()=>()=>{e.state.openMethod!==null&&e.set("openMethod",null)},[e])}class yh{constructor(){this.idMap=new Map}add(t,a){this.idMap.set(t,a)}delete(t){this.idMap.delete(t)}hasElement(t){for(const a of this.idMap.values())if(a===t)return!0;return!1}hasMatchingElement(t){for(const a of this.idMap.values())if(t(a))return!0;return!1}getById(t){return this.idMap.get(t)}entries(){return this.idMap.entries()}elements(){return this.idMap.values()}get size(){return this.idMap.size}}function zy(e,t,a=!1){return{open:!1,openProp:void 0,mounted:!1,transitionStatus:void 0,floatingRootContext:new Oy({open:!1,transitionStatus:void 0,floatingElement:null,referenceElement:null,triggerElements:e,floatingId:t,syncOnly:!0,nested:a,onOpenChange:void 0}),floatingId:t,triggerCount:0,preventUnmountingOnClose:!1,payload:void 0,activeTriggerId:null,activeTriggerElement:null,triggerIdProp:void 0,popupElement:null,positionerElement:null,activeTriggerProps:mn,inactiveTriggerProps:mn,popupProps:mn}}const hf=e=>e.triggerIdProp??e.activeTriggerId,By=e=>e.openProp??e.open,UT=e=>(e.popupElement?.id??e.floatingId)||void 0;function VT(e,t){return t!==void 0&&By(e)&&hf(e)===t}function EU(e,t){return VT(e,t)?!0:t!==void 0&&By(e)&&hf(e)==null&&e.triggerCount===1}const Hy={open:By,mounted:e=>e.mounted,transitionStatus:e=>e.transitionStatus,floatingRootContext:e=>e.floatingRootContext,triggerCount:e=>e.triggerCount,preventUnmountingOnClose:e=>e.preventUnmountingOnClose,payload:e=>e.payload,activeTriggerId:hf,activeTriggerElement:e=>e.mounted?e.activeTriggerElement:null,popupId:UT,isTriggerActive:(e,t)=>t!==void 0&&hf(e)===t,isOpenedByTrigger:(e,t)=>VT(e,t),isMountedByTrigger:(e,t)=>t!==void 0&&hf(e)===t&&e.mounted,triggerProps:(e,t)=>t?e.activeTriggerProps:e.inactiveTriggerProps,triggerPopupId:(e,t)=>EU(e,t)?UT(e):void 0,popupProps:e=>e.popupProps,popupElement:e=>e.popupElement,positionerElement:e=>e.positionerElement};function FT(e){const t=x.useCallback(o=>e===void 0?Kt:e.subscribeStore(o),[e]),a=x.useCallback(()=>e===void 0?void 0:e.store,[e]);return Ey.useSyncExternalStore(t,a,()=>e?.serverStore)}function $T(e){const{open:t=!1,onOpenChange:a,elements:o={}}=e,c=Jd(),d=lu()!=null,f=Ps(()=>new Oy({open:t,transitionStatus:void 0,onOpenChange:a,referenceElement:o.reference??null,floatingElement:o.floating??null,triggerElements:new yh,floatingId:c,syncOnly:!1,nested:d})).current;return Me(()=>{const p={open:t,floatingId:c};o.reference!==void 0&&(p.referenceElement=o.reference,p.domReferenceElement=Rt(o.reference)?o.reference:null),o.floating!==void 0&&(p.floatingElement=o.floating),f.update(p)},[t,c,o.reference,o.floating,f]),f.context.onOpenChange=a,f.context.nested=d,f}function AU(e){return RU(e,e.rootContext)}function RU(e,t){const{nodeId:a,externalTree:o}=e,c=t.useState("referenceElement"),d=t.useState("floatingElement"),f=t.useState("domReferenceElement"),p=t.useState("open"),h=t.useState("floatingId"),[b,y]=x.useState(null),[v,j]=x.useState(void 0),[w,k]=x.useState(void 0),S=x.useRef(null),N=Bi(o),R=x.useMemo(()=>({reference:c,floating:d,domReference:f}),[c,d,f]),P=cU({...e,elements:{...R,...b&&{reference:b}}}),T=Rt(v)?v:null,C=w===void 0?t.state.floatingElement:w;t.useSyncedValue("referenceElement",v??null),t.useSyncedValue("domReferenceElement",v===void 0?f:T),t.useSyncedValue("floatingElement",C);const E=x.useCallback(H=>{const B=Rt(H)?{getBoundingClientRect:()=>H.getBoundingClientRect(),getClientRects:()=>H.getClientRects(),contextElement:H}:H;y(B),P.refs.setReference(B)},[P.refs]),D=x.useCallback(H=>{(Rt(H)||H===null)&&(S.current=H,j(H)),(Rt(P.refs.reference.current)||P.refs.reference.current===null||H!==null&&!Rt(H))&&P.refs.setReference(H)},[P.refs,j]),I=x.useCallback(H=>{k(H),P.refs.setFloating(H)},[P.refs]),O=x.useMemo(()=>({...P.refs,setReference:D,setFloating:I,setPositionReference:E,domReference:S}),[P.refs,D,I,E]),_=x.useMemo(()=>({...P.elements,domReference:f}),[P.elements,f]),z=x.useMemo(()=>({...P,dataRef:t.context.dataRef,open:p,onOpenChange:t.setOpen,events:t.context.events,floatingId:h,refs:O,elements:_,nodeId:a,rootStore:t}),[P,O,_,a,t,p,h]);return Me(()=>{f&&(S.current=f)},[f]),Me(()=>{t.context.dataRef.current.floatingContext=z;const H=N?.nodesRef.current.find(B=>B.id===a);H&&(H.context=z)}),x.useMemo(()=>({...P,context:z,refs:O,elements:_,rootStore:t}),[P,O,_,z,t])}const Uy=i1&&jl;function OU(e,t={}){const{enabled:a=!0,delay:o}=t,c="rootStore"in e?e.rootStore:e,{events:d,dataRef:f}=c.context,p=x.useRef(!1),h=x.useRef(null),b=x.useRef(!0),y=er();x.useEffect(()=>{const j=c.select("domReferenceElement");if(!a)return;const w=Cn(j);function k(){const R=c.select("domReferenceElement");!c.select("open")&&pn(R)&&R===ir(Gt(R))&&(p.current=!0,h.current=R)}function S(){b.current=!0}function N(){b.current=!1}return Xa(St(w,"blur",k),Uy&&St(w,"keydown",S,!0),Uy&&St(w,"pointerdown",N,!0))},[c,a]),x.useEffect(()=>{if(!a)return;function j(w){if(w.reason===xo||w.reason===su){const k=c.select("domReferenceElement");Rt(k)&&(h.current=k,p.current=!0)}}return d.on("openchange",j),()=>{d.off("openchange",j)}},[d,a,c]);const v=x.useMemo(()=>{function j(){p.current=!1,h.current=null}return{onMouseLeave(){j()},onFocus(w){const k=w.currentTarget;if(p.current){if(h.current===k)return;j()}const S=fs(w.nativeEvent);if(Rt(S)){if(Uy&&!w.relatedTarget){if(!b.current&&!Wm(S))return}else if(!JB(S))return}const N=Zm(w.relatedTarget,c.context.triggerElements),{nativeEvent:R,currentTarget:P}=w,T=typeof o=="function"?o():o;if(c.select("open")&&N||T===0||T===void 0){c.setOpen(!0,qe(ch,R,P));return}y.start(T,()=>{p.current||c.setOpen(!0,qe(ch,R,P))})},onBlur(w){j();const k=w.relatedTarget,S=w.nativeEvent,N=Rt(k)&&k.hasAttribute(df("focus-guard"))&&k.getAttribute("data-type")==="outside";y.start(0,()=>{const R=c.select("domReferenceElement"),P=ir(Gt(R));!k&&P===R||Ze(f.current.floatingContext?.refs.floating.current,P)||Ze(R,P)||N||Zm(k??P,c.context.triggerElements)||c.setOpen(!1,qe(ch,S))})}}},[f,o,c,y]);return x.useMemo(()=>a?{reference:v,trigger:v}:{},[a,v])}class Vy{constructor(){cn(this,"dispose",()=>{this.openChangeTimeout.clear(),this.restTimeout.clear()});cn(this,"disposeEffect",()=>this.dispose);this.pointerType=void 0,this.interactedInside=!1,this.handler=void 0,this.blockMouseMove=!0,this.performedPointerEventsMutation=!1,this.pointerEventsScopeElement=null,this.pointerEventsReferenceElement=null,this.pointerEventsFloatingElement=null,this.restTimeoutPending=!1,this.openChangeTimeout=new la,this.restTimeout=new la,this.handleCloseOptions=void 0}static create(){return new Vy}}const jh=new WeakMap;function wh(e){if(!e.performedPointerEventsMutation)return;const t=e.pointerEventsScopeElement;t&&jh.get(t)===e&&(e.pointerEventsScopeElement?.style.removeProperty("pointer-events"),e.pointerEventsReferenceElement?.style.removeProperty("pointer-events"),e.pointerEventsFloatingElement?.style.removeProperty("pointer-events"),jh.delete(t)),e.performedPointerEventsMutation=!1,e.pointerEventsScopeElement=null,e.pointerEventsReferenceElement=null,e.pointerEventsFloatingElement=null}function qT(e,t){const{scopeElement:a,referenceElement:o,floatingElement:c}=t,d=jh.get(a);d&&d!==e&&wh(d),wh(e),e.performedPointerEventsMutation=!0,e.pointerEventsScopeElement=a,e.pointerEventsReferenceElement=o,e.pointerEventsFloatingElement=c,jh.set(a,e),a.style.pointerEvents="none",o.style.pointerEvents="auto",c.style.pointerEvents="auto"}function Fy(e){const t=e.context.dataRef.current,a=Ps(()=>t.hoverInteractionState??Vy.create()).current;return t.hoverInteractionState||(t.hoverInteractionState=a),cy(t.hoverInteractionState.disposeEffect),t.hoverInteractionState}function GT(e,t={}){const{enabled:a=!0,closeDelay:o=0,nodeId:c}=t,d="rootStore"in e?e.rootStore:e,f=d.useState("open"),p=d.useState("floatingElement"),h=d.useState("domReferenceElement"),{dataRef:b}=d.context,y=Bi(),v=lu(),j=Fy(d),w=er(),k=Ie(()=>X1(b.current.openEvent?.type,j.interactedInside)),S=Ie(()=>uH(b.current.openEvent?.type)),N=Ie(()=>{wh(j)});Me(()=>{f||(j.pointerType=void 0,j.restTimeoutPending=!1,j.interactedInside=!1,N())},[f,j,N]),x.useEffect(()=>N,[N]),Me(()=>{if(a&&f&&j.handleCloseOptions?.blockPointerEvents&&S()&&Rt(h)&&p){const R=h,P=p,T=Gt(p),C=y?.nodesRef.current.find(O=>O.id===v)?.context?.elements.floating;C&&(C.style.pointerEvents="");const E=j.pointerEventsScopeElement!==P?j.pointerEventsScopeElement:null,D=C!==P?C:null,I=j.handleCloseOptions?.getScope?.()??E??D??R.closest("[data-rootownerid]")??T.body;return qT(j,{scopeElement:I,referenceElement:R,floatingElement:P}),()=>{N()}}},[a,f,h,p,j,S,y,v,N]),x.useEffect(()=>{if(!a)return;function R(){return!!(y&&v&&fo(y.nodesRef.current,v).length>0)}function P(O){const _=zi(o,"close",j.pointerType),z=()=>{d.setOpen(!1,qe(qs,O)),y?.events.emit("floating.closed",O)};_?j.openChangeTimeout.start(_,z):(j.openChangeTimeout.clear(),z())}function T(O){const _=fs(O);if(!WB(_)){j.interactedInside=!1;return}j.interactedInside=_?.closest("[aria-haspopup]")!=null}function C(){j.openChangeTimeout.clear(),w.clear(),y?.events.off("floating.closed",D),N()}function E(O){if(R()&&y){y.events.on("floating.closed",D);return}if(Zm(O.relatedTarget,d.context.triggerElements))return;const _=b.current.floatingContext?.nodeId??c,z=O.relatedTarget;if(!(y&&_&&Rt(z)&&fo(y.nodesRef.current,_,!1).some(B=>Ze(B.context?.elements.floating,z)))){if(j.handler){j.handler(O);return}N(),S()&&!k()&&P(O)}}function D(O){!y||!v||R()||w.start(0,()=>{y.events.off("floating.closed",D),d.setOpen(!1,qe(qs,O)),y.events.emit("floating.closed",O)})}const I=p;return Xa(I&&St(I,"mouseenter",C),I&&St(I,"mouseleave",E),I&&St(I,"pointerdown",T,!0),()=>{y?.events.off("floating.closed",D)})},[a,p,d,b,o,c,S,k,N,j,y,v,w])}const MU={current:null};function KT(e,t={}){const{enabled:a=!0,delay:o=0,handleClose:c=null,mouseOnly:d=!1,restMs:f=0,move:p=!0,triggerElementRef:h=MU,externalTree:b,isActiveTrigger:y=!0,getHandleCloseContext:v,isClosing:j,shouldOpen:w,guardStaleOpen:k=!1}=t,S="rootStore"in e?e.rootStore:e,{dataRef:N,events:R}=S.context,P=Bi(b),T=Fy(S),C=x.useRef(!1),E=Wn(c),D=Wn(o),I=Wn(f),O=Wn(a),_=Wn(w),z=Wn(j),H=Ie(()=>X1(N.current.openEvent?.type,T.interactedInside)),B=Ie(()=>_.current?.()!==!1),L=Ie((X,K,q)=>{const Q=S.context.triggerElements;if(Q.hasElement(K))return!X||!Ze(X,K);if(!Rt(q))return!1;const G=q;return Q.hasMatchingElement(J=>Ze(J,G))&&(!X||!Ze(X,G))}),F=Ie(()=>{if(!T.handler)return;Gt(S.select("domReferenceElement")).removeEventListener("mousemove",T.handler),T.handler=void 0}),$=Ie(()=>{wh(T)});return y&&(T.handleCloseOptions=c?.__options),x.useEffect(()=>F,[F]),x.useEffect(()=>{if(!a)return;function X(K){K.open?C.current=!1:(C.current=K.reason===qs,F(),T.openChangeTimeout.clear(),T.restTimeout.clear(),T.blockMouseMove=!0,T.restTimeoutPending=!1)}return R.on("openchange",X),()=>{R.off("openchange",X)}},[a,R,T,F]),x.useEffect(()=>{if(!a)return;function X(Y,re=!0){const M=zi(D.current,"close",T.pointerType);M?T.openChangeTimeout.start(M,()=>{S.setOpen(!1,qe(qs,Y)),P?.events.emit("floating.closed",Y)}):re&&(T.openChangeTimeout.clear(),S.setOpen(!1,qe(qs,Y)),P?.events.emit("floating.closed",Y))}const K=h.current??(y?S.select("domReferenceElement"):null);if(!Rt(K))return;function q(Y){if(T.openChangeTimeout.clear(),T.blockMouseMove=!1,d&&!po(T.pointerType))return;const re=Y1(I.current),M=zi(D.current,"open",T.pointerType),U=fs(Y),Z=Y.currentTarget??null,ae=S.select("domReferenceElement");let ce=Z;if(Rt(U)&&!S.context.triggerElements.hasElement(U)){for(const de of S.context.triggerElements.elements())if(Ze(de,U)){ce=de;break}}Rt(Z)&&Rt(ae)&&!S.context.triggerElements.hasElement(Z)&&Ze(Z,ae)&&(ce=ae);const W=ce==null?!1:L(ae,ce,U),ue=S.select("open"),ve=z.current?.()??S.select("transitionStatus")==="ending",ee=!ue&&ve&&C.current,he=!W&&Rt(ce)&&Rt(ae)&&Ze(ae,ce)&&ee,te=re>0&&!M,ke=W&&(ue||ee)||he,le=!ue||W;if(ke){B()&&S.setOpen(!0,qe(qs,Y,ce));return}te||(M?T.openChangeTimeout.start(M,()=>{le&&B()&&S.setOpen(!0,qe(qs,Y,ce))}):le&&B()&&S.setOpen(!0,qe(qs,Y,ce)))}function Q(Y){if(H()){$();return}F();const re=S.select("domReferenceElement"),M=Gt(re);T.restTimeout.clear(),T.restTimeoutPending=!1;const U=N.current.floatingContext??v?.();if(Zm(Y.relatedTarget,S.context.triggerElements))return;if(E.current&&U){S.select("open")||T.openChangeTimeout.clear();const ae=h.current;T.handler=E.current({...U,tree:P,x:Y.clientX,y:Y.clientY,onClose(){$(),F(),O.current&&!H()&&ae===S.select("domReferenceElement")&&X(Y,!0)}}),M.addEventListener("mousemove",T.handler),T.handler(Y);return}(T.pointerType!=="touch"||!Ze(S.select("floatingElement"),Y.relatedTarget))&&X(Y)}function G(Y){Ze(K,Y.relatedTarget)||(T.openChangeTimeout.clear(),T.restTimeout.clear(),T.restTimeoutPending=!1)}const J=k?St(K,"mouseout",G):void 0;return p?Xa(St(K,"mousemove",q,{once:!0}),St(K,"mouseenter",q),St(K,"mouseleave",Q),J):Xa(St(K,"mouseenter",q),St(K,"mouseleave",Q),J)},[F,$,N,D,S,a,E,T,y,L,H,d,p,I,h,P,O,v,z,B,k]),x.useMemo(()=>{if(!a)return;function X(K){T.pointerType=K.pointerType}return{onPointerDown:X,onPointerEnter:X,onMouseMove(K){const{nativeEvent:q}=K,Q=K.currentTarget,G=S.select("domReferenceElement"),J=S.select("open"),Y=L(G,Q,K.target);if(d&&!po(T.pointerType))return;if(J&&Y&&T.handleCloseOptions?.blockPointerEvents){const U=S.select("floatingElement");if(U){const Z=T.handleCloseOptions?.getScope?.()??Q.ownerDocument.body;qT(T,{scopeElement:Z,referenceElement:Q,floatingElement:U})}}const re=Y1(I.current);if(J&&!Y||re===0||!Y&&T.restTimeoutPending&&K.movementX**2+K.movementY**2<2)return;T.restTimeout.clear();function M(){if(T.restTimeoutPending=!1,H())return;const U=S.select("open");!T.blockMouseMove&&(!U||Y)&&B()&&S.setOpen(!0,qe(qs,q,Q))}T.pointerType==="touch"?Ts.flushSync(()=>{M()}):Y&&J?M():(T.restTimeoutPending=!0,T.restTimeout.start(re,M))}}},[a,T,H,L,d,S,I,B])}const DU="Escape";function YT(e){return jl&&e.movementX===0&&e.movementY===0}function Sh(e,t,a){switch(e){case"vertical":return t;case"horizontal":return a;default:return t||a}}function Nh(e,t){return Sh(t,e===Gv||e===Qm,e===Ei||e===Ai)}function $y(e,t,a){return Sh(t,e===Qm,a?e===Ei:e===Ai)||e==="Enter"||e===" "||e===""}function IU(e,t,a){return Sh(t,a?e===Ei:e===Ai,e===Qm)}function PU(e,t,a,o){const c=a?e===Ai:e===Ei,d=e===Gv;return t==="both"||t==="horizontal"&&o?e===DU:Sh(t,c,d)}function XT(e,t){const{listRef:a,activeIndex:o,onNavigate:c=()=>{},enabled:d=!0,selectedIndex:f=null,allowEscape:p=!1,loopFocus:h=!1,nested:b=!1,rtl:y=!1,virtual:v=!1,focusItemOnOpen:j="auto",focusItemOnHover:w=!0,openOnArrowKeyDown:k=!0,disabledIndices:S=void 0,orientation:N="vertical",parentOrientation:R,id:P,resetOnPointerLeave:T=!0,externalTree:C,grid:E}=t,D=E!=null,I="rootStore"in e?e.rootStore:e,O=I.useState("open"),_=I.useState("floatingElement"),z=I.useState("domReferenceElement"),H=I.context.dataRef,B=Jm(_),L=Wv(z),F=Wn(B),$=lu(),X=Bi(C),K=x.useRef(j),q=x.useRef(f??-1),Q=x.useRef(null),G=x.useRef(!0),J=Ie(pe=>{c(q.current===-1?null:q.current,pe)}),Y=x.useRef(!!_),re=x.useRef(O),M=x.useRef(!1),U=x.useRef(!1),Z=x.useRef(null),ae=Wn(S),ce=Wn(O),W=Wn(f),ue=Wn(T),ve=tu(),ee=tu(),he=Ie(()=>{function pe(De){v?X?.events.emit("virtualfocus",De):Z.current=ph(De,{sync:M.current,preventScroll:!0})}const Ce=a.current[q.current],Ne=U.current;Ce&&pe(Ce),(M.current?De=>De():De=>ve.request(De))(()=>{const De=a.current[q.current]||Ce;if(!De)return;Ce||pe(De),Te&&(Ne||!G.current)&&De.scrollIntoView?.({block:"nearest",inline:"nearest"})})});Me(()=>{H.current.orientation=N},[H,N]),Me(()=>{d&&(O&&_?(q.current=f??-1,K.current&&f!=null&&(U.current=!0,J())):Y.current&&(q.current=-1,J()))},[d,O,_,f,J]),Me(()=>{if(d){if(!O){M.current=!1;return}if(_)if(o==null){if(M.current=!1,W.current!=null)return;if(Y.current&&(q.current=-1,he()),(!re.current||!Y.current)&&K.current&&(Q.current!=null||K.current===!0&&Q.current==null)){let pe=0;const Ce=()=>{a.current[0]==null?(pe<2&&(pe?be=>ee.request(be):queueMicrotask)(Ce),pe+=1):(q.current=Q.current==null||$y(Q.current,N,y)||b?rh(a):ry(a),Q.current=null,J())};Ce()}}else ho(a.current,o)||(q.current=o,he(),U.current=!1)}},[d,O,_,o,W,b,a,N,y,J,he,ee]),Me(()=>{if(!d||_||!X||v||!Y.current)return;const pe=X.nodesRef.current,Ce=pe.find(De=>De.id===$)?.context?.elements.floating,Ne=ir(Gt(z??Ce??null)),be=pe.some(De=>De.context&&Ze(De.context.elements.floating,Ne));Ce&&!be&&G.current&&Ce.focus({preventScroll:!0})},[d,_,z,X,$,v]),Me(()=>{re.current=O,Y.current=!!_}),Me(()=>{O||(Q.current=null,K.current=j)},[O,j]);const te=o!=null,ke=Ie(pe=>{if(!ce.current)return;const Ce=a.current.indexOf(pe.currentTarget);Ce!==-1&&(q.current!==Ce||o!==Ce)&&(q.current=Ce,J(pe))}),le=Ie(()=>R??X?.nodesRef.current.find(pe=>pe.id===$)?.context?.dataRef?.current.orientation),de=Ie(()=>rh(a,ae.current)),Se=Ie(pe=>{if(G.current=!1,M.current=!0,pe.which===229||!ce.current&&pe.currentTarget===F.current)return;if(b&&PU(pe.key,N,y,D)){Nh(pe.key,le())||Cs(pe),I.setOpen(!1,qe(fy,pe.nativeEvent)),pn(z)&&(v?X?.events.emit("virtualfocus",z):z.focus());return}const Ce=q.current,Ne=rh(a,S),be=ry(a,S);if(L||(pe.key==="Home"&&(Cs(pe),q.current=Ne,J(pe)),pe.key==="End"&&(Cs(pe),q.current=be,J(pe))),E!=null){const De=E(pe,q.current,a,N,h,y,S,Ne,be);if(De!=null&&(q.current=De,J(pe)),N==="both")return}if(Nh(pe.key,N)){if(Cs(pe),O&&!v&&ir(pe.currentTarget.ownerDocument)===pe.currentTarget){q.current=$y(pe.key,N,y)?Ne:be,J(pe);return}$y(pe.key,N,y)?h?Ce>=be?p&&Ce!==a.current.length?q.current=-1:(M.current=!1,q.current=Ne):q.current=_s(a.current,{startingIndex:Ce,disabledIndices:S}):q.current=Math.min(be,_s(a.current,{startingIndex:Ce,disabledIndices:S})):h?Ce<=Ne?p&&Ce!==-1?q.current=a.current.length:(M.current=!1,q.current=be):q.current=_s(a.current,{startingIndex:Ce,decrement:!0,disabledIndices:S}):q.current=Math.max(Ne,_s(a.current,{startingIndex:Ce,decrement:!0,disabledIndices:S})),ho(a.current,q.current)&&(q.current=-1),J(pe)}}),Te=x.useMemo(()=>({onFocus(Ce){M.current=!0,ke(Ce)},onClick:({currentTarget:Ce})=>Ce.focus({preventScroll:!0}),onMouseMove(Ce){YT(Ce)||(M.current=!0,U.current=!1,w&&ke(Ce))},onPointerLeave(Ce){if(!ce.current||!G.current||Ce.pointerType==="touch")return;M.current=!0;const Ne=Ce.relatedTarget;if(!(!w||a.current.includes(Ne))&&ue.current&&(Z.current?.(),Z.current=null,q.current=-1,J(Ce),!v)){const be=F.current,De=ir(Gt(be));be&&Ze(be,De)&&be.focus({preventScroll:!0})}}}),[ke,ce,F,w,a,J,ue,v]),Le=x.useMemo(()=>v&&O&&te&&{"aria-activedescendant":`${P}-${o}`},[v,O,te,P,o]),Ae=x.useMemo(()=>({...L?{}:Le,onKeyDown(pe){if(pe.key==="Tab"&&pe.shiftKey&&O&&!v){const Ce=fs(pe.nativeEvent);if(Ce&&!Ze(F.current,Ce))return;Cs(pe),I.setOpen(!1,qe(bo,pe.nativeEvent)),pn(z)&&z.focus();return}Se(pe)},onPointerMove(pe){YT(pe)||(G.current=!0)}}),[Le,Se,F,L,I,O,v,z]),oe=x.useMemo(()=>{function pe(be){I.setOpen(!0,qe(fy,be.nativeEvent,be.currentTarget))}function Ce(be){j==="auto"&&eh(be.nativeEvent)&&(K.current=!v)}function Ne(be){K.current=j,j==="auto"&&Jv(be.nativeEvent)&&(K.current=!0)}return{onKeyDown(be){const De=I.select("open");G.current=!1;const Ge=be.key.startsWith("Arrow"),Ct=IU(be.key,le(),y),Tt=Nh(be.key,N),Mt=(b?Ct:Tt)||be.key==="Enter"||be.key.trim()==="";if(v&&De)return Se(be);if(!(!De&&!k&&Ge)){if(Mt){const ot=Nh(be.key,le());Q.current=b&&ot?null:be.key}if(b){Ct&&(Cs(be),De?(q.current=de(),J(be)):pe(be));return}Tt&&(W.current!=null&&(q.current=W.current),Cs(be),!De&&k?pe(be):Se(be),De&&J(be))}},onFocus(be){I.select("open")&&!v&&(q.current=-1,J(be))},onPointerDown:Ne,onPointerEnter:Ne,onMouseDown:Ce,onClick:Ce}},[Se,j,de,b,J,I,k,N,le,y,W,v]),me=x.useMemo(()=>({...Le,...oe}),[Le,oe]);return x.useMemo(()=>d?{reference:me,floating:Ae,item:Te,trigger:oe}:{},[d,me,Ae,oe,Te])}function QT(e,t){const{listRef:a,elementsRef:o,activeIndex:c,onMatch:d,disabledIndices:f,onTyping:p,enabled:h=!0,resetMs:b=750,selectedIndex:y=null}=t,v="rootStore"in e?e.rootStore:e,j=v.useState("open"),w=er(),k=x.useRef(""),S=x.useRef(y??c??-1),N=x.useRef(null),R=Ie(C=>{function E(F){return o?.current[F]}function D(F){const $=E(F);return $&&!ah($)||$?.matches(":disabled")?!1:f==null||!go(Pr,F,f)}function I(F,$,X=0){if(F.length===0)return-1;const K=(X%F.length+F.length)%F.length,q=$.toLowerCase();for(let Q=0;Q0&&C.key===" "&&(Cs(C),p?.(!0)),k.current.length>0&&k.current[0]!==" "&&I(O,k.current)===-1&&C.key!==" "&&p?.(!1),O==null||C.key.length!==1||C.ctrlKey||C.metaKey||C.altKey)return;j&&C.key!==" "&&(Cs(C),p?.(!0));const _=k.current==="";_&&(S.current=y??c??-1),O.every((F,$)=>F&&D($)?F[0]?.toLowerCase()!==F[1]?.toLowerCase():!0)&&k.current===C.key&&(k.current="",S.current=N.current),k.current+=C.key,w.start(b,()=>{k.current="",S.current=N.current,p?.(!1)});const B=((_?y??c??-1:S.current)??0)+1,L=I(O,k.current,B);L!==-1?(d?.(L),N.current=L):C.key!==" "&&(k.current="",p?.(!1))}),P=Ie(C=>{const E=C.relatedTarget,D=v.select("domReferenceElement"),I=v.select("floatingElement");Ze(D,E)||Ze(I,E)||(w.clear(),k.current="",S.current=N.current,p?.(!1))});Me(()=>{!j&&y!==null||(w.clear(),N.current=null,k.current!==""&&(k.current=""))},[j,y,w]);const T=x.useMemo(()=>({onKeyDown:R,onBlur:P}),[R,P]);return x.useMemo(()=>h?{reference:T,floating:T}:{},[h,T])}const ZT=.1,_U=ZT*ZT,yn=.5;function kh(e,t,a,o,c,d){return o>=t!=d>=t&&e<=(c-a)*(t-o)/(d-o)+a}function Ch(e,t,a,o,c,d,f,p,h,b){let y=!1;return kh(e,t,a,o,c,d)&&(y=!y),kh(e,t,c,d,f,p)&&(y=!y),kh(e,t,f,p,h,b)&&(y=!y),kh(e,t,h,b,a,o)&&(y=!y),y}function LU(e,t,a){return e>=a.x&&e<=a.x+a.width&&t>=a.y&&t<=a.y+a.height}function Th(e,t,a,o,c,d){const f=Math.min(a,c),p=Math.max(a,c),h=Math.min(o,d),b=Math.max(o,d);return e>=f&&e<=p&&t>=h&&t<=b}function WT(e={}){const{blockPointerEvents:t=!1}=e,a=new la,o=({x:c,y:d,placement:f,elements:p,onClose:h,nodeId:b,tree:y})=>{const v=f?.split("-")[0];let j=!1,w=null,k=null,S=typeof performance<"u"?performance.now():0;function N(P,T){const C=performance.now(),E=C-S;if(w===null||k===null||E===0)return w=P,k=T,S=C,!1;const D=P-w,I=T-k,O=D*D+I*I,_=E*E*_U;return w=P,k=T,S=C,O<_}function R(){a.clear(),h()}return function(T){a.clear();const C=p.domReference,E=p.floating;if(!C||!E||v==null||c==null||d==null)return;const{clientX:D,clientY:I}=T,O=fs(T),_=T.type==="mouseleave",z=Ze(E,O),H=Ze(C,O);if(z&&(j=!0,!_))return;if(H&&(j=!1,!_)){j=!0;return}if(_&&Rt(T.relatedTarget)&&Ze(E,T.relatedTarget))return;function B(){return!!(y&&fo(y.nodesRef.current,b).length>0)}function L(){B()||R()}if(B())return;const F=C.getBoundingClientRect(),$=E.getBoundingClientRect(),X=c>$.right-$.width/2,K=d>$.bottom-$.height/2,q=$.width>F.width,Q=$.height>F.height,G=(q?F:$).left,J=(q?F:$).right,Y=(Q?F:$).top,re=(Q?F:$).bottom;if(v==="top"&&d>=F.bottom-1||v==="bottom"&&d<=F.top+1||v==="left"&&c>=F.right-1||v==="right"&&c<=F.left+1){L();return}let M=!1;switch(v){case"top":M=Th(D,I,G,F.top+1,J,$.bottom-1);break;case"bottom":M=Th(D,I,G,$.top+1,J,F.bottom-1);break;case"left":M=Th(D,I,$.right-1,re,F.left+1,Y);break;case"right":M=Th(D,I,F.right-1,re,$.left+1,Y);break}if(M)return;if(j&&!LU(D,I,F)){L();return}if(!_&&N(D,I)){L();return}let U=!1;switch(v){case"top":{const Z=q?yn/2:yn*4,ae=q||X?c+Z:c-Z,ce=q?c-Z:X?c+Z:c-Z,W=d+yn+1,ue=X||q?$.bottom-yn:$.top,ve=X?q?$.bottom-yn:$.top:$.bottom-yn;U=Ch(D,I,ae,W,ce,W,$.left,ue,$.right,ve);break}case"bottom":{const Z=q?yn/2:yn*4,ae=q||X?c+Z:c-Z,ce=q?c-Z:X?c+Z:c-Z,W=d-yn,ue=X||q?$.top+yn:$.bottom,ve=X?q?$.top+yn:$.bottom:$.top+yn;U=Ch(D,I,ae,W,ce,W,$.left,ue,$.right,ve);break}case"left":{const Z=Q?yn/2:yn*4,ae=Q||K?d+Z:d-Z,ce=Q?d-Z:K?d+Z:d-Z,W=c+yn+1,ue=K||Q?$.right-yn:$.left,ve=K?Q?$.right-yn:$.left:$.right-yn;U=Ch(D,I,ue,$.top,ve,$.bottom,W,ae,W,ce);break}case"right":{const Z=Q?yn/2:yn*4,ae=Q||K?d+Z:d-Z,ce=Q?d-Z:K?d+Z:d-Z,W=c-yn,ue=K||Q?$.left+yn:$.right,ve=K?Q?$.left+yn:$.right:$.left+yn;U=Ch(D,I,W,ae,W,ce,ue,$.top,ve,$.bottom);break}}U?j||a.start(40,L):L()}};return o.__options={...e,blockPointerEvents:t},o}const zU={...Hy,disabled:e=>e.disabled,instantType:e=>e.instantType,isInstantPhase:e=>e.isInstantPhase,trackCursorAxis:e=>e.trackCursorAxis,disableHoverablePopup:e=>e.disableHoverablePopup,lastOpenChangeReason:e=>e.openChangeReason,closeOnClick:e=>e.closeOnClick,closeDelay:e=>e.closeDelay,adaptiveOrigin:e=>e.adaptiveOrigin};class BU extends iu{constructor(a,o,c){const d=new yh;super(HU(a,d,o,c),UU(d),zU);cn(this,"setOpen",(a,o)=>{TU(this,a,o,{extraState:{openChangeReason:o.reason}})})}cancelPendingOpen(a){this.state.floatingRootContext.dispatchOpenChange(!1,qe(xo,a))}}function HU(e,t,a,o=!1){return{...zy(t,a,o),disabled:!1,instantType:void 0,isInstantPhase:!1,trackCursorAxis:"none",disableHoverablePopup:!1,openChangeReason:null,closeOnClick:!0,closeDelay:0,adaptiveOrigin:void 0,...e}}function UU(e){return{popupRef:x.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerElements:e}}const VU=dh(function(t){const{disabled:a=!1,defaultOpen:o=!1,open:c,disableHoverablePopup:d=!1,trackCursorAxis:f="none",actionsRef:p,onOpenChange:h,onOpenChangeComplete:b,handle:y,triggerId:v,defaultTriggerId:j=null,children:w}=t,k=My((H,B)=>new BU({open:o,openProp:c,activeTriggerId:j,triggerIdProp:v},H,B));k.useControlledProp("openProp",c),k.useControlledProp("triggerIdProp",v),k.useContextCallback("onOpenChange",h),k.useContextCallback("onOpenChangeComplete",b);const S=k.useState("open"),N=!a&&S,R=k.useState("activeTriggerId"),P=k.useState("mounted"),T=k.useState("payload");k.useSyncedValues({trackCursorAxis:f,disableHoverablePopup:d,disabled:a}),Py(k,{closeOnActiveTriggerUnmount:!0});const{forceUnmount:C,transitionStatus:E}=_y(N,k),D=k.useState("isInstantPhase"),I=k.useState("instantType"),O=k.useState("lastOpenChangeReason"),_=x.useRef(null);Me(()=>{S&&a&&k.setOpen(!1,qe(C4))},[S,a,k]),Me(()=>{E==="ending"&&O===Qn||E!=="ending"&&D?(I!=="delay"&&(_.current=I),k.set("instantType","delay")):_.current!==null&&(k.set("instantType",_.current),_.current=null)},[E,D,O,I,k]),Me(()=>{N&&R==null&&k.set("payload",void 0)},[k,R,N]),x.useImperativeHandle(p,()=>({unmount:C,close:()=>k.setOpen(!1,qe(py))}),[C,k]);const z=N||P||!a&&f!=="none";return s.jsxs(K1.Provider,{value:k,children:[y&&s.jsx(Dy,{handle:y,store:k}),z&&s.jsx(FU,{store:k,disabled:a,trackCursorAxis:f}),typeof w=="function"?w({payload:T}):w]})});function FU({store:e,disabled:t,trackCursorAxis:a}){const o=e.useState("floatingRootContext"),c=pf(o,{enabled:!t,referencePress:()=>e.select("closeOnClick")}),d=EH(o,{enabled:!t&&a!=="none",axis:a==="none"?void 0:a}),f=x.useMemo(()=>ta(d.reference,c.reference),[d.reference,c.reference]);return Ly(e,{activeTriggerProps:f,inactiveTriggerProps:f,popupProps:c.floating??mn}),null}const JT=x.createContext(void 0);function $U(){return x.useContext(JT)}const qU=600,eE="data-base-ui-tooltip-trigger";function tE(e){if("composedPath"in e){const a=e.composedPath();for(let o=0;oN.select("transitionStatus")==="ending",shouldOpen(){return!G.current}}),ae=OU(C,{enabled:!X}).reference,ce=he=>{const te=G.current,ke=tE(he),le=U(ke),de=E.current,Se=de&&ke&&Ze(de,ke);if(le&&N.select("open")&&N.select("lastOpenChangeReason")===qs){N.setOpen(!1,qe(qs,he));return}if(te&&!le&&Se&&!K.current&&!N.select("open")&&de&&po(Y.current)){const Te=()=>{!G.current&&!K.current&&!N.select("open")&&N.setOpen(!0,qe(qs,he,de))},Le=re();Le===0?(J.clear(),Te()):J.start(Le,Te)}},W=N.useState("triggerProps",O);return yt("button",t,{state:{open:T},ref:[a,I,E],props:[Z,ae,O||q!=="none"?W:void 0,{onMouseOver(he){ce(he.nativeEvent)},onFocus(he){M(tE(he.nativeEvent))&&he.preventBaseUIHandler()},onMouseLeave(){G.current=!1,J.clear(),Y.current=void 0},onPointerEnter(he){Y.current=he.pointerType},onPointerDown(he){Y.current=he.pointerType,N.set("closeOnClick",y),y&&!N.select("open")&&N.cancelPendingOpen(he.nativeEvent)},onClick(he){y&&!N.select("open")&&N.cancelPendingOpen(he.nativeEvent)},id:R,[Qv]:X?"":void 0,[eE]:X?void 0:""},w],stateAttributesMapping:Kv})}),nE=x.createContext(void 0);function YU(){const e=x.useContext(nE);if(e===void 0)throw new Error(un(70));return e}const XU=x.forwardRef(function(t,a){const{children:o,container:c,className:d,render:f,style:p,...h}=t,{node:b,subtree:y}=iT({container:c,ref:a,componentProps:t,elementProps:h});return!y&&!b?null:s.jsxs(x.Fragment,{children:[y,b&&Ts.createPortal(o,b)]})}),QU=x.forwardRef(function(t,a){const{keepMounted:o=!1,...c}=t;return uf().useState("mounted")||o?s.jsx(nE.Provider,{value:o,children:s.jsx(XU,{ref:a,...c})}):null}),sE=x.createContext(void 0);function rE(){const e=x.useContext(sE);if(e===void 0)throw new Error(un(71));return e}const ZU=x.createContext(void 0);function gf(){return x.useContext(ZU)?.direction??"ltr"}const WU=e=>({name:"arrow",options:e,async fn(t){const{x:a,y:o,placement:c,rects:d,platform:f,elements:p,middlewareData:h}=t,{element:b,padding:y=0,offsetParent:v="real"}=mo(e,t)||{};if(b==null)return{};const j=x1(y),w={x:a,y:o},k=ny(c),S=ty(k),N=await f.getDimensions(b),R=k==="y",P=R?"top":"left",T=R?"bottom":"right",C=R?"clientHeight":"clientWidth",E=d.reference[S]+d.reference[k]-w[k]-d.floating[S],D=w[k]-d.reference[k],I=v==="real"?await f.getOffsetParent?.(b):p.floating;let O=p.floating[C]||d.floating[S];(!O||!await f.isElement?.(I))&&(O=p.floating[C]||d.floating[S]);const _=E/2-D/2,z=O/2-N[S]/2-1,H=Math.min(j[P],z),B=Math.min(j[T],z),L=H,F=O-N[S]-B,$=O/2-N[S]/2+_,X=m1(L,$,F),K=!h.arrow&&Nl(c)!=null&&$!==X&&d.reference[S]/2-(${const{name:a,fn:o}=WU(e);return{name:a,fn:o,options:[e,t]}},eV={name:"hide",async fn(e){const{width:t,height:a,x:o,y:c}=e.rects.reference,d=t===0&&a===0&&o===0&&c===0,f=await e.platform.detectOverflow(e,{elementContext:"reference"});return{data:{referenceHidden:f.top-a>=0||f.right-t>=0||f.bottom-a>=0||f.left-t>=0||d}}}},tV={sideX:"left",sideY:"top"},nV="--available-width",sV="--available-height",rV="--anchor-width",aV="--anchor-height",lV="--transform-origin",aE=nV,lE=sV;function oE(e,t,a){const o=e==="inline-start"||e==="inline-end";return{top:"top",right:o?a?"inline-start":"inline-end":"right",bottom:"bottom",left:o?a?"inline-end":"inline-start":"left"}[t]}function iE(e,t,a){const{rects:o,placement:c}=e;return{side:oE(t,ra(c),a),align:Nl(c)||"center",anchor:{width:o.reference.width,height:o.reference.height},positioner:{width:o.floating.width,height:o.floating.height}}}function Eh(e){return oV(e,AU)}function oV(e,t){const{anchor:a,positionMethod:o="absolute",side:c="bottom",sideOffset:d=0,align:f="center",alignOffset:p=0,collisionBoundary:h,collisionPadding:b=5,sticky:y=!1,arrowPadding:v=5,disableAnchorTracking:j=!1,inline:w,keepMounted:k=!1,floatingRootContext:S,mounted:N,collisionAvoidance:R,shift:P,nodeId:T,adaptiveOrigin:C,lazyFlip:E=!1,externalTree:D}=e,[I,O]=x.useState(null);!N&&I!==null&&O(null);const _=R.side||"flip",z=R.align||"flip",H=R.fallbackAxisSide||"end",B=P?.crossAxis??!1,L=P?.rootBoundary,F=typeof a=="function"?a:void 0,$=Ie(F),X=F?$:a,K=Wn(a),q=Wn(N),G=gf()==="rtl",J=I||{top:"top",right:"right",bottom:"bottom",left:"left","inline-end":G?"left":"right","inline-start":G?"right":"left"}[c],Y=f==="center"?J:`${J}-${f}`;let re=b;typeof re=="number"?re={top:re,right:re,bottom:re,left:re}:re&&(re={top:re.top||0,right:re.right||0,bottom:re.bottom||0,left:re.left||0});const M=1,U=c==="bottom"?M:0,Z=c==="top"?M:0,ae=c==="right"?M:0,ce=c==="left"?M:0,W={boundary:h==="clipping-ancestors"?"clippingAncestors":h,padding:re},ue=x.useRef(null),ve=Wn(d),ee=Wn(p),he=typeof d!="function"?d:0,te=typeof p!="function"?p:0,ke=[];w&&ke.push(w),ke.push(uU(nt=>{const Dt=iE(nt,c,G),qt=typeof ve.current=="function"?ve.current(Dt):ve.current,ts=typeof ee.current=="function"?ee.current(Dt):ee.current;return{mainAxis:qt,crossAxis:ts,alignmentAxis:ts}},[he,te,G,c]));const le=z==="none"&&_!=="shift",de=!le&&(y||B||_==="shift"),Se=_==="none"?null:pU({...W,padding:{top:re.top+M+U,right:re.right+M+ce,bottom:re.bottom+M+Z,left:re.left+M+ae},mainAxis:!B&&_==="flip",crossAxis:z==="flip"?"alignment":!1,fallbackAxisSideDirection:H}),Te=le?null:dU({...W,rootBoundary:L,mainAxis:z!=="none",crossAxis:de,limiter:y||B?void 0:fU(nt=>{if(!ue.current)return{};const{width:Dt,height:qt}=ue.current.getBoundingClientRect(),ts=aa(ra(nt.placement)),Fn=ts==="y"?Dt:qt,$n=ts==="y"?re.left+re.right:re.top+re.bottom;return{offset:Fn/2+$n/2}})},[W,y,B,L,re,z]);_==="shift"||z==="shift"||f==="center"?ke.push(Te,Se):ke.push(Se,Te),ke.push(mU({...W,apply({elements:{floating:nt},availableWidth:Dt,availableHeight:qt,rects:ts}){if(!q.current)return;const Fn=nt.style;Fn.setProperty(aE,`${Dt}px`),Fn.setProperty(lE,`${qt}px`);const $n=Cn(nt).devicePixelRatio||1,{x:Dn,y:en,width:cs,height:Et}=ts.reference,xt=(Math.round((Dn+cs)*$n)-Math.round(Dn*$n))/$n,jt=(Math.round((en+Et)*$n)-Math.round(en*$n))/$n;Fn.setProperty(rV,`${xt}px`),Fn.setProperty(aV,`${jt}px`)}}),JU(nt=>({element:ue.current||Gt(nt.elements.floating).createElement("div"),padding:ue.current?v:0,offsetParent:"floating"}),[v]),{name:"transformOrigin",fn(nt){const{elements:{floating:Dt},middlewareData:qt,placement:ts,platform:Fn,rects:$n,y:Dn}=nt,en=ra(ts),cs=Nl(ts),Et=aa(en)==="y",xt=ue.current,jt=typeof d=="function"?d(iE(nt,c,G)):d;let wt;if(!xt&&cs&&Math.abs(Et?qt.shift?.x||0:qt.shift?.y||0)<=1)wt=cs==="start"===(Et&&Fn.isRTL?.(Dt)===!0)?"100%":"0%";else{const ar=Et?qt.arrow?.x||0:qt.arrow?.y||0,Fr=Et?xt?.clientWidth||0:xt?.clientHeight||0;wt=`${ar+Fr/2}px`}let Er=en==="top"||en==="left"?`calc(100% + ${jt}px)`:`${-jt}px`;return de&&Et&&Math.abs(qt.shift?.y||0)>jt&&(Er=`${$n.reference.y+$n.reference.height/2-Dn}px`),Dt.style.setProperty(lV,Et?`${wt} ${Er}`:`${Er} ${wt}`),{}}},eV,C),Me(()=>{!N&&S&&S.update({referenceElement:null,floatingElement:null,domReferenceElement:null,positionReference:null})},[N,S]);const Le=x.useMemo(()=>({ancestorScroll:!j,elementResize:!j&&typeof ResizeObserver<"u",layoutShift:!j&&typeof IntersectionObserver<"u"}),[j]),{refs:Ae,elements:oe,x:me,y:pe,middlewareData:Ce,update:Ne,placement:be,context:De,isPositioned:Ge,floatingStyles:Ct}=t({rootContext:S,open:k?N:void 0,placement:Y,middleware:ke,strategy:o,whileElementsMounted:k?void 0:(...nt)=>TT(...nt,Le),nodeId:T,externalTree:D}),{sideX:Tt,sideY:Mt}=Ce.adaptiveOrigin||tV,ot=Ge?o:"fixed",Kn=x.useMemo(()=>{let nt;return Ge?C?nt={position:ot,[Tt]:me,[Mt]:pe}:nt={...Ct,position:ot}:nt={position:ot,top:0,left:0},nt[aE]="100vw",nt[lE]="100vh",Ge||(nt.opacity=0),nt},[C,ot,Tt,me,Mt,pe,Ct,Ge]),ms=x.useRef(null);Me(()=>{if(!N)return;const nt=K.current,Dt=typeof nt=="function"?nt():nt,ts=(cE(Dt)?Dt.current:Dt)||null||null;ts!==ms.current&&(Ae.setPositionReference(ts),ms.current=ts)},[N,Ae,X,K]),x.useEffect(()=>{if(!N)return;const nt=K.current;typeof nt!="function"&&cE(nt)&&nt.current!==ms.current&&(Ae.setPositionReference(nt.current),ms.current=nt.current)},[N,Ae,X,K]),x.useEffect(()=>{if(k&&N&&oe.reference&&oe.floating)return TT(oe.reference,oe.floating,Ne,Le)},[k,N,oe,Ne,Le]);const Yn=ra(be),vs=oE(c,Yn,G),it=Nl(be)||"center",$t=!!Ce.hide?.referenceHidden;Me(()=>{E&&N&&Ge&&Yn!==J&&O(Yn)},[E,N,Ge,Yn,J]);const Vn=x.useMemo(()=>({position:"absolute",top:Ce.arrow?.y,left:Ce.arrow?.x}),[Ce.arrow]),rn=Ce.arrow?.centerOffset!==0;return x.useMemo(()=>({positionerStyles:Kn,arrowStyles:Vn,arrowRef:ue,arrowUncentered:rn,side:vs,align:it,physicalSide:Yn,anchorHidden:$t,refs:Ae,context:De,isPositioned:Ge,update:Ne}),[Kn,Vn,ue,rn,vs,it,Yn,$t,Ae,De,Ge,Ne])}function cE(e){return e!=null&&"current"in e}function xf(e){return e==="starting"?bH:mn}function Ah(e,t,{styles:a,transitionStatus:o,props:c,refs:d,hidden:f,inert:p=!1}){const h={...a};return p&&(h.pointerEvents="none"),yt("div",e,{state:t,ref:d,props:[{role:"presentation",hidden:f,style:h},xf(o),c],stateAttributesMapping:Wc})}const iV=x.forwardRef(function(t,a){const{render:o,className:c,anchor:d,positionMethod:f="absolute",side:p="top",align:h="center",sideOffset:b=0,alignOffset:y=0,collisionBoundary:v="clipping-ancestors",collisionPadding:j=5,arrowPadding:w=5,sticky:k=!1,disableAnchorTracking:S=!1,collisionAvoidance:N=aT,style:R,...P}=t,T=uf(),C=YU(),E=T.useState("open"),D=T.useState("mounted"),I=T.useState("trackCursorAxis"),O=T.useState("disableHoverablePopup"),_=T.useState("floatingRootContext"),z=T.useState("instantType"),H=T.useState("transitionStatus"),B=T.useState("adaptiveOrigin"),L=Eh({anchor:d,positionMethod:f,floatingRootContext:_,mounted:D,side:p,sideOffset:b,align:h,alignOffset:y,collisionBoundary:v,collisionPadding:j,sticky:k,arrowPadding:w,disableAnchorTracking:S,keepMounted:C,collisionAvoidance:N,adaptiveOrigin:B}),F=x.useMemo(()=>({open:E,side:L.side,align:L.align,anchorHidden:L.anchorHidden,instant:I!=="none"?"tracking-cursor":z}),[E,L.side,L.align,L.anchorHidden,I,z]),$=Ah(t,F,{styles:L.positionerStyles,transitionStatus:H,props:P,refs:[a,T.useStateSetter("positionerElement")],hidden:!D,inert:!E||I==="both"||O});return s.jsx(sE.Provider,{value:L,children:$})}),cV=x.forwardRef(function(t,a){const{render:o,className:c,style:d,...f}=t,p=uf(),{side:h,align:b}=rE(),y=p.useState("open"),v=p.useState("instantType"),j=p.useState("transitionStatus"),w=p.useState("popupProps"),k=p.useState("floatingRootContext"),S=p.useState("disabled"),N=p.useState("closeDelay");oa({open:y,ref:p.context.popupRef,onComplete(){y&&p.context.onOpenChangeComplete?.(!0)}}),GT(k,{enabled:!S,closeDelay:N});const R=p.useStateSetter("popupElement");return yt("div",t,{state:{open:y,side:h,align:b,instant:v,transitionStatus:j},ref:[a,p.context.popupRef,R],props:[mf,w,xf(j),f],stateAttributesMapping:Xv})}),uV=x.forwardRef(function(t,a){const{render:o,className:c,style:d,...f}=t,p=uf(),{arrowRef:h,side:b,align:y,arrowUncentered:v,arrowStyles:j}=rE(),w=p.useState("open"),k=p.useState("instantType");return yt("div",t,{state:{open:w,side:b,align:y,uncentered:v,instant:k},ref:[a,h],props:[{style:j,"aria-hidden":!0},f],stateAttributesMapping:Wc})}),dV=function(t){const{delay:a,closeDelay:o,timeout:c=400}=t,d=x.useMemo(()=>({open:a,close:o}),[a,o]);return s.jsx(JT.Provider,{value:a,children:s.jsx(fH,{delay:d,timeoutMs:c,children:t.children})})};function Rh(e){return zv(19)?e:e?"true":void 0}function fV(e){const[t,a]=x.useState({current:e,previous:null});return Object.is(e,t.current)||a({current:e,previous:t.current}),t.previous}function pV(e){return s.jsx(dV,{"data-slot":"tooltip-provider",...e})}function Ui(e){return s.jsx(VU,{"data-slot":"tooltip",...e})}function Vi(e){return s.jsx(KU,{"data-slot":"tooltip-trigger",...e})}function Fi({className:e,sideOffset:t=8,side:a="top",children:o,...c}){return s.jsx(QU,{children:s.jsx(iV,{sideOffset:t,side:a,className:"z-[35]",children:s.jsx(cV,{"data-slot":"tooltip-content",className:Ue("max-w-[288px] rounded-md bg-primary px-2.5 py-2 text-[11.5px] leading-[1.55] text-primary-on shadow-3","break-words outline-none","transition-[opacity,transform] duration-150 ease-out","data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95","data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",e),...c,children:o})})})}function mV({className:e,...t}){return s.jsx(uV,{className:Ue("size-2 rotate-45 rounded-[1px] bg-primary","data-[side=top]:-bottom-1 data-[side=bottom]:-top-1",e),...t})}const uE=x.createContext(void 0);function cu(e){const t=x.useContext(uE);if(!e&&t===void 0)throw new Error(un(27));return t}const dE=x.forwardRef(function(t,a){const{render:o,className:c,style:d,forceRender:f=!1,...p}=t,h=cu(),b=h.useState("open"),y=h.useState("nested"),v=h.useState("mounted"),j=h.useState("transitionStatus");return yt("div",t,{state:{open:b,transitionStatus:j},ref:[h.context.backdropRef,a],stateAttributesMapping:Xv,props:[{role:"presentation",hidden:!v,style:{userSelect:"none",WebkitUserSelect:"none"}},p],enabled:f||!y})}),fE=x.forwardRef(function(t,a){const{render:o,className:c,style:d,disabled:f=!1,nativeButton:p=!0,...h}=t,b=cu(),y=b.useState("open"),{getButtonProps:v,buttonRef:j}=na({disabled:f,native:p}),w={disabled:f};function k(S){y&&b.setOpen(!1,qe(dy,S.nativeEvent))}return yt("button",t,{state:w,ref:[a,j],props:[{onClick:k},h,v]})}),pE=x.createContext(void 0);function hV(){const e=x.useContext(pE);if(e===void 0)throw new Error(un(26));return e}const qy="ArrowUp",Gy="ArrowDown",Ky="ArrowLeft",Yy="ArrowRight",Xy="Home",Qy="End",Oh=new Set([qy,Gy,Ky,Yy,Xy,Qy]),mE="Shift",gV=[mE,"Control","Alt","Meta"];function xV(e){return pn(e)&&e.tagName==="INPUT"}function hE(e){return!!(xV(e)&&e.selectionStart!=null||pn(e)&&e.tagName==="TEXTAREA")}function gE(e,t,a,o){if(!e||!t||!t.scrollTo)return;let c=e.scrollLeft,d=e.scrollTop;const f=e.clientWidthe.scrollLeft+e.clientWidth-b.scrollPaddingRight?c=h+t.offsetWidth+y.scrollMarginRight-e.clientWidth+b.scrollPaddingRight:h-y.scrollMarginLefte.scrollLeft+e.clientWidth-b.scrollPaddingRight&&(c=h+t.offsetWidth+y.scrollMarginRight-e.clientWidth+b.scrollPaddingRight))}if(p&&o!=="horizontal"){const h=xE(e,t,"top"),b=Mh(e),y=Mh(t);h-y.scrollMarginTope.scrollTop+e.clientHeight-b.scrollPaddingBottom&&(d=h+t.offsetHeight+y.scrollMarginBottom-e.clientHeight+b.scrollPaddingBottom)}e.scrollTo({left:c,top:d,behavior:"auto"})}function xE(e,t,a){const o=a==="left"?"offsetLeft":"offsetTop";let c=0;for(;t.offsetParent&&(c+=t[o],t.offsetParent!==e);)t=t.offsetParent;return c}function Mh(e){const t=getComputedStyle(e);return{scrollMarginTop:parseFloat(t.scrollMarginTop)||0,scrollMarginRight:parseFloat(t.scrollMarginRight)||0,scrollMarginBottom:parseFloat(t.scrollMarginBottom)||0,scrollMarginLeft:parseFloat(t.scrollMarginLeft)||0,scrollPaddingTop:parseFloat(t.scrollPaddingTop)||0,scrollPaddingRight:parseFloat(t.scrollPaddingRight)||0,scrollPaddingBottom:parseFloat(t.scrollPaddingBottom)||0,scrollPaddingLeft:parseFloat(t.scrollPaddingLeft)||0}}const bV="--nested-dialogs",vV="data-nested-dialog-open",yV={...Wc,...uo,nestedDialogOpen(e){return e?{[vV]:""}:null}},bE=x.forwardRef(function(t,a){const{render:o,className:c,style:d,finalFocus:f,initialFocus:p,...h}=t,b=cu(),y=b.useState("descriptionElementId"),v=b.useState("disablePointerDismissal"),j=b.useState("floatingRootContext"),w=b.useState("popupProps"),k=b.useState("modal"),S=b.useState("mounted"),N=b.useState("nested"),R=b.useState("nestedOpenDialogCount"),P=b.useState("open"),T=b.useState("openMethod"),C=b.useState("titleElementId"),E=b.useState("transitionStatus"),D=b.useState("role"),I=j.useState("floatingId");hV(),oa({open:P,ref:b.context.popupRef,onComplete(){P&&b.context.onOpenChangeComplete?.(!0)}});const O=p===void 0?_T(b.context.popupRef):p,_=R>0,z=b.useStateSetter("popupElement"),B=yt("div",t,{state:{open:P,nested:N,transitionStatus:E,nestedDialogOpen:_},props:[w,{id:I,"aria-labelledby":C,"aria-describedby":y,role:D,...mf,hidden:!S,onKeyDown(L){Oh.has(L.key)&&L.stopPropagation()},style:{[bV]:R}},h],ref:[a,b.context.popupRef,z],stateAttributesMapping:yV});return s.jsx(hh,{context:j,openInteractionType:T,disabled:!S,closeOnFocusOut:!v,initialFocus:O,returnFocus:f,modal:k!==!1,restoreFocus:"popup",children:B})}),Dh=x.forwardRef(function(t,a){const{cutout:o,...c}=t;let d;if(o){const f=o.getBoundingClientRect();d=`polygon(0% 0%,100% 0%,100% 100%,0% 100%,0% 0%,${f.left}px ${f.top}px,${f.left}px ${f.bottom}px,${f.right}px ${f.bottom}px,${f.right}px ${f.top}px,${f.left}px ${f.top}px)`}return s.jsx("div",{ref:a,role:"presentation","data-base-ui-inert":"",...c,style:{position:"fixed",inset:0,userSelect:"none",WebkitUserSelect:"none",clipPath:d}})}),vE=x.forwardRef(function(t,a){const{keepMounted:o=!1,...c}=t,d=cu(),f=d.useState("mounted"),p=d.useState("modal"),h=d.useState("open");return f||o?s.jsx(pE.Provider,{value:o,children:s.jsxs(mh,{ref:a,...c,children:[f&&p===!0&&s.jsx(Dh,{ref:d.context.internalBackdropRef,inert:Rh(!h)}),t.children]})}):null});let yE={},jE={},wE="";function Ih(e,t){return Qd(e)?e:t}function SE(e,t,a){return/hidden|clip/.test(e.getComputedStyle(Ih(t,a)).overflowY)}function jV(e){if(typeof document>"u")return!1;const t=Gt(e);return Cn(t).innerWidth-t.documentElement.clientWidth>0}function wV(e){if(!(typeof CSS<"u"&&CSS.supports&&CSS.supports("scrollbar-gutter","stable"))||typeof document>"u")return!1;const a=Gt(e),o=a.documentElement,c=a.body,d=Ih(o,c),f=d.style.overflowY,p=o.style.scrollbarGutter;o.style.scrollbarGutter="stable",d.style.overflowY="scroll";const h=d.offsetWidth;d.style.overflowY="hidden";const b=d.offsetWidth;return d.style.overflowY=f,o.style.scrollbarGutter=p,h===b}function SV(e){const t=Gt(e),a=t.documentElement,o=t.body,c=Ih(a,o),d={overflowY:c.style.overflowY,overflowX:c.style.overflowX};return Object.assign(c.style,{overflowY:"hidden",overflowX:"hidden"}),()=>{Object.assign(c.style,d)}}function NV(e){const t=Gt(e),a=t.documentElement,o=t.body,c=Cn(a);let d=0,f=0,p=!1;const h=Ga.create();if(jl&&(c.visualViewport?.scale??1)!==1)return()=>{};function b(){const w=c.getComputedStyle(a),k=c.getComputedStyle(o),R=(w.scrollbarGutter||"").includes("both-edges")?"stable both-edges":"stable";d=a.scrollTop,f=a.scrollLeft,yE={scrollbarGutter:a.style.scrollbarGutter,overflowY:a.style.overflowY,overflowX:a.style.overflowX},wE=a.style.scrollBehavior,jE={position:o.style.position,height:o.style.height,width:o.style.width,boxSizing:o.style.boxSizing,overflowY:o.style.overflowY,overflowX:o.style.overflowX,scrollBehavior:o.style.scrollBehavior};const P=a.scrollHeight>a.clientHeight,T=a.scrollWidth>a.clientWidth,C=w.overflowY==="scroll"||k.overflowY==="scroll",E=w.overflowX==="scroll"||k.overflowX==="scroll",D=Math.max(0,c.innerWidth-o.clientWidth),I=Math.max(0,c.innerHeight-o.clientHeight),O=parseFloat(k.marginTop)+parseFloat(k.marginBottom),_=parseFloat(k.marginLeft)+parseFloat(k.marginRight),z=Ih(a,o);if(p=wV(e),p){a.style.scrollbarGutter=R,z.style.overflowY="hidden",z.style.overflowX="hidden";return}Object.assign(a.style,{scrollbarGutter:R,overflowY:"hidden",overflowX:"hidden"}),(P||C)&&(a.style.overflowY="scroll"),(T||E)&&(a.style.overflowX="scroll"),Object.assign(o.style,{position:"relative",height:O||I?`calc(100dvh - ${O+I}px)`:"100dvh",width:_||D?`calc(100vw - ${_+D}px)`:"100vw",boxSizing:"border-box",overflowY:"hidden",overflowX:"hidden",scrollBehavior:"unset"}),o.scrollTop=d,o.scrollLeft=f,a.setAttribute("data-base-ui-scroll-locked",""),a.style.scrollBehavior="unset"}function y(){Object.assign(a.style,yE),Object.assign(o.style,jE),p||(a.scrollTop=d,a.scrollLeft=f,a.removeAttribute("data-base-ui-scroll-locked"),a.style.scrollBehavior=wE)}function v(){y(),h.request(b)}b();const j=St(c,"resize",v);return()=>{h.cancel(),y(),typeof c.removeEventListener=="function"&&j()}}class kV{constructor(){cn(this,"lockCount",0);cn(this,"restore",null);cn(this,"timeoutLock",la.create());cn(this,"timeoutUnlock",la.create());cn(this,"release",()=>{this.lockCount-=1,this.lockCount===0&&this.restore&&this.timeoutUnlock.start(0,this.unlock)});cn(this,"unlock",()=>{this.lockCount===0&&this.restore&&(this.restore?.(),this.restore=null)})}acquire(t){return this.lockCount+=1,this.lockCount===1&&this.restore===null&&this.timeoutLock.start(0,()=>this.lock(t)),this.release}lock(t){if(this.lockCount===0||this.restore!==null)return;const a=Gt(t),o=a.documentElement,c=a.body,d=Cn(o);if(SE(d,o,c)){const p=new d.MutationObserver(()=>{SE(d,o,c)||(p.disconnect(),this.restore=null,this.lock(t))}),h={attributes:!0};p.observe(o,h),p.observe(c,h),this.restore=()=>p.disconnect();return}const f=tf||!jV(t);this.restore=f?SV(t):NV(t)}}const CV=new kV;function NE(e=!0,t=null){Me(()=>{if(e)return CV.acquire(t)},[e,t])}function TV({store:e,parentContext:t,isDrawer:a}){const o=e.useState("open"),c=e.useState("disablePointerDismissal"),d=e.useState("modal"),f=e.useState("popupElement"),p=e.useState("floatingRootContext"),[h,b]=x.useState(0),[y,v]=x.useState(0),j=h===0,w=pf(p,{outsidePressEvent(){return e.context.internalBackdropRef.current||e.context.backdropRef.current?"intentional":{mouse:d==="trap-focus"?"sloppy":"intentional",touch:"sloppy"}},outsidePress(k){if(!e.context.outsidePressEnabledRef.current||"button"in k&&k.button!==0)return!1;if("touches"in k){if(k.type==="touchend"){if(k.changedTouches.length!==1||k.touches.length!==0)return!1}else if(k.touches.length!==1)return!1}const S=fs(k);if(j&&!c){if(d){const N=e.context.internalBackdropRef.current,R=e.context.backdropRef.current;return N||R?N===S||R===S||Ze(S,f)&&!S?.hasAttribute("data-base-ui-portal"):!0}return!0}return!1},escapeKey:j});return NE(o&&d===!0,f),e.useContextCallback("onNestedDialogOpen",(k,S)=>{b(k),v(S)}),Me(()=>(t?.onNestedDialogOpen&&(o?t.onNestedDialogOpen(h+1,y+(a?1:0)):t.onNestedDialogOpen(0,0)),()=>{t?.onNestedDialogOpen&&o&&t.onNestedDialogOpen(0,0)}),[a,o,h,y,t]),Ly(e,{activeTriggerProps:w.reference,inactiveTriggerProps:w.trigger,popupProps:w.floating,nestedOpenDialogCount:h,nestedOpenDrawerCount:y}),null}const EV={...Hy,modal:e=>e.modal,nested:e=>e.nested,nestedOpenDialogCount:e=>e.nestedOpenDialogCount,nestedOpenDrawerCount:e=>e.nestedOpenDrawerCount,disablePointerDismissal:e=>e.disablePointerDismissal,openMethod:e=>e.openMethod,descriptionElementId:e=>e.descriptionElementId,titleElementId:e=>e.titleElementId,viewportElement:e=>e.viewportElement,role:e=>e.role};class AV extends iu{constructor(a,o,c){const d=new yh,f=RV(a,d,o,c);super(f,OV(d),EV);cn(this,"setOpen",(a,o)=>{o.preventUnmountOnClose=()=>{this.set("preventUnmountingOnClose",!0)},!a&&o.trigger==null&&this.state.activeTriggerId!=null&&(o.trigger=this.state.activeTriggerElement??void 0),this.context.onOpenChange?.(a,o),!o.isCanceled&&(this.state.floatingRootContext.dispatchOpenChange(a,o),this.update(Iy(this.state,a,o.trigger)))})}}function RV(e,t,a,o=!1){return{...zy(t,a,o),modal:!0,disablePointerDismissal:!1,viewportElement:null,descriptionElementId:void 0,titleElementId:void 0,openMethod:null,nested:!1,nestedOpenDialogCount:0,nestedOpenDrawerCount:0,role:"dialog",...e}}function OV(e){return{popupRef:x.createRef(),backdropRef:x.createRef(),internalBackdropRef:x.createRef(),outsidePressEnabledRef:{current:!0},triggerElements:e,onOpenChange:void 0,onOpenChangeComplete:void 0}}function kE(e,t){const{children:a,open:o,defaultOpen:c=!1,onOpenChange:d,onOpenChangeComplete:f,disablePointerDismissal:p=!1,modal:h=!0,actionsRef:b,handle:y,triggerId:v,defaultTriggerId:j=null}=t,w=e==="drawer",k=e==="alert-dialog",S=k?!0:h,N=k||p,R=k?"alertdialog":"dialog",P=cu(!0),T=P!=null,C={modal:S,disablePointerDismissal:N,nested:T,role:R},E=My((H,B)=>new AV({open:c,openProp:o,activeTriggerId:j,triggerIdProp:v,...C},H,B),!0);E.useControlledProp("openProp",o),E.useControlledProp("triggerIdProp",v),E.useSyncedValues(C),E.useContextCallback("onOpenChange",d),E.useContextCallback("onOpenChangeComplete",f);const D=E.useState("open"),I=E.useState("mounted"),O=E.useState("payload");HT(E,D),Py(E);const{forceUnmount:_}=_y(D,E);x.useImperativeHandle(b,()=>({unmount:_,close:()=>E.setOpen(!1,qe(py))}),[_,E]);const z=D||I;return s.jsxs(uE.Provider,{value:E,children:[y&&s.jsx(Dy,{handle:y,store:E}),z&&s.jsx(TV,{store:E,parentContext:P?.context,isDrawer:w}),typeof a=="function"?a({payload:O}):a]})}const MV=dh(function(t){return kE("dialog",t)}),CE=x.forwardRef(function(t,a){const{render:o,className:c,style:d,id:f,...p}=t,h=cu(),b=ka(f);return h.useSyncedValueWithCleanup("titleElementId",b),yt("h2",t,{ref:a,props:[{id:b},p]})});function DV(e){const t=x.useRef(""),a=x.useCallback(c=>{c.defaultPrevented||(t.current=c.pointerType,e(c,c.pointerType))},[e]);return{onClick:x.useCallback(c=>{if(c.detail===0){e(c,"keyboard");return}"pointerType"in c?e(c,c.pointerType):e(c,t.current),t.current=""},[e]),onPointerDown:a}}function TE(e,t){const a=Ie((d,f)=>{(typeof e=="function"?e():e)||t(f||(tf?"touch":""))}),{onClick:o,onPointerDown:c}=DV(a);return x.useMemo(()=>({onClick:o,onPointerDown:c}),[o,c])}function EE(e){const[t,a]=x.useState(null),o=TE(e,a);return ia(e,c=>{c&&!e&&a(null)}),x.useMemo(()=>({openMethod:t,triggerProps:o}),[t,o])}function Yt(e){return s.jsx(MV,{"data-slot":"dialog",...e})}function IV(e){return s.jsx(vE,{"data-slot":"dialog-portal",...e})}const Ut=e=>s.jsx(CE,{"data-slot":"dialog-title",...e});function PV({className:e,...t}){return s.jsx(dE,{"data-slot":"dialog-overlay",className:Ue("fixed inset-0 isolate z-30 bg-mask backdrop-blur-[3px]","transition-opacity duration-150","data-open:animate-in data-open:fade-in-0","data-closed:animate-out data-closed:fade-out-0 data-closed:fill-mode-forwards",e),...t})}function Xt({className:e,children:t,showCloseButton:a=!0,keepMounted:o=!1,overlayForceRender:c=!1,...d}){return s.jsxs(IV,{keepMounted:o,children:[s.jsx(PV,{forceRender:c}),s.jsxs(bE,{"data-slot":"dialog-content",className:Ue("fixed top-1/2 left-1/2 z-30 flex max-h-[calc(100vh-48px)] w-[min(620px,calc(100vw-48px))] -translate-x-1/2 -translate-y-1/2 flex-col","overflow-hidden rounded-lg border border-border bg-surface shadow-3 outline-none","transition-[opacity,transform] duration-200 [transition-timing-function:cubic-bezier(.2,.9,.3,1)]","data-open:animate-in data-open:fade-in-0 data-open:zoom-in-[.985] data-open:slide-in-from-bottom-2.5","data-closed:animate-out data-closed:fade-out-0 data-closed:fill-mode-forwards",e),...d,children:[t,a&&s.jsxs(fE,{"data-slot":"dialog-close",render:s.jsx(ne,{variant:"ghost",size:"icon-sm",className:"absolute top-3 right-3"}),children:[s.jsx("svg",{viewBox:"0 0 12 12",className:"size-3","aria-hidden":"true",children:s.jsx("path",{d:"M2.5 2.5l7 7M9.5 2.5l-7 7",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",fill:"none"})}),s.jsx("span",{className:"sr-only",children:vo("关闭")})]})]})]})}function Vt({className:e,...t}){return s.jsx("div",{"data-slot":"dialog-header",className:Ue("flex items-center gap-2.5 border-b border-hairline px-5 py-[15px] pr-10","[&_h2]:flex-1 [&_h2]:text-[14.5px] [&_h2]:font-semibold",e),...t})}function Lt({className:e,...t}){return s.jsx("div",{"data-slot":"dialog-body",className:Ue("flex flex-col gap-4 overflow-y-auto px-5 py-[18px]",e),...t})}function tn({className:e,...t}){return s.jsx("div",{"data-slot":"dialog-footer",className:Ue("flex items-center gap-2 border-t border-hairline bg-surface-2 px-5 py-[13px]",e),...t})}function dn({className:e,...t}){return s.jsx("div",{"data-slot":"dialog-section",className:Ue("flex flex-col gap-2.5 rounded-md border border-border bg-surface-inset p-3.5","[&_h3]:text-[12.5px] [&_h3]:font-semibold","[&_p]:text-xs [&_p]:leading-[1.65] [&_p]:text-subtle",e),...t})}function _V(e){return kE("alert-dialog",e)}const LV=_V,zV=vE,BV=e=>s.jsx(CE,{"data-slot":"alert-dialog-title",...e});function HV({className:e,...t}){return s.jsx(dE,{"data-slot":"alert-dialog-overlay",className:Ue("fixed inset-0 isolate z-[38] bg-mask backdrop-blur-[3px]","transition-opacity duration-150","data-open:animate-in data-open:fade-in-0","data-closed:animate-out data-closed:fade-out-0 data-closed:fill-mode-forwards",e),...t})}function UV({className:e,children:t,showCloseButton:a=!1,...o}){return s.jsxs(zV,{children:[s.jsx(HV,{}),s.jsxs(bE,{"data-slot":"alert-dialog-content",className:Ue("fixed top-1/2 left-1/2 z-[38] flex max-h-[calc(100vh-48px)] w-[min(440px,calc(100vw-48px))] -translate-x-1/2 -translate-y-1/2 flex-col","overflow-hidden rounded-lg border border-border bg-surface shadow-3 outline-none","transition-[opacity,transform] duration-200 [transition-timing-function:cubic-bezier(.2,.9,.3,1)]","data-open:animate-in data-open:fade-in-0 data-open:zoom-in-[.985] data-open:slide-in-from-bottom-2.5","data-closed:animate-out data-closed:fade-out-0 data-closed:fill-mode-forwards",e),...o,children:[t,a&&s.jsxs(fE,{"data-slot":"alert-dialog-close",render:s.jsx(ne,{variant:"ghost",size:"icon-sm",className:"absolute top-3 right-3"}),children:[s.jsx("svg",{viewBox:"0 0 12 12",className:"size-3","aria-hidden":"true",children:s.jsx("path",{d:"M2.5 2.5l7 7M9.5 2.5l-7 7",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",fill:"none"})}),s.jsx("span",{className:"sr-only",children:vo("关闭")})]})]})]})}function VV({className:e,...t}){return s.jsx("div",{"data-slot":"alert-dialog-header",className:Ue("flex items-center gap-2.5 border-b border-hairline px-5 py-[15px]","[&_h2]:flex-1 [&_h2]:text-[14.5px] [&_h2]:font-semibold",e),...t})}function FV({className:e,...t}){return s.jsx("div",{"data-slot":"alert-dialog-body",className:Ue("flex flex-col gap-4 overflow-y-auto px-5 py-[18px]",e),...t})}function $V({className:e,...t}){return s.jsx("div",{"data-slot":"alert-dialog-footer",className:Ue("flex items-center gap-2 border-t border-hairline bg-surface-2 px-5 py-[13px]",e),...t})}function qV({className:e,tone:t="danger",...a}){return s.jsx("div",{"data-slot":"alert-dialog-banner","data-tone":t,className:Ue("rounded-md border px-3.5 py-3 text-xs leading-[1.65] text-subtle","[&_strong]:font-semibold",t==="danger"?"border-destructive-bd bg-destructive-soft [&_strong]:text-destructive":"border-border bg-surface-inset [&_strong]:text-foreground",e),...a})}function Zy({className:e,containerClassName:t,...a}){return s.jsx("div",{"data-slot":"table-container",className:Ue("relative w-full overflow-auto",t),children:s.jsx("table",{"data-slot":"table",className:Ue("w-full caption-bottom border-collapse text-[12.5px]",e),...a})})}function AE({className:e,...t}){return s.jsx("thead",{"data-slot":"table-header",className:Ue(e),...t})}function Wy({className:e,...t}){return s.jsx("tbody",{"data-slot":"table-body",className:Ue(e),...t})}function Cl({className:e,...t}){return s.jsx("tr",{"data-slot":"table-row",className:Ue("transition-colors duration-100 hover:[&>td]:bg-control-hover",e),...t})}function RE({className:e,...t}){return s.jsx("th",{"data-slot":"table-head",className:Ue("sticky top-0 z-[2] whitespace-nowrap border-b border-border bg-surface-2 px-3.5 py-2","text-left text-[10.5px] font-semibold tracking-[.05em] text-muted-foreground",e),...t})}function Tn({className:e,...t}){return s.jsx("td",{"data-slot":"table-cell",className:Ue("border-b border-hairline px-3.5 py-2 align-middle",e),...t})}const GV="data-checked",KV="data-unchecked",Jy={checked(e){return e?{[GV]:""}:{[KV]:""}},...uo,...Ti},ej="data-composite-item-active",OE=x.createContext({register:()=>{},unregister:()=>{},subscribeMapChange:()=>()=>{},nextIndexRef:{current:0}});function YV(){return x.useContext(OE)}function tj(e={}){const{guess:t,label:a,metadata:o,textRef:c,index:d}=e,{register:f,unregister:p,subscribeMapChange:h,nextIndexRef:b}=YV(),y=x.useRef(-1),[v,j]=x.useState(d==null&&t?()=>{if(y.current===-1){const N=b.current;b.current+=1,y.current=N}return y.current}:-1),w=d??v,k=x.useRef(null),S=x.useCallback(N=>{const R=k.current;R&&p(R),k.current=N,N&&f(N,{metadata:o??null,index:d??null,label:a,textRef:c})},[d,f,p,o,a,c]);return Me(()=>{if(d==null)return h(N=>{const R=k.current?N.get(k.current)?.index:null;R!=null&&j(R)})},[d,h]),{ref:S,index:w}}function XV(e={}){const{highlightItemOnHover:t,highlightedIndex:a,onHighlightedIndexChange:o}=EC(),{ref:c,index:d}=tj(e),f=a===d,p=x.useRef(null),h=sa(c,p);return{compositeProps:{tabIndex:f?0:-1,onFocus(){o(d)},onMouseMove(){const y=p.current;if(!t||!y)return;const v=y.hasAttribute("disabled")||y.ariaDisabled==="true";!f&&!v&&y.focus()}},compositeRef:h,index:d}}function ME(e){const{render:t,className:a,style:o,state:c=mn,props:d=Pr,refs:f=Pr,metadata:p,stateAttributesMapping:h,tag:b="div",...y}=e,{compositeProps:v,compositeRef:j}=XV({metadata:p});return yt(b,e,{state:c,ref:[j,...f],props:[v,...d,y],stateAttributesMapping:h})}const DE=x.createContext(void 0);function QV(){return x.useContext(DE)}function Ph(e){if(e==null)return"";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}const IE=x.createContext(void 0);function ZV(){const e=x.useContext(IE);if(e===void 0)throw new Error(un(52));return e}const PE=x.forwardRef(function(t,a){const{render:o,className:c,disabled:d=!1,readOnly:f=!1,required:p=!1,"aria-labelledby":h,value:b,inputRef:y,nativeButton:v=!1,id:j,style:w,...k}=t,S=QV(),{disabled:N,readOnly:R,required:P,form:T,checkedValue:C,touched:E=!1,validation:D,name:I,setCheckedValue:O=Kt,setTouched:_=Kt,registerInputRef:z=Kt}=S??{},{setTouched:H,setFilled:B,state:L,disabled:F}=Na(),$=A1(),{labelId:X,getDescriptionProps:K}=yl(),q=F||$.disabled||N||d,Q=R||f,G=P||p,J=T,Y=S?C===b:b==="",re=x.useRef(null),M=x.useRef(null),U=D?.registerInput,Z=x.useCallback(oe=>U?.(oe,{controlRef:re,value:void 0}),[U]),ae=sa(y,M,z,Z);Me(()=>{M.current?.checked&&B(!0)},[B]),Me(()=>{if(M.current){if(q&&Y){z(null);return}z(M.current)}},[Y,q,z]);const ce=ka(),W=co({id:j}),ue=v?void 0:W,ve=Fv(h,X,M,!v,ue),ee={role:"radio","aria-checked":Y,"aria-labelledby":ve,[ej]:Y?"":void 0,id:v?W:ce,onKeyDown(oe){oe.key==="Enter"&&oe.preventDefault()},onClick(oe){if(oe.defaultPrevented||q||Q)return;oe.preventDefault();const me=M.current;me&&Xc(me,oe)},onFocus(oe){oe.defaultPrevented||q||Q||!E||(M.current?.click(),_(!1))}},{getButtonProps:he,buttonRef:te}=na({disabled:q,native:v,composite:!1}),ke={type:"radio",ref:ae,form:J,id:ue,name:I,tabIndex:-1,style:I?ru:_i,"aria-hidden":!0,...b!==void 0?{value:Ph(b)}:mn,disabled:q,checked:Y,required:G,readOnly:Q,onChange(oe){if(oe.nativeEvent.defaultPrevented||q||Q||b===void 0)return;const me=qe(Qn,oe.nativeEvent);O(b,me),!me.isCanceled&&H(!0)},onClick(oe){oe.stopPropagation()},onFocus(){re.current?.focus()}},le=x.useMemo(()=>({...L,required:G,disabled:q,readOnly:Q,checked:Y}),[L,q,Q,Y,G]),de=le,Se=S!==void 0,Te=[a,re,te],Le=[ee,k,he,K,D?oe=>D.getValidationProps(q,oe):mn],Ae=yt("span",t,{enabled:!Se,state:le,ref:Te,props:Le,stateAttributesMapping:Jy});return s.jsxs(IE.Provider,{value:de,children:[Se?s.jsx(ME,{tag:"span",render:o,className:c,style:w,state:le,refs:Te,props:Le,stateAttributesMapping:Jy}):Ae,s.jsx("input",{...ke,suppressHydrationWarning:!0})]})}),WV=x.forwardRef(function(t,a){const{render:o,className:c,style:d,keepMounted:f=!1,...p}=t,h=ZV(),b=h.checked,{mounted:y,transitionStatus:v,setMounted:j}=Oi(b),w={...h,transitionStatus:v},k=x.useRef(null),S=f||y,N=yt("span",t,{ref:[a,k],state:w,props:p,stateAttributesMapping:Jy});return oa({batch:!0,enabled:!b,open:b,ref:k,onComplete(){b||j(!1)}}),S?N:null});function nj(e){const{children:t,elementsRef:a,labelsRef:o,onMapChange:c}=e,d=Ie(c),[,f]=x.useState(!1),p=Ps(eF).current,h=Ps(JV).current,b=x.useRef(0),y=x.useRef(!0),v=x.useRef(null),j=x.useRef(null),w=Ie(()=>{y.current||(y.current=!0,f(E=>!E))}),k=Ie((E,D)=>{h.set(E,D),w()}),S=Ie(E=>{h.delete(E),w()}),N=Ie(E=>{const D=new Map;return a.current.length=0,o&&(o.current.length=0),E.forEach(I=>{D.set(I.element,{...I.registration.metadata??{},index:I.index}),a.current[I.index]=I.element,o&&(o.current[I.index]=I.registration.label!==void 0?I.registration.label:I.registration.textRef?.current?.textContent??I.element.textContent)}),b.current=a.current.length,D});function R(E){if(j.current?.disconnect(),j.current=null,typeof MutationObserver!="function"||E.length<2)return;const D=new MutationObserver(O=>{if(!sF(O))return;let _=null;for(const z of E)if(z.isConnected){if(_&&_E(_,z)>0){D.disconnect(),w();return}_=z}});j.current=D;const I=new Set;for(let O=1;OD.observe(O,{childList:!0}))}const P=Ie(()=>{const[E,D]=tF(h),I=N(E),O=v.current,_=!O||O.length!==E.length||E.some((z,H)=>{const B=O[H];return z.index!==B.index||z.element!==B.element||z.registration.index!==B.registration.index||z.registration.metadata!==B.registration.metadata});R(D),v.current=E,y.current=!1,_&&(p.forEach(z=>z(I)),d(I))});Me(()=>(!y.current&&v.current&&N(v.current),()=>{a.current=[],o&&(o.current=[])}),[a,o,N]),Me(()=>{y.current&&P()}),Me(()=>()=>{j.current?.disconnect(),y.current=!0},[]);const T=Ie(E=>(p.add(E),()=>{p.delete(E)})),C=x.useMemo(()=>({register:k,unregister:S,subscribeMapChange:T,nextIndexRef:b}),[k,S,T,b]);return s.jsx(OE.Provider,{value:C,children:t})}function JV(){return new Map}function eF(){return new Set}function tF(e){const t=new Set,a=[],o=[];e.forEach((d,f)=>{if(!f.isConnected)return;const p=d.index,h={index:p??-1,element:f,registration:d};p===null?o.push(h):p>=0&&(t.add(p),a.push(h))});let c=0;return o.sort((d,f)=>_E(d.element,f.element)),o.forEach(d=>{for(;t.has(c);)c+=1;d.index=c,a.push(d),c+=1}),t.size>0&&a.sort((d,f)=>d.index-f.index),[a,o.map(d=>d.element)]}function nF(e,t){let a=e.parentElement;for(;a&&!a.contains(t);)a=a.parentElement;return a}function sF(e){for(const t of e)for(let a=0;a{if(C.current=P.current[H]??null,(p??k)(H),B){const L=P.current[H];gE(N.current,L,d,a)}}),I=Ie(H=>{if(H.size===0)return;if(T.current){const $=P.current,X=$.indexOf(C.current);if(X===-1){const K=$[E];!K||go($,E,v)?D(aF($,v)):C.current=K}else X!==E&&D(X);return}T.current=!0;const B=Array.from(H.keys()),L=B.find($=>$?.hasAttribute(ej))??null,F=L?H.get(L)?.index??-1:-1;if(F!==-1)D(F);else if(go(B,E,v)){const $=_s(B,{disabledIndices:v});ho(B,$)||D($)}gE(N.current,L,d,a)});Me(()=>{if(v==null||f!=null||!T.current)return;const H=P.current;if(go(H,E,v)){const B=_s(H,{disabledIndices:v});ho(H,B)||D(B)}},[v,f,E,P,D]);const O=Ie((H,B,L)=>c?c(H,B,L,P):L),_=Ie(H=>{const B=H.key===Xy||H.key===Qy;if(!Oh.has(H.key)||!b&&B||lF(H,j)||!N.current)return;const F=d==="rtl",$=F?Ky:Yy,X=F?Yy:Ky,K=a==="vertical"?Gy:$,q=a==="vertical"?qy:X,Q=fs(H.nativeEvent);if(Q!=null&&hE(Q)&&!LE(Q)){const U=Q.selectionStart,Z=Q.selectionEnd,ae=Q.value;if(U==null||H.shiftKey||U!==Z||H.key!==q&&U0)return}let G=E;const J=rh(P,v),Y=ry(P,v);o!=null&&(G=o({disabledIndices:v,elementsRef:P,event:H,highlightedIndex:E,loopFocus:t,maxIndex:Y,minIndex:J,onLoop:O,orientation:a,rtl:F}));const re=a!=="vertical"&&H.key===$||a!=="horizontal"&&H.key===Gy,M=a!=="vertical"&&H.key===X||a!=="horizontal"&&H.key===qy;b&&(H.key===Xy?G=J:H.key===Qy&&(G=Y)),G===E&&(re||M)&&(t&&G===Y&&re?(G=J,c&&(G=c(H,E,G,P))):t&&G===J&&M?(G=Y,c&&(G=c(H,E,G,P))):G=_s(P.current,{startingIndex:G,decrement:M,disabledIndices:v})),G!==E&&!ho(P.current,G)&&(y&&H.stopPropagation(),(S||B||re||M)&&H.preventDefault(),D(G,!0),queueMicrotask(()=>{P.current[G]?.focus()}))});return{props:{ref:R,onFocus(H){const B=N.current,L=fs(H.nativeEvent);!B||L==null||!hE(L)||L.setSelectionRange(0,L.value.length)},onKeyDown:_},highlightedIndex:E,onHighlightedIndexChange:D,elementsRef:P,onMapChange:I,relayKeyboardEvent:_}}function aF(e,t){let a=-1;for(let o=0;o({highlightedIndex:_,onHighlightedIndexChange:z,highlightItemOnHover:C,relayKeyboardEvent:L}),[_,z,C,L]);return s.jsx(TC.Provider,{value:$,children:s.jsx(nj,{elementsRef:H,onMapChange:X=>{S?.(X),B(X)},children:F})})}const iF=[mE],zE=x.forwardRef(function(t,a){const{render:o,className:c,disabled:d,readOnly:f,required:p,onValueChange:h,value:b,defaultValue:y,form:v,name:j,inputRef:w,id:k,style:S,...N}=t,{setTouched:R,setFocused:P,validationMode:T,name:C,disabled:E,state:D,validation:I,setDirty:O,setFilled:_,validityData:z}=Na(),{labelId:H}=yl(),{clearErrors:B,elementRef:L}=Zc(),F=TB(!0),$=E||d,X=C??j,K=ka(k),[q,Q]=Ka({controlled:b,default:y,name:"RadioGroup",state:"value"}),[G,J]=x.useState(!1),Y=Ie((te,ke)=>{h?.(te,ke),!ke.isCanceled&&Q(te)}),re=I.getInputControl,M=x.useMemo(()=>({get current(){return re()}}),[re]),U=x.useRef(null),Z=x.useRef(null);function ae(te){let ke;return w&&(typeof w=="function"?ke=w(te):w.current=te),U.current=te,ke}const ce=Ie(te=>{if(!te||te.disabled)return;Z.current||(Z.current=te);const ke=U.current,le=te.checked||ke==null||ke.disabled?ae(te):void 0;return()=>{Z.current===te&&(Z.current=null),U.current===te?le?(le(),U.current=null):ae(null):le?.()}}),W=Ie(()=>{const te=L.current;if(!te)return q??null;for(const ke of I.registeredInputs.keys())if(ke.checked&&y4(ke,te))return q??null;return null});nu(M,K,q??null,W,!$,j),ia(q,()=>{B(X),O(q!==z.initialValue),_(q!=null),I.change(q);const te=Z.current;q==null&&te&&!te.disabled&&ae(te)});const ue=H??F?.legendId,ve={...D,disabled:$??!1,required:p??!1,readOnly:f??!1},ee=x.useMemo(()=>({checkedValue:q,disabled:$,form:v,validation:I,name:X,readOnly:f,registerInputRef:ce,required:p,setCheckedValue:Y,setTouched:J,touched:G}),[q,$,v,I,X,f,ce,p,Y,J,G]),he={id:k,role:"radiogroup","aria-required":p||void 0,"aria-disabled":$||void 0,"aria-readonly":f||void 0,"aria-labelledby":ue,onFocus(){P(!0)},onBlur(te){Ze(te.currentTarget,te.relatedTarget)||(R(!0),P(!1),T==="onBlur"&&I.commit(q))},onKeyDownCapture(te){te.key.startsWith("Arrow")&&(J(!0),P(!0))}};return s.jsx(DE.Provider,{value:ee,children:s.jsx(oF,{render:o,className:c,style:S,state:ve,props:[he,N,te=>I.getValidationProps($??!1,te)],refs:[a],stateAttributesMapping:Ti,enableHomeAndEndKeys:!1,modifierKeys:iF})})});function _h({className:e,...t}){return s.jsx(zE,{"data-slot":"radio-group",className:Ue("flex flex-col gap-2",e),...t})}function jo({className:e,...t}){return s.jsx(PE,{"data-slot":"radio-group-item",className:Ue("relative inline-flex size-3.5 flex-none cursor-pointer items-center justify-center rounded-full border border-control-border bg-control","outline-none transition-colors duration-150 ease-out","hover:border-control-border-hover","data-checked:border-primary data-checked:bg-primary","focus-visible:shadow-focus","data-disabled:cursor-not-allowed data-disabled:opacity-45",e),...t,children:s.jsx(WV,{"data-slot":"radio-group-indicator",className:"grid place-content-center data-unchecked:hidden",children:s.jsx("span",{className:"block size-[5px] rounded-full bg-primary-foreground"})})})}function BE(e){const t=x.useRef(!0);t.current&&(t.current=!1,e())}const HE=x.createContext(void 0),UE=x.createContext(void 0),VE=x.createContext(void 0);function wo(){const e=x.useContext(HE);if(e===void 0)throw new Error(un(60));return e}function sj(){const e=x.useContext(UE);if(e===void 0)throw new Error(un(101));return e}function FE(){const e=x.useContext(VE);if(e===void 0)throw new Error(un(61));return e}function cF(e,t,a=Object.is){const{length:o}=e;if(o!==t.length)return!1;for(let c=0;cObject.is(e,t);function ca(e,t,a){return e==null||t==null?Object.is(e,t):a(e,t)}function $E(e,t,a){return Array.isArray(e)&&Array.isArray(t)?!cF(e,t,(o,c)=>ca(o,c,a)):e!==t}function zh(e,t,a){return e?e.some(o=>o===void 0?!1:ca(t,o,a)):!1}function uu(e,t,a){return e?e.findIndex(o=>o===void 0?!1:ca(o,t,a)):-1}function uF(e,t){if(t!==Lh)return o=>zh(e,o,t);const a=new Set(e);return a.delete(void 0),o=>a.has(o)&&(o!==0||e.some(c=>Object.is(o,c)))}function bf(e,t,a,o){const c=o&&Array.isArray(t)?e.findIndex(uF(t,a)):uu(e,t,a);return c===-1?null:c}function qE(e,t,a,o,c,d){return zh(o,t,c)?d!=null&&e>d&&zh(o,a[d],c)?d:e:e===d?bf(a,o,c,!0):d}function GE(e,t,a){return e.filter(o=>!ca(t,o,a))}function dF(e){return typeof e=="object"&&e!=null&&Array.isArray(e.items)}function rj(e){return dF(e?.[0])}function Bh(e){return rj(e)?e.flatMap(t=>t.items):e}function KE(e){if(!Array.isArray(e))return e!=null&&"null"in e;const t=e;if(rj(t)){for(const a of t)for(const o of a.items)if(o&&o.value==null&&o.label!=null)return!0;return!1}for(const a of t)if(a&&a.value==null&&a.label!=null)return!0;return!1}function So(e,t){if(t&&e!=null)return t(e)??"";if(e&&typeof e=="object"){if("label"in e&&e.label!=null)return String(e.label);if("value"in e)return String(e.value)}return Ph(e)}function Ca(e,t){return t&&e!=null?t(e)??"":e&&typeof e=="object"&&"value"in e&&"label"in e?Ph(e.value):Ph(e)}function YE(e,t,a){function o(){return So(e,a)}if(a&&e!=null)return a(e);if(e&&typeof e=="object"&&"label"in e&&e.label!=null)return e.label;if(t&&!Array.isArray(t))return(Object.hasOwn(t,e)?t[e]:void 0)??o();if(Array.isArray(t)){const d=Bh(t);if(e==null||typeof e!="object"){const f=d.find(p=>p.value===e);return f&&f.label!=null?f.label:o()}if("value"in e){const f=d.find(p=>p&&p.value===e.value);if(f&&f.label!=null)return f.label}}return o()}function fF(e,t,a){return e.reduce((o,c,d)=>(d>0&&o.push(", "),o.push(s.jsx(x.Fragment,{children:YE(c,t,a)},d)),o),[])}const pF={id:e=>e.id,labelId:e=>e.labelId,modal:e=>e.modal,items:e=>e.items,itemToStringLabel:e=>e.itemToStringLabel,isItemEqualToValue:e=>e.isItemEqualToValue,value:e=>e.value,hasSelectedValue:e=>{const{value:t,multiple:a,itemToStringValue:o}=e;return t==null?!1:a&&Array.isArray(t)?t.length>0:Ca(t,o)!==""},hasNullItemLabel:(e,t)=>t?KE(e.items):!1,open:e=>e.open,mounted:e=>e.mounted,forceMount:e=>e.forceMount,transitionStatus:e=>e.transitionStatus,openMethod:e=>e.openMethod,activeIndex:e=>e.activeIndex,selectedIndex:e=>e.selectedIndex,isActive:(e,t)=>e.activeIndex===t,isSelected:(e,t)=>{const a=e.isItemEqualToValue,o=e.value;return e.multiple?Array.isArray(o)&&o.some(c=>ca(t,c,a)):ca(t,o,a)},isSelectedByFocus:(e,t)=>e.selectedIndex===t,popupProps:e=>e.popupProps,triggerProps:e=>e.triggerProps,triggerElement:e=>e.triggerElement,positionerElement:e=>e.positionerElement,listElement:e=>e.listElement,popupSide:e=>e.popupSide,scrollUpArrowVisible:e=>e.scrollUpArrowVisible,scrollDownArrowVisible:e=>e.scrollDownArrowVisible,hasScrollArrows:e=>e.hasScrollArrows},Tl=1;function XE(e,t){return Math.max(0,e-t)}function mF(e,t){if(t<=0)return 0;const a=Li(e,0,t),o=a,c=t-a,d=o<=Tl,f=c<=Tl;return d&&f?o<=c?0:t:d?0:f?t:a}function hF(e){const{id:t,value:a,defaultValue:o=null,onValueChange:c,open:d,defaultOpen:f=!1,onOpenChange:p,name:h,form:b,autoComplete:y,disabled:v=!1,readOnly:j=!1,required:w=!1,modal:k=!0,actionsRef:S,inputRef:N,onOpenChangeComplete:R,items:P,multiple:T=!1,itemToStringLabel:C,itemToStringValue:E,isItemEqualToValue:D=Lh,highlightItemOnHover:I=!0,children:O}=e,{clearErrors:_}=Zc(),{setDirty:z,setTouched:H,setFocused:B,validityData:L,setFilled:F,name:$,disabled:X,validation:K,validationMode:q}=Na(),Q=co({id:t}),G=X||v,J=$??h,[Y,re]=Ka({controlled:a,default:T?o??Pr:o,name:"Select",state:"value"}),[M,U]=Ka({controlled:d,default:f,name:"Select",state:"open"}),Z=x.useRef([]),ae=x.useRef([]),ce=x.useRef(null),W=x.useRef(null),ue=x.useRef(0),ve=x.useRef(null),ee=x.useRef([]),he=x.useRef(!1),te=x.useRef(null),ke=x.useRef(null),le=x.useRef({allowSelectedMouseUp:!1,allowUnselectedMouseUp:!1,dragY:0}),de=x.useRef(!1),Se=x.useRef(Y),{mounted:Te,setMounted:Le,transitionStatus:Ae}=Oi(M),{openMethod:oe,triggerProps:me}=EE(M),pe=Ps(()=>new iu({id:Q,labelId:void 0,modal:k,multiple:T,itemToStringLabel:C,itemToStringValue:E,isItemEqualToValue:D,value:Y,open:M,mounted:Te,transitionStatus:Ae,items:P,forceMount:!1,openMethod:null,activeIndex:null,selectedIndex:null,popupProps:mn,triggerProps:mn,triggerElement:null,positionerElement:null,listElement:null,popupSide:null,scrollUpArrowVisible:!1,scrollDownArrowVisible:!1,hasScrollArrows:!1},{setValue:Kt,setOpen:Kt,handleScrollArrowVisibility:Kt,onOpenChangeComplete:Kt,listRef:Z,popupRef:ce,scrollHandlerRef:W,scrollArrowsMountedCountRef:ue,valueRef:ve,valuesRef:ee,labelsRef:ae,typingRef:he,selectionRef:le,firstItemTextRef:te,selectedItemTextRef:ke,alignItemWithTriggerActiveRef:de,initialValueRef:Se},pF)).current,Ce=pe.useState("activeIndex"),Ne=pe.useState("selectedIndex"),be=pe.useState("triggerElement"),De=pe.useState("positionerElement"),Ge=fV(oe),Ct=oe??Ge,Tt=x.useMemo(()=>T?"":Ca(Y,E),[T,Y,E]),Mt=x.useMemo(()=>T&&Array.isArray(Y)?Y.map(xt=>Ca(xt,E)):Ca(Y,E),[T,Y,E]),ot=Wn(be),Kn=Ie(()=>Mt);nu(ot,Q,Y,Kn,!G,h);const ms=T?Array.isArray(Y)&&Y.length>0:Y!=null&&Tt!=="";Me(()=>{F(ms)},[ms,F]),Me(function(){const jt=bf(ee.current,Y,D,T);jt===null&&(ke.current=null),!M&&pe.set("selectedIndex",jt)},[T,M,Y,D,pe]),ia(Y,()=>{_(J),z($E(Y,L.initialValue,D)),K.change(Y)});const Yn=Ie((xt,jt)=>{p?.(xt,jt),!jt.isCanceled&&(U(xt),!xt&&(jt.reason===bo||jt.reason===uh)&&(H(!0),B(!1),q==="onBlur"&&K.commit(Y)))}),vs=Ie(()=>{Le(!1),pe.update({activeIndex:null,openMethod:null,scrollUpArrowVisible:!1,scrollDownArrowVisible:!1}),R?.(!1)});oa({enabled:!S,open:M,ref:ce,onComplete(){M||vs()}}),x.useImperativeHandle(S,()=>({unmount:vs}),[vs]);const it=Ie((xt,jt)=>{c?.(xt,jt),!jt.isCanceled&&re(xt)}),$t=Ie(xt=>{const jt=XE(xt.scrollHeight,xt.clientHeight),wt=mF(xt.scrollTop,jt),Er=wt>0,ar=wtLE(Z.current[xt]),onMatch(xt){M?pe.set("activeIndex",xt):it(ee.current[xt],qe(Qn))},onTyping(xt){he.current=xt}}),ts=x.useMemo(()=>ta(qt.reference,Dt.reference,nt.reference,rn.reference,me),[rn.reference,qt.reference,Dt.reference,nt.reference,me]),Fn=x.useMemo(()=>ta(mf,qt.floating,Dt.floating,nt.floating),[qt.floating,Dt.floating,nt.floating]),$n=Dt.item??mn;pe.useContextCallback("setValue",it),pe.useContextCallback("setOpen",Yn),pe.useContextCallback("handleScrollArrowVisibility",$t),pe.useContextCallback("onOpenChangeComplete",R),BE(()=>{pe.update({popupProps:Fn,triggerProps:ts})}),pe.useSyncedValues({id:Q,modal:k,multiple:T,value:Y,open:M,mounted:Te,transitionStatus:Ae,popupProps:Fn,triggerProps:ts,items:P,itemToStringLabel:C,itemToStringValue:E,isItemEqualToValue:D,openMethod:Ct});const Dn=x.useMemo(()=>({disabled:G,readOnly:j,required:w,multiple:T,highlightItemOnHover:I,itemProps:$n}),[G,j,w,T,I,$n]),en=sa(N,K.inputRef),cs=T?void 0:J,Et=x.useMemo(()=>!T||!Array.isArray(Y)||!J?null:Y.map(xt=>{const jt=Ca(xt,E);return s.jsx("input",{type:"hidden",form:b,name:J,value:jt,disabled:G},jt)}),[T,Y,b,J,E,G]);return s.jsxs(HE.Provider,{value:pe,children:[s.jsx(UE.Provider,{value:Dn,children:s.jsx(VE.Provider,{value:Vn,children:O})}),s.jsx("input",{...K.getValidationProps(G,{onFocus(){pe.state.triggerElement?.focus({focusVisible:!0})},onChange(xt){if(xt.nativeEvent.defaultPrevented||G||j)return;const jt=xt.currentTarget.value,wt=qe(Qn,xt.nativeEvent);function Er(){if(T)return;const ar=jt.toLowerCase();let Fr=ee.current.findIndex(al=>Ca(al,E).toLowerCase()===ar||So(al,C).toLowerCase()===ar);Fr===-1&&(Fr=ee.current.findIndex((al,ln)=>{const gc=ae.current[ln];return gc!=null&&gc.toLowerCase()===ar}));const Nn=ee.current[Fr];Nn!=null&&it(Nn,wt)}pe.set("forceMount",!0),queueMicrotask(Er)}}),id:Q&&cs==null?`${Q}-hidden-input`:void 0,form:b,name:cs,autoComplete:y,value:Tt,disabled:G,required:w&&!(T&&ms),readOnly:j,ref:en,style:J?ru:_i,tabIndex:-1,"aria-hidden":!0,suppressHydrationWarning:!0}),Et]})}function QE(e,t){return e??t}const Hh=5;function ZE(e,t){const a=gF(t);return e.clientX>=a.left-Hh&&e.clientX<=a.right+Hh&&e.clientY>=a.top-Hh&&e.clientY<=a.bottom+Hh}function gF(e){const t=e.getBoundingClientRect(),a=Cn(e);if($v)return t;const o=a.getComputedStyle(e,"::before"),c=a.getComputedStyle(e,"::after");if(!(o.content!=="none"||c.content!=="none"))return t;const f=parseFloat(o.width)||0,p=parseFloat(o.height)||0,h=parseFloat(c.width)||0,b=parseFloat(c.height)||0,y=Math.max(t.width,f,h),v=Math.max(t.height,p,b),j=y-t.width,w=v-t.height;return{left:t.left-j/2,right:t.right+j/2,top:t.top-w/2,bottom:t.bottom+w/2}}const xF="data-popup-side",bF=400,vF={...Yv,...Ti,popupSide:e=>e?{[xF]:e}:null,value:()=>null},yF=x.forwardRef(function(t,a){const{render:o,className:c,id:d,disabled:f=!1,nativeButton:p=!0,style:h,...b}=t,{setTouched:y,setFocused:v,validationMode:j,validation:w,state:k,disabled:S}=Na(),{labelId:N}=yl(),R=wo(),{readOnly:P,required:T,disabled:C}=sj(),E=S||C||f,D=R.useState("open"),I=R.useState("mounted"),O=R.useState("value"),_=R.useState("triggerProps"),z=R.useState("positionerElement"),H=R.useState("listElement"),B=R.useState("popupSide"),L=R.useState("id"),F=R.useState("labelId"),$=R.useState("hasSelectedValue"),X=I&&z?B:null,K=d??L,q=QE(N,F);co({id:d});const Q=Wn(z),G=x.useRef(null),{getButtonProps:J,buttonRef:Y}=na({disabled:E,native:p}),re=R.useStateSetter("triggerElement"),M=er(),U=er(),Z=er();x.useEffect(()=>{if(D)return Z.start(bF,()=>{R.context.selectionRef.current.allowUnselectedMouseUp=!0,R.context.selectionRef.current.allowSelectedMouseUp=!0}),()=>{Z.clear()};R.context.selectionRef.current={allowSelectedMouseUp:!1,allowUnselectedMouseUp:!1,dragY:0},U.clear()},[D,R,U,Z]);const ae=ta(_,{id:K,role:"combobox","aria-expanded":D,"aria-haspopup":"listbox","aria-controls":D?H?.id??Jm(z)?.id:void 0,"aria-labelledby":q,"aria-readonly":P||void 0,"aria-required":T||void 0,tabIndex:E?-1:0,onFocus(ue){v(!0),D&&R.context.alignItemWithTriggerActiveRef.current&&R.context.setOpen(!1,qe(Qn,ue.nativeEvent)),M.start(0,()=>{R.set("forceMount",!0)})},onBlur(ue){Ze(z,ue.relatedTarget)||(y(!0),v(!1),j==="onBlur"&&w.commit(O))},onMouseDown(ue){if(D)return;const ve=Gt(ue.currentTarget);function ee(he){if(!G.current)return;const te=he.target;Ze(G.current,te)||Ze(Q.current,te)||ZE(he,G.current)||R.context.setOpen(!1,qe(_1,he))}U.start(0,()=>{ve.addEventListener("mouseup",ee,{once:!0})})}},b,J),ce=w.getValidationProps(E,ae);ce.role="combobox";const W={...k,open:D,disabled:E,value:O,readOnly:P,popupSide:X,placeholder:!$};return yt("button",t,{ref:[a,G,Y,re],state:W,stateAttributesMapping:vF,props:ce})}),jF={value:()=>null},wF=x.forwardRef(function(t,a){const{className:o,render:c,children:d,placeholder:f,style:p,...h}=t,b=wo(),y=b.useState("value"),v=b.useState("items"),j=b.useState("itemToStringLabel"),w=b.useState("hasSelectedValue"),k=!w&&f!=null&&d==null,S=b.useState("hasNullItemLabel",k),N={value:y,placeholder:!w};let R=null;return typeof d=="function"?R=d(y):d!=null?R=d:k&&!S?R=f:Array.isArray(y)?R=fF(y,v,j):R=YE(y,v,j),yt("span",t,{state:N,ref:[a,b.context.valueRef],props:[{children:R},h],stateAttributesMapping:jF})}),SF=x.forwardRef(function(t,a){const{render:o,className:c,style:d,...f}=t,b={open:wo().useState("open")};return yt("span",t,{state:b,ref:a,props:[{"aria-hidden":!0,children:"▼"},f],stateAttributesMapping:Kv})}),NF=x.forwardRef(function(t,a){const o=wo(),c=o.useState("mounted"),d=o.useState("forceMount");return c||d?s.jsx(mh,{ref:a,...t}):null}),WE=x.createContext(void 0);function kF(){const e=x.useContext(WE);if(!e)throw new Error(un(59));return e}function Uh(e,t){e&&Object.assign(e.style,t)}const CF={position:"relative",maxHeight:"100%",overflowX:"hidden",overflowY:"auto"},TF=20;function aj(e,t,a,o){const[c,d]=x.useState(!1);Me(()=>{if(!e||!t||a==null){d(!1);return}const f=Gt(a).documentElement.clientWidth,p=a.offsetWidth;d(f>0&&p>0&&p>=f-TF)},[e,t,a]),NE(e&&(!t||c),o)}const EF={position:"fixed"},AF=x.forwardRef(function(t,a){const{anchor:o,className:c,render:d,positionMethod:f,side:p,align:h,sideOffset:b,alignOffset:y,collisionBoundary:v="clipping-ancestors",collisionPadding:j,arrowPadding:w,sticky:k,disableAnchorTracking:S,alignItemWithTrigger:N=!0,collisionAvoidance:R=rT,style:P,...T}=t,C=wo(),E=FE(),D=C.useState("open"),I=C.useState("mounted"),O=C.useState("modal"),_=C.useState("value"),z=C.useState("openMethod"),H=C.useState("positionerElement"),B=C.useState("triggerElement"),L=C.useState("isItemEqualToValue"),F=C.useState("transitionStatus"),$=x.useRef(null),X=x.useRef(null),[K,q]=x.useState(N),Q=I&&K&&z!=="touch";!I&&K!==N&&q(N),x.useImperativeHandle(C.context.alignItemWithTriggerActiveRef,()=>Q),aj((Q||O)&&D,z==="touch",H,B);const G=Eh({anchor:o,floatingRootContext:E,positionMethod:f,mounted:I,side:p,sideOffset:b,align:h,alignOffset:y,arrowPadding:w,collisionBoundary:v,collisionPadding:j,sticky:k,disableAnchorTracking:S??Q,collisionAvoidance:R,keepMounted:!0}),J=Q?"none":G.side,Y=Q?EF:G.positionerStyles,re={open:D,side:J,align:G.align,anchorHidden:G.anchorHidden};Me(()=>{C.set("popupSide",G.side)},[C,G.side]);const M=C.useStateSetter("positionerElement"),U=Ah(t,re,{styles:Y,transitionStatus:F,props:T,refs:[a,M],hidden:!I,inert:!D}),Z=x.useRef(0),ae=Ie(W=>{if(C.context.valuesRef.current.length===0)return;const ue=Z.current;Z.current=W.size;const ve=qe(Qn);if(ue!==0&&!C.state.multiple&&_!==null&&uu(C.context.valuesRef.current,_,L)===-1){const he=C.context.initialValueRef.current,ke=he!=null&&uu(C.context.valuesRef.current,he,L)!==-1?he:null;C.context.setValue(ke,ve),ke===null&&(C.set("selectedIndex",null),C.context.selectedItemTextRef.current=null)}if(ue!==0&&C.state.multiple&&Array.isArray(_)){const ee=_.filter(he=>uu(C.context.valuesRef.current,he,L)!==-1);ee.length!==_.length&&(C.context.setValue(ee,ve),ee.length===0&&(C.set("selectedIndex",null),C.context.selectedItemTextRef.current=null))}if(D&&Q){C.update({scrollUpArrowVisible:!1,scrollDownArrowVisible:!1});const ee={height:""};Uh(H,ee),Uh(C.context.popupRef.current,ee)}}),ce=x.useMemo(()=>({...G,side:J,alignItemWithTriggerActive:Q,setControlledAlignItemWithTrigger:q,scrollUpArrowRef:$,scrollDownArrowRef:X}),[G,J,Q,q]);return s.jsx(nj,{elementsRef:C.context.listRef,labelsRef:C.context.labelsRef,onMapChange:ae,children:s.jsxs(WE.Provider,{value:ce,children:[I&&O&&s.jsx(Dh,{inert:Rh(!D),cutout:B}),U]})})}),Vh="base-ui-disable-scrollbar",JE={className:Vh,getElement(e){return s.jsx("style",{nonce:e,href:Vh,precedence:"base-ui:low",children:`.${Vh}{scrollbar-width:none}.${Vh}::-webkit-scrollbar{display:none}`})}},RF=x.createContext(void 0);function eA(e){return x.useContext(RF)}const OF=x.createContext(void 0),MF={disableStyleElements:!1};function DF(){return x.useContext(OF)??MF}const tA="--transform-origin",IF={...Wc,...uo},PF=x.forwardRef(function(t,a){const{render:o,className:c,style:d,finalFocus:f,...p}=t,h=wo(),{multiple:b,readOnly:y,highlightItemOnHover:v}=sj(),j=FE(),{side:w,align:k,alignItemWithTriggerActive:S,isPositioned:N,setControlledAlignItemWithTrigger:R}=kF(),P=eA()!=null,T=gf(),{nonce:C,disableStyleElements:E}=DF(),D=h.useState("id"),I=h.useState("open"),O=h.useState("openMethod"),_=h.useState("mounted"),z=h.useState("popupProps"),H=h.useState("transitionStatus"),B=h.useState("triggerElement"),L=h.useState("positionerElement"),F=h.useState("listElement"),$=x.useRef(!1),X=x.useRef(!1),K=x.useRef({}),q=tu(),Q=Ie(re=>{if(!L||!h.context.popupRef.current||!X.current)return;const M=L.style.top==="0px",U=L.style.bottom==="0px";if($.current||!S||!M&&!U){h.context.handleScrollArrowVisibility(re);return}const Z=sA(L),ae=vf(L.getBoundingClientRect().height,"y",Z),ce=Gt(L),W=Cn(L),ue=W.getComputedStyle(L),ve=parseFloat(ue.marginTop),ee=parseFloat(ue.marginBottom),he=nA(W.getComputedStyle(h.context.popupRef.current)),te=Math.min(ce.documentElement.clientHeight-ve-ee,he),ke=re.scrollTop,le=Fh(re);let de=null;const Se=oe=>{L.style.height=`${oe}px`},Te=M?le-ke:ke,Le=Math.min(ae+Te,te);if(Te<=Tl){const oe=Li(Te,0,te-ae);oe>0&&Se(ae+oe),re.scrollTop=M?le:0,te-(ae+oe)<=Tl&&($.current=!0),h.context.handleScrollArrowVisibility(re);return}if(te-Le>Tl)de=M?1/0:0;else if(U&&keTl&&(re.scrollTop=oe)}Ae>=te-Tl&&($.current=!0),h.context.handleScrollArrowVisibility(re)});x.useImperativeHandle(h.context.scrollHandlerRef,()=>Q,[Q]),oa({open:I,ref:h.context.popupRef,onComplete(){I&&h.context.onOpenChangeComplete(!0)}});const G={open:I,transitionStatus:H,side:w,align:k};Me(()=>{!L||!h.context.popupRef.current||Object.keys(K.current).length||(K.current={top:L.style.top||"0",left:L.style.left||"0",right:L.style.right,height:L.style.height,bottom:L.style.bottom,minHeight:L.style.minHeight,maxHeight:L.style.maxHeight,marginTop:L.style.marginTop,marginBottom:L.style.marginBottom})},[h,L]),Me(()=>{I||S||(X.current=!1,$.current=!1,Uh(L,K.current))},[I,S,L]),Me(()=>{const re=h.context.popupRef.current;if(!I||!B||!L||!re||S&&!N||h.state.transitionStatus==="ending")return;if(X.current=!0,re.style.removeProperty(tA),!S){q.request(()=>h.context.handleScrollArrowVisibility(F||re));return}const M=_F(re);try{let U=h.context.selectedItemTextRef.current;U?.isConnected||(U=!h.select("hasSelectedValue")&&h.context.firstItemTextRef.current?.isConnected?h.context.firstItemTextRef.current:null);const Z=h.context.valueRef.current,ae=Cn(L),ce=ae.getComputedStyle(L),W=ae.getComputedStyle(re),ue=Gt(B),ve=sA(B),ee=$h(B.getBoundingClientRect(),ve),he=$h(L.getBoundingClientRect(),ve),te=ee.height,ke=F||re,le=ke.scrollHeight,de=parseFloat(W.borderBottomWidth),Se=parseFloat(ce.marginTop)||10,Te=parseFloat(ce.marginBottom)||10,Le=parseFloat(ce.minHeight)||100,Ae=nA(W),oe=5,me=5,pe=20,Ce=ue.documentElement.clientHeight-Se-Te,Ne=ue.documentElement.clientWidth,be=Ce-ee.bottom+te;let De,Ge=T==="rtl"?ee.right-he.width:ee.left,Ct=0;if(U&&Z){const rn=$h(Z.getBoundingClientRect(),ve);De=$h(U.getBoundingClientRect(),ve),Ge=he.left+(T==="rtl"?rn.right-De.right:rn.left-De.left);const nt=rn.top-ee.top+rn.height/2;Ct=De.top-he.top+De.height/2-nt}const Tt=be+Ct+Te+de;let Mt=Math.min(Ce,Tt);const ot=Ce-Se-Te,Kn=Tt-Mt,ms=Ne-me;L.style.left=`${Li(Ge,oe,ms-he.width)}px`,L.style.height=`${Mt}px`,L.style.maxHeight="none",L.style.marginTop=`${Se}px`,L.style.marginBottom=`${Te}px`,re.style.height="100%";const Yn=Fh(ke),vs=Kn>=Yn-Tl;vs&&(Mt=Math.min(Ce,he.height)-(Kn-Yn));const it=ee.topCe-pe||Math.ceil(Mt)+Tl=ot?"0":`${rn}px`,L.style.height=`${Mt}px`,ke.scrollTop=Fh(ke)}else L.style.bottom="0",ke.scrollTop=Kn;if(De){const rn=he.top,nt=he.height,Dt=De.top+De.height/2,qt=Li(nt>0?(Dt-rn)/nt*100:50,0,100);re.style.setProperty(tA,`50% ${qt}%`)}(Vn===Ce||Mt>=Ae)&&($.current=!0),h.context.handleScrollArrowVisibility(ke),v&&h.state.selectedIndex===null&&h.state.activeIndex===null&&h.context.listRef.current[0]!=null&&h.set("activeIndex",0)}finally{M()}},[h,I,L,B,S,R,q,F,v,T,N]),x.useEffect(()=>{if(!S||!L||!I)return;const re=Cn(L);function M(U){h.context.setOpen(!1,qe(T4,U))}return St(re,"resize",M)},[h,S,L,I]);const J={...F?{role:"presentation"}:{role:"listbox","aria-multiselectable":b||void 0,"aria-readonly":y||void 0,id:`${D}-list`},onKeyDown(re){P&&Oh.has(re.key)&&re.stopPropagation()},onScroll(re){F||Q(re.currentTarget)},...S&&{style:F?{height:"100%"}:CF},className:!F&&S?JE.className:void 0},Y=yt("div",t,{ref:[a,h.context.popupRef],state:G,stateAttributesMapping:IF,props:[z,J,xf(H),p]});return s.jsxs(x.Fragment,{children:[!E&&JE.getElement(C),s.jsx(hh,{context:j,modal:!1,disabled:!_,openInteractionType:O,returnFocus:f,restoreFocus:!0,children:Y})]})});function nA(e){const t=e.maxHeight;return t.endsWith("px")&&parseFloat(t)||1/0}function Fh(e){return XE(e.scrollHeight,e.clientHeight)}function sA(e){return kT.getScale(e)}function vf(e,t,a){return e/a[t]}function $h(e,t){return nf({x:vf(e.x,"x",t),y:vf(e.y,"y",t),width:vf(e.width,"x",t),height:vf(e.height,"y",t)})}const rA=[["transform","none"],["scale","1"],["translate","0 0"]];function _F(e){const{style:t}=e,a={};for(const[o,c]of rA)a[o]=t.getPropertyValue(o),t.setProperty(o,c,"important");return()=>{for(const[o]of rA){const c=a[o];c?t.setProperty(o,c):t.removeProperty(o)}}}const aA=x.createContext(void 0);function lj(){const e=x.useContext(aA);if(!e)throw new Error(un(57));return e}const LF=x.memo(x.forwardRef(function(t,a){const{render:o,className:c,style:d,value:f=null,label:p,disabled:h=!1,nativeButton:b=!1,...y}=t,v=x.useRef(null),j=tj({guess:!0,label:p,textRef:v}),w=wo(),{itemProps:k,multiple:S,disabled:N,readOnly:R}=sj(),P=N||h,T=w.useState("isActive",j.index),C=w.useState("open"),E=w.useState("isSelected",f),D=w.useState("isSelectedByFocus",j.index),I=w.useState("isItemEqualToValue"),O=j.index,_=x.useRef(null);Me(()=>{const G=w.context.valuesRef.current;return G[O]=f,()=>{delete G[O]}},[O,f,w]),Me(()=>{const G=w.state.value,J=w.state.selectedIndex;let Y=J,re;S&&Array.isArray(G)?(Y=qE(O,f,w.context.valuesRef.current,G,I,J),re=Y===O,O===J&&!re&&(w.context.selectedItemTextRef.current=null)):(re=G!==void 0&&ca(f,G,I),re&&(Y=O)),w.set("selectedIndex",Y),re&&v.current&&(w.context.selectedItemTextRef.current=v.current)},[O,S,I,w,f]);const z=x.useRef("mouse"),H=x.useRef(!1),{getButtonProps:B,buttonRef:L}=na({disabled:P,focusableWhenDisabled:!0,native:b,composite:!0}),F={disabled:P,selected:E,highlighted:T};function $(G){if(N||R)return;const J=w.state.value;if(S){const Y=Array.isArray(J)?J:[],re=E?GE(Y,f,I):[...Y,f];w.context.setValue(re,qe(af,G))}else w.context.setValue(f,qe(af,G)),w.context.setOpen(!1,qe(af,G))}function X(){w.context.selectionRef.current.dragY=0}const K={role:"option","aria-selected":E,tabIndex:C&&T?0:-1,onKeyDown(G){w.set("activeIndex",O),G.key===" "&&w.context.typingRef.current&&G.preventDefault()},onClick(G){const J=z.current!=="touch",Y=G.nativeEvent.pointerType,re=J&&eh(G.nativeEvent)&&(Y!==void 0||T),M=J&&!re&&!H.current;H.current=!1,!(P||M)&&$(G.nativeEvent)},onPointerEnter(G){z.current=G.pointerType},onPointerMove(G){if(G.pointerType==="mouse"&&G.buttons===1){const J=w.context.selectionRef.current;J.dragY+=G.movementY,J.dragY**2>=64&&(J.allowUnselectedMouseUp=!0)}},onPointerDown(G){z.current=G.pointerType,H.current=!0,X()},onMouseUp(){if(X(),P||z.current==="touch"||H.current)return;const G=!w.context.selectionRef.current.allowSelectedMouseUp&&E,J=!w.context.selectionRef.current.allowUnselectedMouseUp&&!E;G||J||(H.current=!0,_.current?.click(),H.current=!1)}},q=yt("div",t,{ref:[L,a,j.ref,_],state:F,props:[k,K,y,B]}),Q=x.useMemo(()=>({selected:E,index:O,textRef:v,selectedByFocus:D}),[E,O,v,D]);return s.jsx(aA.Provider,{value:Q,children:q})})),zF=x.forwardRef(function(t,a){const{selected:o}=lj();return t.keepMounted||o?s.jsx(BF,{...t,ref:a}):null}),BF=x.memo(x.forwardRef((e,t)=>{const{render:a,className:o,style:c,keepMounted:d,...f}=e,{selected:p}=lj(),h=x.useRef(null),{transitionStatus:b,setMounted:y}=Oi(p),j=yt("span",e,{ref:[t,h],state:{selected:p,transitionStatus:b},props:[{"aria-hidden":!0,children:"✔️"},f],stateAttributesMapping:uo});return oa({batch:!0,enabled:!p,open:p,ref:h,onComplete(){p||y(!1)}}),j})),HF=x.memo(x.forwardRef(function(t,a){const{index:o,textRef:c,selectedByFocus:d}=lj(),f=wo(),{render:p,className:h,style:b,...y}=t,v=x.useCallback(w=>{w&&(o===0&&(f.context.firstItemTextRef.current=w),d&&(f.context.selectedItemTextRef.current=w))},[f,o,d]);return yt("div",t,{ref:[v,a,c],props:y})})),dt=hF,ft=wF;function pt({className:e,children:t,...a}){return s.jsxs(yF,{"data-slot":"select-trigger",className:Ue("inline-flex h-[30px] min-w-0 cursor-pointer items-center justify-between gap-1.5 rounded-md border border-control-border bg-control px-2.5","[&>span]:min-w-0 [&>span]:truncate","text-[12.5px] font-normal text-foreground","transition-colors duration-150 ease-out","hover:border-control-border-hover hover:bg-control-hover","focus-visible:border-primary focus-visible:shadow-focus focus-visible:outline-none","data-disabled:cursor-not-allowed data-disabled:bg-control data-disabled:text-muted-foreground data-disabled:opacity-60",e),...a,children:[t,s.jsx(SF,{className:"flex flex-none text-muted-foreground transition-transform duration-[180ms] data-popup-open:rotate-180",children:s.jsx("svg",{viewBox:"0 0 10 6",className:"size-2.5","aria-hidden":"true",children:s.jsx("path",{d:"M1 1l4 4 4-4",stroke:"currentColor",strokeWidth:"1.4",fill:"none",strokeLinecap:"round",strokeLinejoin:"round"})})})]})}function mt({className:e,sideOffset:t=4,children:a,...o}){return s.jsx(NF,{children:s.jsx(AF,{sideOffset:t,alignItemWithTrigger:!1,className:"z-[35]",children:s.jsx(PF,{"data-slot":"select-content",className:Ue("max-h-[260px] min-w-[var(--anchor-width)] overflow-y-auto overscroll-contain rounded-lg border border-border-strong bg-raised p-[5px] shadow-3","outline-none","data-open:animate-in data-open:fade-in-0","data-closed:animate-out data-closed:fade-out-0",e),...o,children:a})})})}function $e({className:e,children:t,...a}){return s.jsxs(LF,{"data-slot":"select-item",className:Ue("flex min-h-7 cursor-pointer items-center gap-2 rounded-sm px-[9px] text-[12.5px] leading-[1.4] text-foreground select-none","transition-colors duration-[120ms] ease-out","data-[highlighted]:bg-nav-hover","data-[selected]:bg-primary-soft data-[selected]:font-semibold data-[selected]:text-primary-fg","data-[highlighted]:data-[selected]:bg-primary-tint","data-disabled:pointer-events-none data-disabled:font-normal data-disabled:text-muted-foreground",e),...a,children:[s.jsx(HF,{className:"min-w-0 flex-1 truncate",children:t}),s.jsx(zF,{className:"flex flex-none text-primary",children:s.jsx("svg",{viewBox:"0 0 12 12",className:"size-3","aria-hidden":"true",children:s.jsx("path",{d:"M2.5 6.2 4.8 8.5 9.5 3.8",stroke:"currentColor",strokeWidth:"1.8",fill:"none",strokeLinecap:"round",strokeLinejoin:"round"})})})]})}function En({options:e,value:t,onValueChange:a,disabled:o=!1,className:c,...d}){const f=x.useRef(null),p=x.useRef(new Map),[h,b]=x.useState({left:0,width:0,ready:!1}),[y,v]=x.useState(!1),j=x.useCallback(()=>{const w=f.current,k=p.current.get(t);if(!w||!k){b(T=>T.ready?{...T,ready:!1}:T);return}const S=w.getBoundingClientRect(),N=k.getBoundingClientRect(),R=N.left-S.left-w.clientLeft,P=N.width;b(T=>T.ready&&T.left===R&&T.width===P?T:{left:R,width:P,ready:!0})},[t]);return x.useLayoutEffect(()=>{j();const w=f.current;if(!w||typeof ResizeObserver>"u")return;const k=new ResizeObserver(()=>j());k.observe(w);for(const S of p.current.values())k.observe(S);return()=>k.disconnect()},[j,e]),x.useEffect(()=>{if(!h.ready||y)return;const w=requestAnimationFrame(()=>v(!0));return()=>cancelAnimationFrame(w)},[h.ready,y]),s.jsxs(zE,{ref:f,"data-slot":"segmented-control",className:Ue("relative inline-flex gap-0.5 rounded-md border border-control-border bg-control p-0.5",c),value:t,disabled:o,onValueChange:w=>a(w),...d,children:[s.jsx("span",{"aria-hidden":"true","data-slot":"segmented-thumb","data-ready":h.ready?"true":"false","data-animate":y?"true":"false",className:Ue("pointer-events-none absolute top-0.5 bottom-0.5 left-0 rounded-sm bg-primary-soft","data-[ready=false]:opacity-0","data-[animate=true]:transition-[transform,width] data-[animate=true]:duration-200 data-[animate=true]:ease-in-out"),style:{transform:`translateX(${h.left}px)`,width:h.width}}),e.map(w=>s.jsxs(PE,{value:w.value,"data-slot":"segmented-item",disabled:w.disabled,"data-zero":w.count===0?"true":void 0,className:Ue("group/seg relative z-[1] inline-flex h-6 items-center gap-[5px] rounded-sm border-0 bg-transparent px-2.5","text-xs font-medium whitespace-nowrap text-subtle select-none","transition-[background-color,color] duration-150 ease-out","hover:bg-nav-hover hover:text-foreground","data-checked:bg-transparent data-checked:text-primary-fg data-checked:hover:bg-transparent","data-disabled:cursor-not-allowed data-disabled:opacity-40","data-[zero=true]:data-unchecked:opacity-45"),ref:k=>{k?p.current.set(w.value,k):p.current.delete(w.value)},children:[w.label,w.count!==void 0&&s.jsx("span",{className:Ue("min-w-4 rounded-pill bg-surface-3 px-[5px] text-center text-[10.5px] font-semibold tabular-nums text-muted-foreground","group-data-checked/seg:bg-primary-tint group-data-checked/seg:text-primary-fg"),children:w.count})]},w.value))]})}const UF=x.createContext(void 0);function VF(){return x.useContext(UF)}const FF=x.forwardRef(function(t,a){const{className:o,defaultPressed:c=!1,disabled:d=!1,form:f,onPressedChange:p,pressed:h,render:b,type:y,value:v,nativeButton:j=!0,style:w,...k}=t,S=ka(v||void 0),N=VF(),R=N?.value??[],P=(d||N?.disabled)??!1,[T,C]=Ka({controlled:N?S!==void 0&&R.indexOf(S)>-1:h,default:c,name:"Toggle",state:"pressed"}),{getButtonProps:E,buttonRef:D}=na({disabled:P,native:j}),I={disabled:P,pressed:T},O=[D,a],_=[{"aria-pressed":T,onClick(B){const L=!T,F=qe(Qn,B.nativeEvent);p?.(L,F),!F.isCanceled&&(S&&N?.setGroupValue?.(S,L,F),!F.isCanceled&&C(L))}},k,E],z=yt("button",t,{enabled:!N,state:I,ref:O,props:_}),H=x.useMemo(()=>({disabled:P,focusableWhenDisabled:!1}),[P]);return N?s.jsx(ME,{tag:"button",render:b,className:o,style:w,metadata:H,state:I,refs:O,props:_}):z}),$F=Qc(["inline-flex shrink-0 cursor-pointer items-center justify-center gap-1.5 whitespace-nowrap border","font-medium transition-[background-color,border-color,color] duration-150 ease-out","outline-none select-none disabled:pointer-events-none disabled:opacity-45","[&_svg]:pointer-events-none [&_svg]:shrink-0","data-pressed:border-primary-bd data-pressed:bg-primary-soft data-pressed:font-semibold data-pressed:text-primary-fg","data-pressed:hover:bg-primary-tint"],{variants:{variant:{default:"border-transparent bg-transparent text-subtle hover:bg-nav-hover hover:text-foreground",outline:"border-control-border bg-control text-foreground shadow-1 hover:border-control-border-hover hover:bg-control-hover"},size:{default:"h-[30px] rounded-md px-3 text-[12.5px]",xs:"h-6 rounded-sm px-2 text-[11.5px]",sm:"h-[26px] rounded-sm px-2.5 text-[12px]",lg:"h-9 rounded-md px-4 text-[13px]"}},defaultVariants:{variant:"default",size:"default"}});function qF({className:e,variant:t,size:a,...o}){return s.jsx(FF,{"data-slot":"toggle",className:Ue($F({variant:t,size:a}),e),...o})}function GF(e,t,a,o,c,d,f,p,h,b=2){const y=u4(a.current,{event:e,orientation:o,loopFocus:c,rtl:d,cols:b,disabledIndices:f,minIndex:p,maxIndex:h,prevIndex:t>h?p:t,stopEvent:!0});return ho(a.current,y)?void 0:y}const lA=x.createContext(void 0),oA=x.createContext(void 0),iA=x.createContext(void 0),cA=x.createContext(!1),uA=x.createContext("");function Ta(){const e=x.useContext(lA);if(!e)throw new Error(un(22));return e}function qh(){const e=x.useContext(oA);if(!e)throw new Error(un(23));return e}function yf(){const e=x.useContext(iA);if(!e)throw new Error(un(24));return e}function dA(){return x.useContext(uA)}function KF(){return x.useContext(cA)}const YF={id:e=>e.id,labelId:e=>e.labelId,items:e=>e.items,selectedValue:e=>e.selectedValue,hasSelectionChips:e=>{const t=e.selectedValue;return Array.isArray(t)&&t.length>0},hasSelectedValue:e=>{const{selectedValue:t,selectionMode:a}=e;return t==null?!1:a==="multiple"&&Array.isArray(t)?t.length>0:!0},hasNullItemLabel:(e,t)=>t?KE(e.items):!1,open:e=>e.open,mounted:e=>e.mounted,forceMounted:e=>e.forceMounted,inline:e=>e.inline,activeIndex:e=>e.activeIndex,selectedIndex:e=>e.selectedIndex,isActive:(e,t)=>e.activeIndex===t,isSelected:(e,t)=>{const a=e.isItemEqualToValue,o=e.selectedValue;return Array.isArray(o)?o.some(c=>ca(t,c,a)):ca(t,o,a)},transitionStatus:e=>e.transitionStatus,popupProps:e=>e.popupProps,listProps:e=>e.listProps,inputProps:e=>e.inputProps,triggerProps:e=>e.triggerProps,itemProps:e=>e.itemProps,positionerElement:e=>e.positionerElement,listElement:e=>e.listElement,popupId:e=>e.popupId,triggerElement:e=>e.triggerElement,inputElement:e=>e.inputElement,inputGroupElement:e=>e.inputGroupElement,popupSide:e=>e.popupSide,openMethod:e=>e.openMethod,inputInsidePopup:e=>e.inputInsidePopup,inputOwnsFormValue:e=>e.inputOwnsFormValue,selectionMode:e=>e.selectionMode,name:e=>e.name,form:e=>e.form,disabled:e=>e.disabled,readOnly:e=>e.readOnly,required:e=>e.required,grid:e=>e.grid,virtualized:e=>e.virtualized,itemToStringLabel:e=>e.itemToStringLabel,isItemEqualToValue:e=>e.isItemEqualToValue,modal:e=>e.modal,autoHighlight:e=>e.autoHighlight};function fA(e){return e==null?void 0:`${e}-popup`}function XF(e,t){return(a,o)=>a==null?!1:e.contains(a,o,t)}const pA=new Map;function QF(e={}){const t={usage:"search",sensitivity:"base",ignorePunctuation:!0,...e},a=`${hy(e.locale)}|${JSON.stringify(t)}`,o=pA.get(a);if(o)return o;const c=new Intl.Collator(e.locale,t),d={contains(f,p,h){if(!p)return!0;const b=So(f,h);for(let y=0;y<=b.length-p.length;y+=1)if(c.compare(b.slice(y,y+p.length),p)===0)return!0;return!1},startsWith(f,p,h){if(!p)return!0;const b=So(f,h);return c.compare(b.slice(0,p.length),p)===0},endsWith(f,p,h){if(!p)return!0;const b=So(f,h),y=p.length;return b.length>=y&&c.compare(b.slice(b.length-y),p)===0}};return pA.set(a,d),d}const ZF=QF;function WF(e,t=!1){const{overflowY:a}=jr(e);return a!=="auto"&&a!=="scroll"?!1:t?e.clientHeight>0:e.scrollHeight>e.clientHeight}const mA=Symbol("none"),oj={value:mA,index:-1};function JF(e,t,a){const o=e.get(t);if(o!==void 0||a===Lh)return o;for(const[c,d]of e)if(ca(c,t,a))return d}function e6(e){const{id:t,onOpenChangeComplete:a,defaultSelectedValue:o=null,selectedValue:c,onSelectedValueChange:d,defaultInputValue:f,inputValue:p,open:h,defaultOpen:b=!1,selectionMode:y,onItemHighlighted:v,name:j,form:w,disabled:k=!1,readOnly:S=!1,required:N=!1,inputRef:R,grid:P=!1,items:T,filteredItems:C,filter:E,filterQuery:D,openOnInputClick:I=!0,autoHighlight:O=!1,keepHighlight:_=!1,highlightItemOnHover:z=!0,loopFocus:H=!0,itemToStringLabel:B,itemToStringValue:L,isItemEqualToValue:F=Lh,virtualized:$=!1,inline:X=!1,fillInputOnItemPress:K=!0,modal:q=!1,limit:Q=-1,autoComplete:G="list",formAutoComplete:J,locale:Y,submitOnItemClick:re=!1}=e,{clearErrors:M}=Zc(),{setDirty:U,validityData:Z,setFilled:ae,name:ce,disabled:W,setTouched:ue,setFocused:ve,validationMode:ee,validation:he}=Na(),te=gf(),ke=co({id:t}),le=ZF({locale:Y}),de=Array.isArray(T)?null:T;if(de&&typeof de.label!="function")throw new Error(un(100));const Se=de?de.data:T,Te=de?.value,Le=Te?void 0:Se,Ae=x.useMemo(()=>{if(!C||!Te)return;const Oe=Bh(C),Be=Oe.map(Te);let lt;return{values:Be,findItem(Qt,In){if(!lt){lt=new Map;for(let gn=0;gnde?Oe=>de.label(Oe,F,Be=>{const lt=Ae?.findItem(Be,F);return lt!=null?de.itemLabel(lt):So(Be,B)}):B,[de,B,Ae,F]),me=x.useMemo(()=>de?Object.assign(Oe=>de.itemLabel(Oe),{selected:Oe=>So(Oe,oe)}):B,[de,oe,B]);function pe(Oe){return So(Oe,oe)}const[Ce,Ne]=x.useState(!1),[be,De]=x.useState(null),Ge=x.useRef(be),Ct=x.useRef([]),Tt=x.useRef([]),Mt=x.useRef(null),ot=x.useRef(null),Kn=x.useRef(null),ms=x.useRef(null),Yn=x.useRef(null),vs=x.useRef(!0),it=x.useRef(!1),$t=x.useRef(null),Vn=x.useRef(null),rn=x.useRef(null),nt=x.useRef(oj),Dt=x.useRef(null),qt=x.useRef([]),ts=x.useRef(null),Fn=W||k,$n=ce??j,Dn=y==="multiple",en=y==="single",cs=p!==void 0||f!==void 0,Et=Se!==void 0,xt=C!==void 0;let jt;O==="always"?jt="always":jt=O?"input-change":!1;const[wt,Er]=Ka({controlled:c,default:Dn?o??Pr:o,name:"Combobox",state:"selectedValue"}),ar=x.useMemo(()=>E===null?()=>!0:E!==void 0?E:XF(le,me),[E,le,me]),Fr=Ps(()=>cs?f??"":en?pe(wt):"").current,[Nn,al]=Ka({controlled:p,default:Fr,name:"Combobox",state:"inputValue"}),[ln,gc]=Ka({controlled:h,default:b,name:"Combobox",state:"open"}),sb=rj(Se),hr=!ln&&be!==null?be:String(Nn).trim(),Pa=en?pe(wt):"",Go=en&&!Ce&&hr!==""&&Pa.length===hr.length&&le.contains(Pa,hr),Ko=Go?"":D??hr,$p=Et&&xt&&Go&&(!de||de.hasValue(wt,F)),xc=x.useMemo(()=>Se?Bh(Se):Pr,[Se]),Yo=x.useMemo(()=>{if(C&&!$p)return C;if(!Se)return Pr;if(sb){const Be=Se,lt=[];let Qt=0;for(const In of Be){if(Q>-1&&Qt>=Q)break;const gn=Q>-1?Q-Qt:1/0,Pn=Ko===""?In.items.slice(0,gn):[];if(Ko!=="")for(const hs of In.items){if(Pn.length>=gn)break;ar(hs,Ko,me)&&Pn.push(hs)}if(Pn.length>0){const hs={...In,items:Pn};lt.push(hs),Qt+=Pn.length}}return lt}if(Ko==="")return Q>-1?xc.slice(0,Q):xc;const Oe=[];for(const Be of xc){if(Q>-1&&Oe.length>=Q)break;ar(Be,Ko,me)&&Oe.push(Be)}return Oe},[C,$p,Se,sb,Ko,Q,ar,me,xc]),Os=x.useMemo(()=>{if(Ae&&Yo===C)return Ae.values;const Oe=Bh(Yo);return Te?Oe.map(Be=>Te(Be)):Oe},[Yo,C,Ae,Te]),et=Ps(()=>{let Oe=null;return X&&ln&&Et&&y!=="none"&&(Oe=bf(Os,wt,F,Dn)),new iu({id:ke,labelId:void 0,selectedValue:wt,open:ln,items:Le,selectionMode:y,name:$n,form:w,disabled:Fn,readOnly:S,required:N,grid:P,virtualized:$,openOnInputClick:I,itemToStringLabel:oe,isItemEqualToValue:F,modal:q,autoHighlight:jt,submitOnItemClick:re,hasInputValue:cs,mounted:!1,forceMounted:!1,transitionStatus:"idle",inline:X,activeIndex:null,selectedIndex:Oe,popupProps:{},listProps:{},inputProps:{},triggerProps:{},itemProps:mn,positionerElement:null,listElement:null,popupId:void 0,triggerElement:null,inputElement:null,inputGroupElement:null,popupSide:null,openMethod:null,inputInsidePopup:!0,inputOwnsFormValue:y==="none"},{onOpenChangeComplete:Kt,setOpen:Kt,setInputValue:Kt,setSelectedValue:Kt,setIndices:Kt,handleSelection:Kt,forceMount:Kt,requestSubmit:Kt,listRef:Ct,labelsRef:Tt,popupRef:Mt,emptyRef:Yn,inputRef:ot,startDismissRef:Kn,endDismissRef:ms,keyboardActiveRef:vs,chipsContainerRef:$t,clearRef:Vn,valuesRef:qt,pointerDownItemRef:ts,selectionEventRef:rn},YF)}).current,Bl=y==="none"?Nn:wt,rb=x.useMemo(()=>y==="none"?Bl:Array.isArray(wt)?wt.map(Oe=>Ca(Oe,L)):Ca(wt,L),[Bl,L,y,wt]),_a=Ie(v),Ms=Ie(a),Ys=et.useState("activeIndex"),Xo=et.useState("selectedIndex"),bc=et.useState("positionerElement"),ab=et.useState("listElement"),vc=et.useState("triggerElement"),yc=et.useState("inputElement"),jc=et.useState("inputGroupElement"),Ds=et.useState("inline"),lr=et.useState("inputInsidePopup"),Hl=et.useState("inputOwnsFormValue"),Ul=en&&!lr&&Nn===Pa,wc=Wn(vc),{mounted:Qo,setMounted:ys,transitionStatus:qp}=Oi(ln),{openMethod:lb,triggerProps:Gp}=EE(ln),Vl=Ie(()=>rb);nu(lr?wc:ot,ke,Bl,Vl,!Fn,j);const Fl=Ie(()=>{Se?Tt.current=Os.map(pe):et.set("forceMounted",!0)}),Zo=Ie((Oe,Be,lt)=>{if(Be===-1){if(nt.current===oj)return;nt.current=oj}else nt.current={value:Oe,index:Be};_a(Oe,E4(lt,void 0,{index:Be}))}),$r=Ie(Oe=>{const Be={};Oe.activeIndex!==void 0&&(Be.activeIndex=Oe.activeIndex),Oe.selectedIndex!==void 0&&(Be.selectedIndex=Oe.selectedIndex),et.update(Be);const lt=Oe.activeIndex;if(lt===void 0)return;const Qt=Oe.type||Qn;lt===null?Zo(void 0,-1,Qt):Zo(qt.current[lt],lt,Qt)}),qr=Ie((Oe,Be)=>{if(e.onInputValueChange?.(Oe,Be),!Be.isCanceled){if(it.current=Be.reason===Ya,Be.reason===lf){ln&&be!==null&&De(null);const lt=Be.event,Qt=lt.inputType;if(lt.type==="compositionend"||Qt!=null&&Qt!==""&&Qt!=="insertReplacementText"){const gn=Oe.trim()!=="";gn&&Ne(!0),Dt.current={hasQuery:gn};const Pn=et.state.listElement;if(!et.state.virtualized&&Pn){const hs=Mt.current;for(const Ar of Yc(Pn.firstElementChild??Pn)){if(!pn(Ar)||(hs?!Ze(hs,Ar):Ar.getAttribute("role")==="dialog"))break;if(WF(Ar)){Ar.scrollTop=0;break}}}gn&&jt&&et.state.activeIndex==null&&(ln||Ds)&&et.set("activeIndex",0)}}else Be.reason===Ya&&Oe===""&&et.state.inputInsidePopup&&(Dt.current={hasQuery:!1,selection:!0});al(Oe)}}),ob=Ie(Oe=>{const Be=!Oe&&lr&&!Ds&&Nn!==""&&(String(Nn).trim()===be||Nn===Pa);!Oe&&(Be||Nn===""||Ul)&&Ne(!1),De(null),Be&&qr("",qe(Ya))}),It=Ie((Oe,Be)=>{if(ln!==Oe&&(Be.reason===su&&Et&&Os.length===0&&!Yn.current&&Be.allowPropagation(),e.onOpenChange?.(Oe,Be),!Be.isCanceled&&(Oe&&be!==null&&ob(Be.reason===lf),!Oe&&Ce&&(en?(Ds||De(hr),hr===""&&Ne(!1)):Dn&&(Ds||De(hr),lr&&$r({activeIndex:null}),(!lr||Ds)&&qr("",qe(Ya,Be.event,void 0,{isItemPress:Be.reason===af})))),gc(Oe),!Oe&&lr&&(Be.reason===bo||Be.reason===uh)&&(ue(!0),ve(!1),ee==="onBlur")))){const lt=y==="none"?Nn:wt;he.commit(lt)}}),Sc=Ie((Oe,Be)=>{if(d?.(Oe,Be),Be.isCanceled)return;Er(Oe),(y==="none"&&Mt.current&&K||en&&!et.state.inputInsidePopup)&&qr(pe(Oe),qe(Be.reason,Be.event))}),od=Ie((Oe,Be)=>{const lt=fs(Oe),Qt=rn.current??Oe;rn.current=null;const In=qe(af,Qt),gn=lt?.closest("a")?.getAttribute("href");if(gn){gn.startsWith("#")&&It(!1,In);return}if(Dn){const Pn=Array.isArray(wt)?wt:[],hs=zh(Pn,Be,F),Ar=hs?GE(Pn,Be,F):[...Pn,Be];if(Sc(Ar,In),In.isCanceled||!(ot.current?ot.current.value.trim()!=="":!1))return;if(et.state.inputInsidePopup){qr("",qe(Ya,In.event,void 0,{isItemPress:!0}));const Kr=Dt.current;Kr&&!hs&&(Kr.toggledValue=Be)}else It(!1,In)}else{if(Sc(Be,In),In.isCanceled)return;It(!1,In)}}),id=Ie(()=>{const Oe=he.inputRef.current?.form??et.state.inputElement?.form;Oe&&typeof Oe.requestSubmit=="function"&&Oe.requestSubmit()}),Gr=Ie(()=>{if(ys(!1),Ms?.(!1),Ne(!1),De(null),$r(y==="none"?{activeIndex:null,selectedIndex:null}:{activeIndex:null}),Dn&&ot.current&&ot.current.value!==""&&!it.current&&qr("",qe(Ya)),en)if(et.state.inputInsidePopup)ot.current&&ot.current.value!==""&&qr("",qe(Ya));else{const Oe=pe(wt);ot.current&&ot.current.value!==Oe&&qr(Oe,qe(Oe===""?Ya:Qn))}}),gr=x.useMemo(()=>Ds&&bc?{current:bc.closest('[role="dialog"]')}:Mt,[Ds,bc]);oa({enabled:!e.actionsRef,open:ln,ref:gr,onComplete(){ln||Gr()}}),x.useImperativeHandle(e.actionsRef,()=>({unmount:Gr}),[Gr]),Me(function(){const Be=Ge.current!==null&&be===null;if(Ge.current=be,ln&&(!Be||!Et)||(ln||(ts.current=null),y==="none"))return;const lt=Et?Os:qt.current;$r({selectedIndex:bf(lt,wt,F,Dn)})},[ln,be,wt,y,Dn,Et,Os,F,$r]),Me(()=>{Se&&(qt.current=Os,Ct.current.length=Os.length)},[Se,Os]),Me(()=>{const Oe=Dt.current;if(Oe){const hs=ln||Ds||et.state.positionerElement?.hidden===!1;if(Oe.hasQuery)jt&&hs&&et.set("activeIndex",0),Dt.current=null;else if(String(Nn).trim()===""&&(Dt.current=null,hs)){const Ar=Oe.selection;jt==="always"&&!Ar&&et.state.selectionMode==="none"&&et.set("activeIndex",0),queueMicrotask(()=>{if(!et.state.open&&!et.state.inline||ot.current&&ot.current.value.trim()!=="")return;const ha=et.state.selectedValue,Kr=et.state.selectionMode==="multiple";if(Kr&&Array.isArray(ha)?ha.length>0:et.state.selectionMode!=="none"&&ha!=null){const Bs=Et||xt?Os:qt.current,za=uu(Bs,Oe.toggledValue,et.state.isItemEqualToValue);et.set("activeIndex",za!==-1?za:bf(Bs,ha,et.state.isItemEqualToValue,Kr))}else Ar?et.set("activeIndex",null):jt==="always"&&et.set("activeIndex",0)})}}if(!ln&&!Ds)return;const lt=Et||xt?Os:qt.current,Qt=et.state.activeIndex;if(Qt==null){if(jt==="always"&<.length>0){et.set("activeIndex",0);return}Zo(void 0,-1,Qn);return}if(Qt>=lt.length){Zo(void 0,-1,Qn),et.set("activeIndex",null);return}const In=lt[Qt],gn=nt.current.value,Pn=gn!==mA&&ca(In,gn,et.state.isItemEqualToValue);(nt.current.index!==Qt||!Pn)&&Zo(In,Qt,Qn)},[Ys,jt,Zo,xt,Et,Os,Ds,ln,et,Nn]),Me(()=>{if(y==="none"){ae(String(Nn)!=="");return}ae(Dn?Array.isArray(wt)&&wt.length>0:wt!=null)},[ae,y,Nn,wt,Dn]),x.useEffect(()=>{Et&&jt&&Os.length===0&&$r({activeIndex:null})},[Et,jt,Os.length,$r]);function ib(){ln&&hr!==""&&hr!==String(Fr)&&!Ul&&Ne(!0)}function WS(){ln&&be!==null&&ob(!1)}let cd=!1;function Kp(){!cd&&Nn!==Pa&&(cd=!0,qr(Pa,qe(Qn)))}function JS(){y!=="none"&&(M($n),U($E(wt,Z.initialValue,F)),he.change(wt),en&&!cs&&!lr&&Kp())}function xr(){en&&!cs&&!lr&&!Ce&&Kp()}function Yp(){y==="none"&&(M($n),U(Nn!==Z.initialValue),he.change(Nn))}ia(hr,ib),ia(ln,WS),ia(wt,JS),ia(Pa,xr),ia(Se,xr),ia(Nn,Yp);const Nc=$T({open:Ds?!0:ln,onOpenChange:It,elements:{reference:lr?vc:yc,floating:bc}}),ud=P?"grid":"listbox",La=ln||Ds,Xp=La?"true":"false",kc=x.useMemo(()=>{const Oe=yc?.tagName==="INPUT",Be=yc==null||Oe,lt=Be||La,Qt=Be?{autoComplete:"off",spellCheck:"false",autoCorrect:"off",autoCapitalize:"none"}:{};return lt&&(Qt.role="combobox",Qt["aria-expanded"]=Xp,Qt["aria-haspopup"]=ud,Qt["aria-controls"]=La?ab?.id:void 0,Qt["aria-autocomplete"]=S?"none":G),{reference:Qt,floating:{role:"presentation"}}},[yc,La,Xp,ud,ab?.id,G,S]),$l=gh(Nc,{enabled:!Fn&&I,event:"mousedown-only",toggle:!1,touchOpenDelay:lr?0:100,reason:k4}),dd=pf(Nc,{enabled:!Fn&&!Ds,outsidePressEvent:{mouse:"sloppy",touch:"intentional"},bubbles:Ds?!0:void 0,outsidePress(Oe){const Be=fs(Oe);return!Ze(vc,Be)&&!Ze(Vn.current,Be)&&!Ze($t.current,Be)&&!Ze(jc,Be)}}),ql=XT(Nc,{enabled:!Fn,id:ke,listRef:Ct,activeIndex:Ys,selectedIndex:Xo,virtual:!0,loopFocus:H,allowEscape:H&&!jt,focusItemOnOpen:Ce||y==="none"&&!jt?!1:"auto",focusItemOnHover:z,resetOnPointerLeave:!_,orientation:P?"horizontal":void 0,rtl:te==="rtl",disabledIndices:Pr,grid:P?GF:void 0,onNavigate(Oe,Be){!Be&&!ln||qp==="ending"||$r(Be?{activeIndex:Oe,type:vs.current?I1:P1}:{activeIndex:Oe})}}),Qp=x.useMemo(()=>ta(ql.reference,{onKeyDown(Oe){P&&et.state.activeIndex==null&&(Oe.key==="ArrowLeft"||Oe.key==="ArrowRight")&&Oe.preventBaseUIHandler()}},dd.reference,$l.reference,kc.reference),[ql.reference,dd.reference,$l.reference,kc.reference,P,et]),fd=x.useMemo(()=>ta(mf,dd.floating),[dd.floating]),cb=x.useMemo(()=>ta(ql.floating,kc.floating),[ql.floating,kc.floating]),ub=x.useMemo(()=>{const Oe=ql.item;return Oe?{...Oe,onFocus:void 0}:mn},[ql.item]);et.useContextCallback("setOpen",It),et.useContextCallback("setInputValue",qr),et.useContextCallback("setSelectedValue",Sc),et.useContextCallback("setIndices",$r),et.useContextCallback("handleSelection",od),et.useContextCallback("forceMount",Fl),et.useContextCallback("requestSubmit",id),et.useContextCallback("onOpenChangeComplete",a),BE(()=>{et.update({inline:X,popupProps:fd,listProps:cb,inputProps:Qp,triggerProps:Gp,itemProps:ub})});const Cc={id:ke,selectedValue:wt,open:ln,mounted:Qo,transitionStatus:qp,items:Le,inline:X,popupProps:fd,listProps:cb,inputProps:Qp,triggerProps:Gp,itemProps:ub,openMethod:lb,selectionMode:y,name:$n,form:w,disabled:Fn,readOnly:S,required:N,grid:P,virtualized:$,openOnInputClick:I,itemToStringLabel:oe,modal:q,autoHighlight:jt,isItemEqualToValue:F,submitOnItemClick:re,hasInputValue:cs};Me(()=>{et.update({...Cc,inputOwnsFormValue:y==="none"&&(X||!et.state.inputInsidePopup)})},[et,...Object.values(Cc)]);const ma=sa(R,he.inputRef),Zp=x.useMemo(()=>({query:hr,hasItems:Et,filteredItems:Yo,flatFilteredValues:Os}),[hr,Et,Yo,Os]),Wp=x.useMemo(()=>Array.isArray(Bl)?"":Ca(Bl,L),[Bl,L]),Wo=Dn&&Array.isArray(wt)&&wt.length>0,ll=Dn||y==="none"&&Hl?void 0:$n,db=x.useMemo(()=>!Dn||!Array.isArray(wt)||!$n?null:wt.map(Oe=>{const Be=Ca(Oe,L);return s.jsx("input",{type:"hidden",form:w,name:$n,value:Be,disabled:Fn},Be)}),[Dn,wt,w,$n,L,Fn]),Jp=s.jsxs(x.Fragment,{children:[e.children,s.jsx("input",{...he.getValidationProps(Fn,{onFocus(){if(lr){vc?.focus();return}(ot.current||vc)?.focus()},onChange(Oe){if(Oe.nativeEvent.defaultPrevented||Fn||S)return;const Be=Oe.currentTarget.value,lt=Be.toLowerCase(),Qt=qe(Qn,Oe.nativeEvent),In=()=>qt.current.findIndex(Pn=>Ca(Pn,L).toLowerCase()===lt||pe(Pn).toLowerCase()===lt);function gn(){if(Dn)return;if(y==="none"){qr(Be,Qt);return}let Pn=In();Pn===-1&&(Pn=qt.current.findIndex((Ar,ha)=>{const Kr=Tt.current[ha];return Kr!=null&&Kr.toLowerCase()===lt}));const hs=Pn===-1?void 0:qt.current[Pn];hs!=null&&Sc?.(hs,Qt)}en&&(Fl(),Se&&In()===-1&&et.set("forceMounted",!0)),queueMicrotask(gn)}}),id:ke&&ll==null?`${ke}-hidden-input`:void 0,form:w,name:ll,autoComplete:J,disabled:Fn,required:N&&!Wo,readOnly:S,value:Wp,ref:ma,style:ll?ru:_i,tabIndex:-1,"aria-hidden":!0,suppressHydrationWarning:!0}),db]});return s.jsx(lA.Provider,{value:et,children:s.jsx(oA.Provider,{value:Nc,children:s.jsx(cA.Provider,{value:Et,children:s.jsx(iA.Provider,{value:Zp,children:s.jsx(uA.Provider,{value:Nn,children:Jp})})})})})}function t6(e){const{multiple:t=!1,defaultValue:a,value:o,onValueChange:c,autoComplete:d,...f}=e;return s.jsx(e6,{...f,selectionMode:t?"multiple":"single",selectedValue:o,defaultSelectedValue:a,onSelectedValueChange:c,formAutoComplete:d})}const n6="data-popup-side",s6="data-list-empty",hA={...Yv,...Ti,popupSide:e=>e?{[n6]:e}:null,listEmpty:e=>e?{[s6]:""}:null},r6=x.createContext(void 0);function a6(){return x.useContext(r6)}const gA=x.createContext(void 0);function ij(e){const t=x.useContext(gA);if(t===void 0&&!e)throw new Error(un(21));return t}const xA=x.forwardRef(function(t,a){const o=Ta(),{buttonRef:c,getButtonProps:d}=na({native:!1}),f=sa(a,c);function p(b){o.context.setOpen(!1,qe(dy,b.nativeEvent,b.currentTarget))}const h=d({onClick:p});return s.jsx("span",{ref:f,...h,"aria-label":"Dismiss",tabIndex:void 0,style:ru})});function bA(e){const t=e.useState("mounted"),a=e.useState("popupSide"),o=e.useState("positionerElement");return t&&o?a:null}function Gh(){return yf().filteredItems.length===0}function l6(e){return e==="rtl"?["ArrowRight","ArrowLeft"]:["ArrowLeft","ArrowRight"]}function o6(e,t){const a=e>=t-1?t-2:e;return a>=0?a:void 0}function vA(e,t,a){const o=e.context.listRef.current[t];o&&(e.context.selectionEventRef.current=a,o.click(),e.context.selectionEventRef.current=null)}const i6=x.forwardRef(function(t,a){const{render:o,className:c,disabled:d=!1,id:f,style:p,...h}=t,{state:b,disabled:y,setTouched:v,setFocused:j,validationMode:w,validation:k}=Na(),{labelId:S}=yl(),N=a6(),P=!!ij(!0),T=Ta(),C=dA(),E=gf(),D=T.useState("required"),I=T.useState("disabled"),O=T.useState("readOnly"),_=T.useState("name"),z=T.useState("form"),H=T.useState("selectionMode"),B=T.useState("autoHighlight"),L=T.useState("inputProps"),F=T.useState("triggerProps"),$=T.useState("open"),X=T.useState("mounted"),K=T.useState("selectedValue"),q=T.useState("id"),Q=T.useState("inline"),G=T.useState("modal"),J=!!B,Y=bA(T),re=y||I||d,M=Gh(),U=P||Q,Z=!U||G,ae=ka(f??(U?void 0:q)),ce=P?n1:b,[W,ue]=x.useState(null),ve=x.useRef(!1),ee=x.useRef(null),he=x.useRef(!1),te=H==="none"&&!P,ke=Ie(me=>{const pe=P||T.state.inline;pe&&!T.state.hasInputValue&&T.context.setInputValue("",qe(Qn)),T.update({inputElement:me,inputInsidePopup:pe,inputOwnsFormValue:te})}),le=P?h:k.getValidationProps(re,h);function de(){T.context.setIndices({activeIndex:null,selectedIndex:null,type:T.context.keyboardActiveRef.current?I1:P1})}function Se(){T.context.keyboardActiveRef.current=!1}const Te={...ce,open:$,disabled:re,readOnly:O,popupSide:Y,listEmpty:M};function Le(me){if(!N)return;let pe;const{highlightedChipIndex:Ce}=N,Ne=N.chipsRef.current.length,[be,De]=l6(E);return Ce!==void 0?(me.key===be?(me.preventDefault(),Ce>0?pe=Ce-1:pe=void 0):me.key===De?(me.preventDefault(),Ce0&&(me.preventDefault(),pe=Ne>0?Ne-1:void 0),pe)}const Ae=yt("input",t,{state:Te,ref:[a,T.context.inputRef,ke],props:[L,F,{value:W??C,"aria-readonly":O||void 0,"aria-required":D||void 0,"aria-labelledby":S,disabled:re,readOnly:O,required:H==="none"?D:void 0,form:z,...te&&_&&{name:_},id:ae,onFocus(){if(j(!0),!Q||!he.current)return;he.current=!1;const me=ee.current;me==null||!Object.hasOwn(T.context.valuesRef.current,me)||T.context.setIndices({activeIndex:me})},onBlur(){v(!0),j(!1);const me=T.state.activeIndex;if(Q&&me!==null&&B!=="always"&&(ee.current=me,he.current=!0,T.context.setIndices({activeIndex:null})),w==="onBlur"){const pe=H==="none"?C:K;k.commit(pe)}},onCompositionStart(me){Xm||(ve.current=!0,ue(me.currentTarget.value))},onCompositionEnd(me){ve.current=!1;const pe=me.currentTarget.value;ue(null),T.context.setInputValue(pe,qe(lf,me.nativeEvent))},onChange(me){const pe=me.nativeEvent,Ce=pe.inputType,Ne=!Ce||Ce==="insertReplacementText",be=ve.current||!Ne;function De(Mt){O||re||!Mt||!be||(T.context.setOpen(!0,qe(lf,pe)),J||de())}if(ve.current){const Mt=me.currentTarget.value;ue(Mt),Mt===""&&!T.state.openOnInputClick&&!T.state.inputInsidePopup&&T.context.setOpen(!1,qe(Ya,pe));const ot=Mt.trim(),Kn=J&&ot!=="";De(ot),$&&T.state.activeIndex!==null&&!Kn&&de();return}const Ge=qe(lf,pe);if(T.context.setInputValue(me.currentTarget.value,Ge),Ge.isCanceled)return;const Ct=me.currentTarget.value==="",Tt=qe(Ya,pe);Ct&&!T.state.inputInsidePopup&&(H==="single"&&T.context.setSelectedValue(null,Tt),T.state.openOnInputClick||T.context.setOpen(!1,Tt)),De(me.currentTarget.value.trim()),$&&T.state.activeIndex!==null&&!J&&de()},onKeyDown(me){if(me.ctrlKey||me.shiftKey||me.altKey||me.metaKey)return;if(T.context.keyboardActiveRef.current=!0,re||O){O&&me.key==="Enter"&&$&&T.state.activeIndex!==null&&Cs(me);return}const pe=me.currentTarget,Ce=pe.scrollWidth-pe.clientWidth,Ne=E==="rtl";if(me.key==="Home"){Cs(me);const Ge=c1&&Ne?pe.value.length:0;pe.setSelectionRange(Ge,Ge),pe.scrollLeft=0;return}if(me.key==="End"){Cs(me);const Ge=c1&&Ne?0:pe.value.length;pe.setSelectionRange(Ge,Ge),pe.scrollLeft=Ne?-Ce:Ce;return}if(!X&&me.key==="Escape"){const Ge=H==="multiple"&&Array.isArray(K)?K.length===0:K===null,Ct=qe(su,me.nativeEvent),Tt=H==="multiple"?[]:null;T.context.setInputValue("",Ct),T.context.setSelectedValue(Tt,Ct),!Ge&&!T.state.inline&&!Ct.isPropagationAllowed&&me.stopPropagation();return}if(N&&me.key==="Backspace"&&pe.value===""&&N.highlightedChipIndex===void 0&&Array.isArray(K)&&K.length>0){const Ge=N.chipsRef.current.length,Ct=Ge>0?Ge-1:K.length-1,Tt=K.filter((Mt,ot)=>ot!==Ct);de(),T.context.setSelectedValue(Tt,qe(Qn,me.nativeEvent));return}const be=N?.highlightedChipIndex!==void 0,De=Le(me);if(N?.setHighlightedChipIndex(De),De!==void 0?N?.chipsRef.current[De]?.focus():be&&T.context.inputRef.current?.focus(),me.which!==229&&me.key==="Enter"&&$){const Ge=T.state.activeIndex,Ct=me.nativeEvent;if(Ge===null){if(Q)return;T.context.setOpen(!1,qe(Qn,Ct));return}Cs(me),vA(T,Ge,Ct)}},onPointerMove:Se,onPointerDown:Se},le],stateAttributesMapping:hA}),oe=P?s.jsx(r1.Provider,{value:s1,children:Ae}):Ae;return s.jsxs(x.Fragment,{children:[$&&Z&&s.jsx(xA,{ref:T.context.startDismissRef}),oe]})}),c6=x.forwardRef(function(t,a){const{render:o,className:c,nativeButton:d=!0,disabled:f=!1,id:p,style:h,...b}=t,{state:y,disabled:v,setTouched:j,setFocused:w,validationMode:k,validation:S}=Na(),{labelId:N}=yl(),R=Ta(),P=R.useState("selectionMode"),T=R.useState("disabled"),C=R.useState("readOnly"),E=R.useState("required"),D=R.useState("positionerElement"),I=R.useState("listElement"),O=R.useState("popupId"),_=R.useState("triggerProps"),z=R.useState("inputInsidePopup"),H=R.useState("id"),B=R.useState("labelId"),L=R.useState("open"),F=R.useState("selectedValue"),$=R.useState("activeIndex"),X=R.useState("selectedIndex"),K=R.useState("hasSelectedValue"),q=qh(),Q=dA(),G=er(),J=v||T||f,Y=Gh(),re=bA(R);co({id:z?p:void 0});const M=z?p??H:p,U=QE(N,B);let Z;L&&z?Z=O??fA(H):L&&(Z=I?.id);const ae=x.useRef("");function ce(le){ae.current=le.pointerType}const{reference:W}=QT(q,{enabled:!L&&!C&&!T&&P==="single",listRef:R.context.labelsRef,activeIndex:$,selectedIndex:X,onMatch(le){const de=R.context.valuesRef.current[le];de!==void 0&&R.context.setSelectedValue(de,qe(Qn))}}),{reference:ue}=gh(q,{enabled:!T,event:"mousedown"}),{buttonRef:ve,getButtonProps:ee}=na({native:d,disabled:J}),he={...y,readOnly:C,open:L,disabled:J,popupSide:re,listEmpty:Y,placeholder:P==="none"?!1:!K},te=Ie(le=>{R.set("triggerElement",le)});return yt("button",t,{ref:[a,ve,te],state:he,props:[_,ue,W,{id:M,tabIndex:z?0:-1,role:z?"combobox":void 0,"aria-expanded":L,"aria-haspopup":z?"dialog":"listbox","aria-controls":Z,"aria-required":z&&E||void 0,"aria-readonly":z&&C||void 0,"aria-labelledby":U,onPointerDown:ce,onPointerEnter:ce,onFocus(){w(!0),!J&&G.start(0,R.context.forceMount)},onBlur(le){if(!Ze(D,le.relatedTarget)&&(j(!0),w(!1),k==="onBlur")){const de=P==="none"?Q:F;S.commit(de)}},onMouseDown(le){if(J||(z||q.set("domReferenceElement",le.currentTarget),R.context.forceMount(),ae.current!=="touch"&&(R.context.inputRef.current?.focus(),z||le.preventDefault()),L))return;const de=Gt(le.currentTarget);function Se(Te){const Le=R.state.triggerElement;if(!Le)return;const Ae=fs(Te),oe=R.state.positionerElement,me=R.state.listElement;Ze(Le,Ae)||Ze(oe,Ae)||Ze(me,Ae)||ZE(Te,Le)||R.context.setOpen(!1,qe(_1,Te))}z&&de.addEventListener("mouseup",Se,{once:!0})},onKeyDown(le){(le.key==="ArrowDown"||le.key==="ArrowUp")&&(Cs(le),R.context.setOpen(!0,qe(fy,le.nativeEvent)),R.context.inputRef.current?.focus())}},S.getValidationProps(J,b),ee],stateAttributesMapping:hA})}),u6=x.createContext(null);function d6(){return x.useContext(u6)}function f6(e){const{children:t}=e,{filteredItems:a}=yf(),o=d6(),c=o?o.items:a;return s.jsx(x.Fragment,{children:c.map(t)})}const p6=x.forwardRef(function(t,a){var o;const{render:c,className:d,style:f,children:p,...h}=t,b=Ta(),y=qh(),v=!!ij(!0),{filteredItems:j,hasItems:w}=yf(),k=b.useState("selectionMode"),S=b.useState("grid"),N=b.useState("readOnly"),R=b.useState("listProps"),P=b.useState("virtualized"),T=b.useState("forceMounted"),C=k==="multiple",E=j.length===0,D=Ie(L=>{b.set("positionerElement",L)}),I=Ie(L=>{b.set("listElement",L)}),O=x.useMemo(()=>typeof p=="function"?o||(o=s.jsx(f6,{children:p})):p,[p]),_={empty:E},z=y.useState("floatingId"),H=yt("div",t,{state:_,ref:[a,I,v?null:D],props:[R,{children:O,tabIndex:-1,id:z,role:S?"grid":"listbox","aria-multiselectable":C?"true":void 0,"aria-readonly":!S&&N?!0:void 0,onKeyDown(L){if(!(b.state.disabled||b.state.readOnly)&&L.key==="Enter"){const F=b.state.activeIndex;if(F==null)return;Cs(L),vA(b,F,L.nativeEvent)}},onKeyDownCapture(){b.context.keyboardActiveRef.current=!0},onPointerMoveCapture(){b.context.keyboardActiveRef.current=!1}},h]});if(P)return H;const B=w&&!T?void 0:b.context.labelsRef;return s.jsx(nj,{elementsRef:b.context.listRef,labelsRef:B,children:H})}),m6="",h6=200;function g6(e){const t=e.ownerDocument.createTreeWalker(e,NodeFilter.SHOW_TEXT);let a=null;for(;t.nextNode();){const o=t.currentNode;o.nodeValue!==""&&(a=o)}return a}function x6(){const e=er(),t=x.useRef(null);return x.useEffect(()=>{if(tf)return;const a=t.current;if(a==null)return;const o=g6(a);if(o==null)return;const c=o.data,d=`${c}${m6}`;return o.nodeValue=d,e.start(h6,()=>{o.nodeValue===d&&(o.nodeValue=c)}),()=>{e.clear(),o.nodeValue===d&&(o.nodeValue=c)}},[t,e]),t}const yA=x.createContext(void 0);function b6(){const e=x.useContext(yA);if(e===void 0)throw new Error(un(20));return e}const v6=x.forwardRef(function(t,a){const{keepMounted:o=!1,...c}=t,d=Ta(),f=d.useState("mounted"),p=d.useState("forceMounted");return f||o||p?s.jsx(yA.Provider,{value:o,children:s.jsx(mh,{ref:a,...c})}):null}),y6=x.forwardRef(function(t,a){const{render:o,className:c,anchor:d,positionMethod:f,side:p,align:h,sideOffset:b,alignOffset:y,collisionBoundary:v="clipping-ancestors",collisionPadding:j,arrowPadding:w,sticky:k,disableAnchorTracking:S=!1,collisionAvoidance:N=rT,style:R,...P}=t,T=Ta(),C=qh(),E=b6(),D=T.useState("modal"),I=T.useState("open"),O=T.useState("mounted"),_=T.useState("openMethod"),z=T.useState("positionerElement"),H=T.useState("triggerElement"),B=T.useState("inputElement"),L=T.useState("inputGroupElement"),F=T.useState("inputInsidePopup"),$=T.useState("transitionStatus"),X=Gh(),q=Eh({anchor:d??(F?H:L??B),floatingRootContext:C,positionMethod:f,mounted:O,side:p,sideOffset:b,align:h,alignOffset:y,arrowPadding:w,collisionBoundary:v,collisionPadding:j,sticky:k,disableAnchorTracking:S,keepMounted:E,collisionAvoidance:N,lazyFlip:!0});aj(I&&D,_==="touch",z,H);const Q={open:I,side:q.side,align:q.align,anchorHidden:q.anchorHidden,empty:X};Me(()=>{T.set("popupSide",q.side)},[T,q.side]);const G=Ie(Y=>{T.set("positionerElement",Y)}),J=Ah(t,Q,{styles:q.positionerStyles,transitionStatus:$,props:P,refs:[a,G],hidden:!O,inert:!I});return s.jsxs(gA.Provider,{value:q,children:[O&&D&&s.jsx(Dh,{inert:Rh(!I),cutout:L??B??H}),J]})}),j6={...Wc,...uo},w6=x.forwardRef(function(t,a){const{render:o,className:c,style:d,initialFocus:f,finalFocus:p,...h}=t,b=Ta(),y=ij(),v=qh(),j=b.useState("mounted"),w=b.useState("open"),k=b.useState("openMethod"),S=b.useState("popupProps"),N=b.useState("transitionStatus"),R=b.useState("inputInsidePopup"),P=b.useState("inputElement"),T=b.useState("modal"),C=b.useState("id"),E=Gh(),D=h.id??(R?fA(C):void 0);Me(()=>(b.set("popupId",b.context.popupRef.current?.id||D),()=>{b.set("popupId",void 0)}),[b,D]),oa({open:w,ref:b.context.popupRef,onComplete(){w&&b.context.onOpenChangeComplete(!0)}});const I={open:w,side:y.side,align:y.align,anchorHidden:y.anchorHidden,transitionStatus:N,empty:E},O=yt("div",t,{state:I,ref:[a,b.context.popupRef],props:[S,{id:D,role:R?"dialog":"presentation",onFocus(L){const F=fs(L.nativeEvent);k!=="touch"&&(Ze(b.state.listElement,F)||F===L.currentTarget)&&b.context.inputRef.current?.focus()}},xf(N),h],stateAttributesMapping:j6}),z=f===void 0?R?L=>L==="touch"?b.context.popupRef.current:P:!1:f;let H;p!=null?H=p:H=R?void 0:!1;const B=!R||T;return s.jsx(hh,{context:v,disabled:!j,modal:B,openInteractionType:k,initialFocus:z,returnFocus:H,getInsideElements:()=>[b.context.startDismissRef.current,b.context.endDismissRef.current],children:s.jsxs(x.Fragment,{children:[O,B&&s.jsx(xA,{ref:b.context.endDismissRef})]})})}),S6=x.forwardRef(function(t,a){const{render:o,className:c,style:d,...f}=t;return yt("span",t,{ref:a,props:[{"aria-hidden":!0,children:"▼"},f]})}),jA=x.createContext(void 0);function wA(){const e=x.useContext(jA);if(!e)throw new Error(un(19));return e}const N6=x.createContext(!1);function k6(){return x.useContext(N6)}function SA(e){const{componentProps:t,forwardedRef:a,virtualized:o,indexFromFilter:c}=e,{render:d,className:f,style:p,value:h=null,index:b,disabled:y=!1,nativeButton:v=!1,...j}=t,w=x.useRef(null),k=tj({guess:!0,index:b,textRef:w}),S=Ta(),N=k6(),R=KF(),P=S.useState("selectionMode"),T=S.useState("disabled"),C=S.useState("readOnly"),E=S.useState("isItemEqualToValue"),D=T||y,I=P!=="none",O=b??c??k.index,_=O!==-1,z=S.useState("id"),H=S.useState("isActive",O),B=S.useState("isSelected",h),L=S.useState("itemProps"),F=x.useRef(null),$=z!=null&&_?`${z}-${O}`:void 0,X=B&&I;Me(()=>{if(!(_&&(o||b!=null)))return;const U=S.context.listRef.current;return U[O]=F.current,()=>{delete U[O]}},[_,o,O,b,S]),Me(()=>{if(!_||R)return;const M=S.context.valuesRef.current;return M[O]=h,()=>{delete M[O]}},[_,R,O,h,S]),Me(()=>{if(!_||R)return;const M=S.state.selectedValue;let U=S.state.selectedIndex;S.state.selectionMode==="multiple"&&Array.isArray(M)?U=qE(O,h,S.context.valuesRef.current,M,E,U):ca(h,M,E)&&(U=O),S.set("selectedIndex",U)},[_,R,S,O,h,E]);const{getButtonProps:K,buttonRef:q}=na({disabled:D,focusableWhenDisabled:!0,native:v,composite:!0}),Q={disabled:D,selected:X,highlighted:H};function G(M){function U(){S.context.handleSelection(M,h)}S.state.submitOnItemClick?(Ts.flushSync(U),S.context.requestSubmit()):U()}const J={id:$,role:N?"gridcell":"option","aria-selected":I?X:void 0,tabIndex:void 0,onPointerDownCapture(M){M.isPrimary&&(S.context.pointerDownItemRef.current=M.currentTarget),M.preventDefault()},onMouseDown(M){M.preventDefault()},onClick(M){D||C||G(M.nativeEvent)},onMouseUp(M){const U=S.context.pointerDownItemRef.current===M.currentTarget;S.context.pointerDownItemRef.current=null,!(D||C||M.button!==0||U||!H)&&G(M.nativeEvent)}},Y=yt("div",t,{ref:[q,a,k.ref,F],state:Q,props:[L,J,j,K]}),re=x.useMemo(()=>({selected:X,textRef:w}),[X,w]);return s.jsx(jA.Provider,{value:re,children:Y})}function C6(e){const{componentProps:t,forwardedRef:a}=e,c=Ta().useState("isItemEqualToValue"),{flatFilteredValues:d}=yf(),f=t.value??null,p=uu(d,f,c);return s.jsx(SA,{componentProps:t,forwardedRef:a,virtualized:!0,indexFromFilter:p})}const T6=x.memo(x.forwardRef(function(t,a){const c=Ta().useState("virtualized");return c&&t.index==null?s.jsx(C6,{componentProps:t,forwardedRef:a}):s.jsx(SA,{componentProps:t,forwardedRef:a,virtualized:c,indexFromFilter:void 0})})),E6=x.forwardRef(function(t,a){const{selected:o}=wA();return t.keepMounted||o?s.jsx(A6,{...t,ref:a}):null}),A6=x.memo(x.forwardRef((e,t)=>{const{render:a,className:o,style:c,keepMounted:d,...f}=e,{selected:p}=wA(),h=x.useRef(null),{transitionStatus:b,setMounted:y}=Oi(p),j=yt("span",e,{ref:[t,h],state:{selected:p,transitionStatus:b},props:[{"aria-hidden":!0,children:"✔️"},f],stateAttributesMapping:uo});return oa({batch:!0,enabled:!p,open:p,ref:h,onComplete(){p||y(!1)}}),j})),R6=x.forwardRef(function(t,a){const{render:o,className:c,style:d,children:f,...p}=t,{filteredItems:h}=yf(),b=Ta(),y=x6(),v=h.length===0?f:null;return yt("div",t,{ref:[a,b.context.emptyRef,y],props:[{children:v,role:"status","aria-live":"polite","aria-atomic":!0},p]})}),O6="、";function Kh({value:e,onValueChange:t,options:a,placeholder:o="",emptyHint:c=vo("没有匹配的选项"),searchPlaceholder:d=vo("搜索…"),disabled:f=!1,className:p,id:h,title:b,...y}){const v=x.useMemo(()=>a.filter(w=>e.includes(w.value)),[a,e]),j=v.length?v.map(w=>w.label).join(O6):o;return s.jsxs(t6,{items:a,multiple:!0,value:v,onValueChange:w=>t(w.map(k=>k.value)),isItemEqualToValue:(w,k)=>w?.value===k?.value,disabled:f,children:[s.jsxs(c6,{"data-slot":"multi-select-trigger",id:h,title:b,"aria-label":y["aria-label"],className:Ue("inline-flex h-[30px] min-w-0 cursor-pointer items-center justify-between gap-1.5 rounded-md border border-control-border bg-control px-2.5","text-[12.5px] font-normal text-foreground","transition-colors duration-150 ease-out","hover:border-control-border-hover hover:bg-control-hover","focus-visible:border-primary focus-visible:shadow-focus focus-visible:outline-none","data-disabled:cursor-not-allowed data-disabled:bg-control data-disabled:text-muted-foreground data-disabled:opacity-60",p),children:[s.jsx("span",{"data-slot":"multi-select-value",className:"min-w-0 flex-1 truncate text-left data-[placeholder]:text-muted-foreground","data-placeholder":v.length?void 0:"",title:j,children:j}),s.jsx(S6,{className:"flex flex-none text-muted-foreground transition-transform duration-[180ms] data-popup-open:rotate-180",children:s.jsx("svg",{viewBox:"0 0 10 6",className:"size-2.5","aria-hidden":"true",children:s.jsx("path",{d:"M1 1l4 4 4-4",stroke:"currentColor",strokeWidth:"1.4",fill:"none",strokeLinecap:"round",strokeLinejoin:"round"})})})]}),s.jsx(v6,{children:s.jsx(y6,{sideOffset:4,className:"z-[35]",children:s.jsxs(w6,{"data-slot":"multi-select-content",className:Ue("flex max-h-[280px] w-[max(var(--anchor-width),220px)] flex-col overflow-hidden","rounded-lg border border-border-strong bg-raised shadow-3 outline-none","data-open:animate-in data-open:fade-in-0","data-closed:animate-out data-closed:fade-out-0"),children:[s.jsxs("div",{className:"flex flex-none items-center gap-1.5 border-b border-hairline px-2.5 py-1.5",children:[s.jsxs("svg",{viewBox:"0 0 12 12",className:"size-3 flex-none text-muted-foreground","aria-hidden":"true",children:[s.jsx("circle",{cx:"5",cy:"5",r:"3.4",stroke:"currentColor",strokeWidth:"1.3",fill:"none"}),s.jsx("path",{d:"M7.6 7.6 10.5 10.5",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round"})]}),s.jsx(i6,{placeholder:d,className:"min-w-0 flex-1 border-0 bg-transparent p-0 text-[12.5px] text-foreground outline-none placeholder:text-muted-foreground"})]}),s.jsx(R6,{children:s.jsx("div",{className:"px-2.5 py-3 text-[11.5px] leading-[1.5] text-muted-foreground",children:c})}),s.jsx(p6,{className:"min-h-0 flex-1 overflow-y-auto overscroll-contain p-[5px]",children:w=>s.jsxs(T6,{value:w,className:Ue("grid cursor-pointer grid-cols-[14px_minmax(0,1fr)] items-center gap-2 rounded-sm px-[9px] py-[5px]","text-[12.5px] leading-[1.4] text-foreground select-none outline-none","transition-colors duration-[120ms] ease-out","data-[highlighted]:bg-nav-hover","data-[selected]:bg-primary-soft data-[selected]:font-semibold data-[selected]:text-primary-fg","data-[highlighted]:data-[selected]:bg-primary-tint","data-disabled:pointer-events-none data-disabled:text-muted-foreground"),children:[s.jsx(E6,{className:"col-start-1 flex text-primary",children:s.jsx("svg",{viewBox:"0 0 12 12",className:"size-3","aria-hidden":"true",children:s.jsx("path",{d:"M2.5 6.2 4.8 8.5 9.5 3.8",stroke:"currentColor",strokeWidth:"1.8",fill:"none",strokeLinecap:"round",strokeLinejoin:"round"})})}),s.jsx("span",{className:"col-start-2 min-w-0 truncate",children:w.label})]},w.value)})]})})})]})}const NA=x.createContext(void 0);function jf(e){const t=x.useContext(NA);if(t===void 0&&!e)throw new Error(un(47));return t}const M6={...Hy,disabled:e=>e.disabled,instantType:e=>e.instantType,openMethod:e=>e.openMethod,openChangeReason:e=>e.openChangeReason,modal:e=>e.modal,focusManagerModal:e=>e.focusManagerModal,stickIfOpen:e=>e.stickIfOpen,titleElementId:e=>e.titleElementId,descriptionElementId:e=>e.descriptionElementId,openOnHover:e=>e.openOnHover,closeDelay:e=>e.closeDelay,adaptiveOrigin:e=>e.adaptiveOrigin};class D6 extends iu{constructor(a,o,c){const d=new yh;super(I6(a,d,o,c),P6(d),M6);cn(this,"setOpen",(a,o)=>{const c=o.reason===qs,d=o.reason===xo&&o.event.detail===0,f=!a&&(o.reason===su||o.reason==null),p=zT(o),h=this.select("activeTriggerId");if(!a&&o.reason===dy&&o.trigger==null&&h!=null&&(o.trigger=this.context.triggerElements.getById(h)??this.select("activeTriggerElement")??void 0),this.context.onOpenChange?.(a,o),o.isCanceled)return;this.state.floatingRootContext.dispatchOpenChange(a,o);const b=()=>{const v=Iy(this.state,a,o.trigger,p());v.openChangeReason=o.reason,this.update(v)};c?(this.set("stickIfOpen",!0),this.context.stickIfOpenTimeout.start(xH,()=>{this.set("stickIfOpen",!1)}),Ts.flushSync(b)):b();let y;d?y="click":f?y="dismiss":o.reason===bo&&(y="focus"),this.set("instantType",y)})}}function I6(e,t,a,o=!1){const c={...zy(t,a,o),disabled:!1,modal:!1,focusManagerModal:!1,instantType:void 0,openMethod:null,openChangeReason:null,titleElementId:void 0,descriptionElementId:void 0,stickIfOpen:!0,openOnHover:!1,closeDelay:0,adaptiveOrigin:void 0,...e};return c.open&&e?.mounted===void 0&&(c.mounted=!0),c}function P6(e){return{popupRef:x.createRef(),onOpenChange:void 0,onOpenChangeComplete:void 0,triggerFocusTargetRef:x.createRef(),beforeContentFocusGuardRef:x.createRef(),stickIfOpenTimeout:new la,triggerElements:e}}const kA=dh(function({props:t}){const{children:a,open:o,defaultOpen:c=!1,onOpenChange:d,onOpenChangeComplete:f,modal:p=!1,handle:h,triggerId:b,defaultTriggerId:y=null}=t,v=L6(h,{modal:p,open:c,openProp:o,activeTriggerId:y,triggerIdProp:b});v.useControlledProp("openProp",o),v.useControlledProp("triggerIdProp",b);const j=v.useState("open"),w=v.useState("mounted"),k=v.useState("payload");v.useContextCallback("onOpenChange",d),v.useContextCallback("onOpenChangeComplete",f),HT(v,j),Py(v);const{forceUnmount:S}=_y(j,v,()=>{v.update({stickIfOpen:!0,openChangeReason:null})});v.useSyncedValues({modal:p}),x.useEffect(()=>{j||v.context.stickIfOpenTimeout.clear()},[v,j]),x.useImperativeHandle(t.actionsRef,()=>({unmount:S,close:()=>v.setOpen(!1,qe(py))}),[S,v]);const N=j||w;return s.jsxs(NA.Provider,{value:v,children:[h&&s.jsx(Dy,{handle:h,store:v}),N&&s.jsx(z6,{store:v,modal:p}),typeof a=="function"?a({payload:k}):a]})});function _6(e){return jf(!0)?s.jsx(kA,{props:e}):s.jsx(NH,{children:s.jsx(kA,{props:e})})}function L6(e,t){const a=My((o,c)=>new D6(t,o,c));return x.useEffect(()=>a.context.stickIfOpenTimeout.disposeEffect(),[a]),a}function z6({store:e,modal:t}){const a=e.useState("floatingRootContext"),o=pf(a,{outsidePressEvent:{mouse:t==="trap-focus"?"sloppy":"intentional",touch:"sloppy"}}),c=o.reference,d=o.floating;return Ly(e,{activeTriggerProps:c,inactiveTriggerProps:c,popupProps:d}),null}const B6=300;function H6(e,t){const a=x.useRef(null);function o(d){Ts.flushSync(()=>{e.setOpen(!1,qe(bo,d.nativeEvent,d.currentTarget))}),b4(a.current)?.focus()}function c(d){const f=e.select("positionerElement");if(f&&eu(d,f))e.context.beforeContentFocusGuardRef.current?.focus();else{Ts.flushSync(()=>{e.setOpen(!1,qe(bo,d.nativeEvent,d.currentTarget))});let p=x4(e.context.triggerFocusTargetRef.current||t.current);for(;p!==null&&Ze(f,p);){const h=p;if(p=iy(p),p===h)break}p?.focus()}}return{preFocusGuardRef:a,handlePreFocusGuardFocus:o,handleFocusTargetFocus:c}}const U6=G1(function(t,a){const{render:o,className:c,style:d,disabled:f=!1,nativeButton:p=!0,handle:h,payload:b,openOnHover:y=!1,delay:v=B6,closeDelay:j=0,id:w,...k}=t,S=jf(!0),R=FT(h)??S;if(!R)throw new Error(un(74));const P=ka(w),T=R.useState("isTriggerActive",P),C=R.useState("floatingRootContext"),E=R.useState("isOpenedByTrigger",P),D=R.useState("triggerPopupId",P),I=x.useRef(null),{registerTrigger:O,isMountedByThisTrigger:_}=BT(P,I,R,{payload:b,disabled:f,openOnHover:y,closeDelay:j}),z=R.useState("openChangeReason"),H=R.useState("stickIfOpen"),B=R.useState("openMethod"),L=R.useState("focusManagerModal"),F=KT(C,{enabled:!f&&y&&(B!=="touch"||z!==xo),mouseOnly:!0,move:!1,handleClose:WT(),restMs:v,delay:{close:j},triggerElementRef:I,isActiveTrigger:T,isClosing:()=>R.select("transitionStatus")==="ending"}),$=gh(C,{stickIfOpen:H}),X=TE(()=>R.select("open"),ae=>{R.set("openMethod",ae)}),K=R.useState("triggerProps",_),{getButtonProps:q,buttonRef:Q}=na({disabled:f,native:p}),G={open(ae){return ae&&z===xo?Yv.open(ae):Kv.open(ae)}},{preFocusGuardRef:J,handlePreFocusGuardFocus:Y,handleFocusTargetFocus:re}=H6(R,I),U=yt("button",t,{state:{disabled:f,open:E},ref:[Q,a,O,I],props:[$.reference,F,K,X,{[sT]:"",id:P,"aria-haspopup":"dialog","aria-expanded":E,"aria-controls":D},k,q],stateAttributesMapping:G}),Z=s.jsx(x.Fragment,{children:U},P);return _&&!L?s.jsxs(x.Fragment,{children:[s.jsx(au,{ref:J,onFocus:Y}),Z,s.jsx(au,{ref:R.context.triggerFocusTargetRef,onFocus:re})]}):Z}),CA=x.createContext(void 0);function V6(){const e=x.useContext(CA);if(e===void 0)throw new Error(un(45));return e}const F6=x.forwardRef(function(t,a){const{keepMounted:o=!1,...c}=t;return jf().useState("mounted")||o?s.jsx(CA.Provider,{value:o,children:s.jsx(mh,{ref:a,...c})}):null}),TA=x.createContext(void 0);function $6(){const e=x.useContext(TA);if(!e)throw new Error(un(46));return e}const q6=x.forwardRef(function(t,a){const{render:o,className:c,style:d,anchor:f,positionMethod:p,side:h,align:b,sideOffset:y,alignOffset:v,collisionBoundary:j="clipping-ancestors",collisionPadding:w,arrowPadding:k,sticky:S,disableAnchorTracking:N=!1,collisionAvoidance:R=aT,...P}=t,T=jf(),C=V6(),E=wH(),D=T.useState("floatingRootContext"),I=T.useState("mounted"),O=T.useState("open"),_=T.useState("openChangeReason"),z=T.useState("activeTriggerElement"),H=T.useState("modal"),B=T.useState("openMethod"),L=T.useState("positionerElement"),F=T.useState("instantType"),$=T.useState("transitionStatus"),X=T.useState("adaptiveOrigin"),K=x.useRef(null),q=D1(L),Q=Eh({anchor:f,floatingRootContext:D,positionMethod:p,mounted:I,side:h,sideOffset:y,align:b,alignOffset:v,arrowPadding:k,collisionBoundary:j,collisionPadding:w,sticky:S,disableAnchorTracking:N,keepMounted:C,nodeId:E,collisionAvoidance:R,adaptiveOrigin:X}),G=D.useState("domReferenceElement");Me(()=>{const U=G,Z=K.current;if(U&&(K.current=U),Z&&U&&U!==Z){T.set("instantType",void 0);const ae=new AbortController;return q(()=>{T.set("instantType","trigger-change")},ae.signal),()=>{ae.abort()}}},[G,q,T]);const J=H===!0&&_!==qs;aj(O&&J,B==="touch",L,z);const Y=T.useStateSetter("positionerElement"),re={open:O,side:Q.side,align:Q.align,anchorHidden:Q.anchorHidden,instant:F},M=Ah(t,re,{styles:Q.positionerStyles,transitionStatus:$,props:P,refs:[a,Y],hidden:!I,inert:!O});return s.jsxs(TA.Provider,{value:Q,children:[I&&J&&s.jsx(Dh,{inert:Rh(!O),cutout:z}),s.jsx(SH,{id:E,children:M})]})}),G6=x.createContext(void 0);function K6(){const[e,t]=x.useState(0),a=Ie(()=>(t(c=>c+1),()=>{t(c=>Math.max(0,c-1))}));return{context:x.useMemo(()=>({register:a}),[a]),hasClosePart:e>0}}const Y6=x.forwardRef(function(t,a){const{render:o,className:c,style:d,initialFocus:f,finalFocus:p,...h}=t,b=jf(),y=$6(),v=eA()!=null,{context:j,hasClosePart:w}=K6(),k=b.useState("open"),S=b.useState("openMethod"),N=b.useState("instantType"),R=b.useState("transitionStatus"),P=b.useState("popupProps"),T=b.useState("titleElementId"),C=b.useState("descriptionElementId"),E=b.useState("modal"),D=b.useState("mounted"),I=b.useState("openChangeReason"),O=b.useState("activeTriggerElement"),_=b.useState("floatingRootContext"),z=_.useState("floatingId"),H=b.useState("disabled"),B=b.useState("openOnHover"),L=b.useState("closeDelay");oa({open:k,ref:b.context.popupRef,onComplete(){k&&b.context.onOpenChangeComplete?.(!0)}}),GT(_,{enabled:B&&!H,closeDelay:L});const F=f===void 0?_T(b.context.popupRef):f,$=E!==!1&&w;b.useSyncedValue("focusManagerModal",$);const X=b.useStateSetter("popupElement"),K={open:k,side:y.side,align:y.align,instant:N,transitionStatus:R},q=yt("div",t,{state:K,ref:[a,b.context.popupRef,X],props:[P,{id:z,role:"dialog",...mf,"aria-labelledby":T,"aria-describedby":C,onKeyDown(Q){v&&Oh.has(Q.key)&&Q.stopPropagation()}},xf(R),h],stateAttributesMapping:Xv});return s.jsx(hh,{context:_,openInteractionType:S,modal:$,disabled:!D||I===qs,initialFocus:F,returnFocus:p,restoreFocus:"popup",previousFocusableElement:pn(O)?O:void 0,nextFocusableElement:b.context.triggerFocusTargetRef,beforeContentFocusGuardRef:b.context.beforeContentFocusGuardRef,children:s.jsx(G6.Provider,{value:j,children:q})})});function wf(e){return s.jsx(_6,{"data-slot":"popover",...e})}function Yh(e){return s.jsx(U6,{"data-slot":"popover-trigger",...e})}function Sf({className:e,sideOffset:t=6,align:a="start",side:o,alignOffset:c,collisionPadding:d=8,anchor:f,children:p,...h}){return s.jsx(F6,{children:s.jsx(q6,{className:"z-[35] outline-none",sideOffset:t,align:a,side:o,alignOffset:c,collisionPadding:d,anchor:f,children:s.jsx(Y6,{"data-slot":"popover-content",className:Ue("flex max-h-[min(70vh,560px)] flex-col overflow-hidden rounded-lg border border-border-strong bg-raised text-foreground shadow-3","outline-none","data-open:animate-in data-open:fade-in-0 data-open:slide-in-from-top-1","data-closed:animate-out data-closed:fade-out-0",e),...h,children:p})})})}function X6({page:e,pageCount:t,onPageChange:a,disabled:o=!1,className:c,infoFirst:d=!1}){const f=Math.max(1,Number(t)||1),p=Math.min(Math.max(1,Number(e)||1),f),h=s.jsx("span",{"data-slot":"pager-info",className:"text-[11.5px] text-subtle [font-variant-numeric:tabular-nums]",children:vo("第 {current} / {total} 页",{current:p,total:f})});return s.jsxs("div",{"data-slot":"pager",className:Ue("flex items-center gap-2",c),children:[d&&h,s.jsx(ne,{type:"button",variant:"outline",size:"sm",disabled:o||p<=1,onClick:()=>a(p-1),children:vo("上一页")}),s.jsx(ne,{type:"button",variant:"outline",size:"sm",disabled:o||p>=f,onClick:()=>a(p+1),children:vo("下一页")}),!d&&h]})}const Q6=Qc(["relative flex w-full items-center gap-2.5 text-left","border border-transparent rounded-sm","shadow-none","transition-[background-color,border-color,color] duration-150 ease-out","outline-none focus-visible:shadow-focus","disabled:pointer-events-none disabled:opacity-45","[&_svg]:pointer-events-none [&_svg]:shrink-0"],{variants:{variant:{default:["cursor-pointer px-2.5 py-2","text-[12.5px] font-medium text-sidebar-fg","hover:bg-nav-hover hover:text-foreground","data-[active]:border-nav-selected-border data-[active]:bg-nav-selected-bg data-[active]:font-semibold data-[active]:text-nav-selected-fg"],add:["cursor-pointer justify-center px-2 py-1.5","border-dashed border-border-strong bg-transparent","text-[11.5px] text-muted-foreground","hover:border-primary hover:text-primary-fg"]}},defaultVariants:{variant:"default"}});function du({className:e,variant:t,active:a=!1,count:o,icon:c,trailing:d,children:f,...p}){return s.jsxs("button",{type:"button","data-slot":"nav-item","data-active":a?"":void 0,"aria-current":a?"true":void 0,className:Ue(Q6({variant:t}),e),...p,children:[c,s.jsx("span",{"data-slot":"nav-item-label",className:"min-w-0 flex-1 truncate",children:f}),d,o!=null&&s.jsx("span",{"data-slot":"nav-item-count",className:Ue("flex-none text-[10.5px] text-sidebar-muted [font-variant-numeric:tabular-nums]",a&&"text-inherit"),children:o})]})}function r(e,t){const a=typeof window<"u"?window.wbI18n:void 0;return a&&typeof a.t=="function"?a.t(e,t):e}function Xh(e){if(e.source==="subscription"&&(e.port===null||e.port===void 0))return r("未分配端口");const t=e.resolved;return t?.protocol&&t.host&&t.port?`${String(t.protocol).toUpperCase()} ${t.host}:${t.port}`:t?.label||""}function fu(e){const t=e.name||e.id,o=[e.resolveError?r("解析失败"):Xh(e),e.enabled===!1?r("已禁用"):""].filter(Boolean);return o.length?r("{name}({parts})",{name:t,parts:o.join(" · ")}):t}const Qa="pool:";function Pe(){return window}function _e(e,t){Pe().wbApp?.toast?.(e,t)}function Za(e){const t=Pe().wbApp?.esc;return t?t(e):String(e??"").replace(/[&<>"']/g,a=>({"&":"&","<":"<",">":">",'"':""","'":"'"})[a]||a)}function Ls(e){const t=Pe().wbApp?.formatTime;if(t)return t(e);const a=Number(e);return!Number.isFinite(a)||a<=0?"":new Date(a).toLocaleString("zh-CN")}function ut(e){return e instanceof Error?e.message:String(e)}function ss(e){if(e==null||e==="")return"—";const t=Number(e);return Number.isFinite(t)?String(Number(t.toFixed(2))):String(e)}function pu(e){if(e==null||e==="")return null;const t=Number(e);return Number.isFinite(t)?t:null}function cj(e){const t=new Date(e);if(Number.isNaN(t.getTime()))return"";const a=o=>String(o).padStart(2,"0");return`${a(t.getMonth()+1)}-${a(t.getDate())} ${a(t.getHours())}:${a(t.getMinutes())}`}function Z6(e){return e==="积分"?r("积分"):e==="额度"?r("额度"):e}function W6(e){if(!e||typeof e!="object"||Array.isArray(e))return[];const t=e,a=Array.isArray(t.credits)?t.credits:[],o=Date.now();return a.map(c=>{const d=String(c?.name||"").trim()||r("积分包"),f=String(c?.unit||"").trim(),p=pu(c?.total),h=pu(c?.used),b=pu(c?.remain),y=c?.unlimited===!0,v=pu(c?.grantAt),j=pu(c?.startAt),w=pu(c?.expireAt),k=c?.daily===!0,S=String(c?.grantReason||"").trim(),N=w!==null&&w>0&&w<=o,R=p!==null&&p>0,P=y?r("不限"):b!==null?R?r("剩 {remaining} / {total}",{remaining:ss(b),total:ss(p)}):r("剩 {remaining}",{remaining:ss(b)}):h!==null?r("已用 {used}",{used:ss(h)}):"—",T=!y&&f&&P!=="—"?`${P} ${Z6(f)}`:P,C=R&&b!==null?Math.max(0,Math.min(100,b/p*100)):null,E=b!==null&&b<=0||b===null&&h!==null&&R&&h>=p,D=!y&&!k&&(E||N),I=[];v!==null&&v>0?I.push(r("{time} 领取",{time:cj(v)})):j!==null&&j>0&&I.push(r("{time} 生效",{time:cj(j)})),k?I.push(r("每日重置")):w!==null&&w>0&&I.push(N?r("已过期"):r("{time} 到期",{time:cj(w)})),S&&I.push(S);const O=N||b===0?"muted":C!==null&&C<20?"warn":b===null&&h===null&&!y?"muted":"ok",_=[d,T,v!==null&&v>0?r("领取 {time}",{time:Ls(v)}):j!==null&&j>0?r("生效 {time}",{time:Ls(j)}):"",w!==null&&w>0?N?r("已过期({time})",{time:Ls(w)}):r("到期 {time}",{time:Ls(w)}):"",k?r("每日重置(额度按周期回满,不是作废)"):"",S,C===null&&b!==null?r("上游未给总量,画不出剩余比例"):"",h!==null&&p!==null?r("已用 {used} / 共 {total}",{used:ss(h),total:ss(p)}):""].filter(Boolean).join(" · ");return{name:d,view:T,tone:O,percent:C,window:I.length?I.join(" · "):null,title:_,spent:D}})}function EA({row:e}){return s.jsxs("div",{className:"usage-pop-row",title:e.title,children:[s.jsxs("div",{className:"usage-pop-line",children:[s.jsx("span",{className:"usage-pop-name",children:e.name}),s.jsx("span",{className:`usage-pop-view ${e.tone}`,children:e.view})]}),e.window?s.jsx("div",{className:"usage-pop-window",children:e.window}):null,e.percent!==null?s.jsx("span",{className:"usage-pop-track",children:s.jsx("i",{style:{width:`${e.percent}%`},"aria-label":r("剩余 {percent}%",{percent:Math.round(e.percent)})})}):null]})}function AA({rows:e,subscriptionLine:t,variant:a,kind:o,title:c,children:d}){const[f,p]=x.useState(!1),[h,b]=x.useState(!1),y=e.filter(N=>!N.spent),v=e.filter(N=>N.spent),j=a==="pool"?`usage-toggle usage-pool-line ${o}`:`usage-toggle ${o}`,w=x.useRef(null),k=x.useCallback(N=>{w.current=N,N&&(N.scrollTop=0)},[]),S=x.useCallback(()=>w.current??null,[]);return x.useLayoutEffect(()=>{if(!h)return;const N=w.current?.querySelector(".usage-pop-spent .usage-pop-row");N instanceof HTMLElement&&N.scrollIntoView({block:"nearest"})},[h]),s.jsxs(wf,{open:f,onOpenChange:p,children:[s.jsxs(Yh,{render:s.jsx("button",{type:"button",className:j,title:c,"aria-label":r("积分明细")}),children:[a==="pool"?d:s.jsx("span",{className:"val",children:d}),s.jsx("span",{className:"caret","aria-hidden":!0,children:"▾"})]}),s.jsx(Sf,{align:"end",sideOffset:6,className:"w-[320px]",initialFocus:S,children:s.jsxs("div",{className:"usage-pop-credit",ref:k,tabIndex:-1,children:[t?s.jsx("div",{className:"usage-pop-sub",children:t}):null,s.jsx("div",{className:"usage-pop-group",children:r("积分明细")}),y.map((N,R)=>s.jsx(EA,{row:N},`${N.name}-${R}`)),v.length>0?s.jsxs("div",{className:"usage-pop-spent",children:[s.jsxs("button",{type:"button",className:"usage-pop-spent-head","aria-expanded":h,title:r("展开或收起(默认收起)"),onClick:()=>b(N=>!N),children:[s.jsx("span",{className:"caret","aria-hidden":!0,children:"▾"}),s.jsx("span",{children:r("已用完 / 已过期")}),s.jsx("span",{className:"n",children:r("{count} 份",{count:v.length})})]}),h?v.map((N,R)=>s.jsx(EA,{row:N},`spent-${N.name}-${R}`)):null]}):null]})})]})}const mu="workbuddy",J6="raccoon",e$={workbuddy:{usage:!0,creditDetail:!0,edition:!0,identifier:"uid",expiry:"expiresAt"},"workbuddy-intl":{usage:!0,creditDetail:!0,edition:!1,identifier:"uid",expiry:"expiresAt"},raccoon:{usage:!0,creditDetail:!0,edition:!1,identifier:"userId",expiry:"tokenExpiresAt"},catpaw:{usage:!0,edition:!1,identifier:"uid",expiry:"tokenExpiresAt"},autoclaw:{usage:!0,creditDetail:!0,edition:!1,identifier:"userId",expiry:"tokenExpiresAt"},"autoclaw-intl":{usage:!0,creditDetail:!0,edition:!1,identifier:"userId",expiry:"tokenExpiresAt",emailAsName:!0},qoder:{usage:!0,creditDetail:!0,edition:!0,identifier:"userId",expiry:"expiresAt",emailAsName:!0},"qoder-intl":{usage:!0,creditDetail:!0,edition:!0,identifier:"userId",expiry:"expiresAt",emailAsName:!0},"cline-free":{usage:!0,edition:!1,identifier:"account",expiry:"expiresAt"},"cline-pass":{usage:!0,edition:!1,identifier:"account",expiry:"expiresAt"},accio:{usage:!0,edition:!0,identifier:"userId",expiry:"expiresAt",emailAsName:!0},"accio-cn":{usage:!0,edition:!0,identifier:"userId",expiry:"expiresAt",emailAsName:!0},zcode:{usage:!0,creditDetail:!0,claim:!0,planChannel:!0,edition:!0,identifier:"userId",expiry:"expiresAt"},"zcode-intl":{usage:!0,creditDetail:!0,claim:!0,planChannel:!0,edition:!0,identifier:"userId",expiry:"expiresAt"},codearts:{usage:!0,usageDetail:!0,edition:!1,identifier:"userId",expiry:"expiresAt",concurrencyDefault:3},trae:{usage:!0,creditDetail:!0,edition:!1,identifier:"uid",expiry:"expiresAt"},loomy:{usage:!0,creditDetail:!0,edition:!1,identifier:"userId",expiry:"expiresAt"},kuku:{usage:!0,edition:!1,identifier:"uid",expiry:""},officeace:{usage:!0,creditDetail:!0,edition:!1,identifier:"id",expiry:"expiresAt"},antigravity:{usage:!0,edition:!1,identifier:"userId",expiry:""},modelscope:{usage:!0,creditDetail:!0,edition:!1,identifier:"userId",expiry:""},"modelscope-intl":{usage:!0,creditDetail:!0,edition:!1,identifier:"userId",expiry:""},chatglm:{usage:!0,creditDetail:!0,edition:!1,identifier:"uid",expiry:""}},t$={usage:!1,edition:!1,identifier:"userId",expiry:"tokenExpiresAt",emailAsName:!1};function An(e){const t=e?.provider;return typeof t=="string"&&t?t:mu}function cr(e){return e&&e$[e]||t$}const n$="opencode",s$="https://opencode.ai/zen/go/v1";function RA(e,t){if(!e||e.clientEmulation!==n$)return!1;const o=((typeof t=="string"?t.trim():"")||String(e.baseUrl||"")).trim().replace(/\/+$/,"").toLowerCase();return o?o!==s$:!1}function r$(e){const t=e?An(e):"";return t.startsWith("custom-")&&(Pe().wbProviders?.customList?.()||[]).find(o=>o?.id===t)||null}function a$(e){return e?RA(r$(e),e.baseUrl):!1}function OA(e){const t=Array.isArray(e?.providers)?e.providers:[],a=Array.isArray(e?.accounts)?e.accounts:[],o=new Map;a.forEach(d=>{const f=An(d);o.set(f,(o.get(f)||0)+1)});const c=new Map;return t.forEach(d=>{d?.id&&c.set(String(d.id),{id:String(d.id),label:String(d.label||d.id),count:Number(d.count)||0})}),o.forEach((d,f)=>{c.has(f)||c.set(f,{id:f,label:Pe().wbProviders?.labelOf?.(f)||f,count:d})}),c.size||c.set(mu,{id:mu,label:Pe().wbProviders?.labelOf?.(mu)||"WorkBuddy 国内版",count:0}),[...c.values()]}function Qh(e){const t=cr(An(e)).identifier;return String(e?.[t]||"")}function MA(e){const t=Number(e)||0;return t<=0?0:t<1e11?t*1e3:t}function l$(e){const t=cr(An(e)).expiry;return MA(e?.[t])}function Ea(e){const t=An(e);return t.startsWith("custom-")?!!e?.balanceQuery?.scheme:cr(t).usage}const uj=30,DA=86400,IA=60,PA=1800,_A=86400,LA=1,o$=95e5;function i$(e){return e==="codearts"?[{type:"token",action:"skip",threshold:o$,reset:"daily",enabled:!0}]:e==="cline-free"?[]:[{type:"balance",action:"skip",threshold:LA,enabled:!0}]}function zA(e){const t=e?.usageQuery;if(!t||typeof t!="object")return{enabled:!0,interval:IA};const a=t.enabled===void 0?!0:t.enabled===!0,o=Number(t.interval)||0,c=o>=uj&&o<=DA;return{enabled:a,interval:a&&!c?IA:o}}function c$(e){if(!e||typeof e!="object")return!1;const t=e;if(t.type!=="balance"&&t.type!=="token"||t.action!=="skip"&&t.action!=="disable")return!1;const a=Number(t.threshold);if(!Number.isFinite(a)||a<=0)return!1;if(t.type==="token"&&t.reset!=="daily"){const o=Number(t.period);if(!Number.isInteger(o)||o_A)return!1}return!0}function u$(e){const t=e?.lowBalance;if(!t||typeof t!="object"||!t.mode)return i$(An(e));const a=Number(t.threshold),o=Number.isFinite(a)&&a>0?a:LA;return t.mode!=="skip"&&t.mode!=="disable"?[]:[{type:"balance",action:t.mode,threshold:o,enabled:!0}]}function hu(e){const t=e?.limiters;return Array.isArray(t)?t.filter(c$):u$(e)}function d$(e){return hu(e).filter(t=>t.type==="token")}function f$(e,t){const a=t*1e3;return e-e%a}function BA(e){return e.reset==="daily"?0:e.period??0}function dj(e,t=Date.now()){if(e===0){const a=new Date(t);return a.setHours(0,0,0,0),a.getTime()}return f$(t,e)}function Nf(e,t,a=Date.now()){if(e.type!=="token")return null;const o=BA(e),c=(t||[]).find(d=>Number(d.kind)===o);return c&&Number(c.windowStart)===dj(o,a)?c:null}function Zh(e,t){const a=hu(e).filter(f=>f.type==="balance"&&f.action==="skip"&&f.enabled!==!1&&f.threshold>0);if(!a.length||!t||typeof t!="object")return!1;const o=t;if(o.unlimited)return!1;const c=o.totalLeft??o.available;if(c==null||c==="")return!1;const d=Number(c);return Number.isFinite(d)&&a.some(f=>dc.type==="token"&&c.action==="skip"&&c.enabled!==!1);if(!a.length||!t?.length)return!1;const o=Date.now();return a.some(c=>{const d=Nf(c,t,o);return d!==null&&Number(d.used)>=c.threshold})}function p$(e,t){return hu(e).some(a=>{if(a.type!=="token"||a.action!=="disable"||a.enabled===!1)return!1;const o=Nf(a,t);return o!==null&&Number(o.used)>=a.threshold})}function pj(e,t=Date.now()){const a=BA(e),o=dj(a,t),c=a===0?Math.max(0,dj(0,o+864e5+36e5)-t):Math.max(0,o+a*1e3-t);return{kind:a,startMs:o,remainingMs:c,daily:a===0}}function Wh(e,t){if(e<=0)return"";const a=Math.ceil(e/6e4);if(t){const o=Math.ceil(e/36e5);return o>=1?r("今日剩 {n} 小时",{n:o}):r("今日剩 {n} 分钟",{n:a})}return a>=1?r("剩 {n} 分钟",{n:a}):r("剩不到 1 分钟")}function El(e){const t=Number(e);if(!Number.isFinite(t))return"—";const a=window.wbUnits;return a?.formatTokens?a.formatTokens(t):String(Math.round(t))}function HA(e){return e>0&&e%3600===0?r("{n} 小时",{n:e/3600}):e>0&&e%60===0?r("{n} 分钟",{n:e/60}):r("{n} 秒",{n:e})}function kf(e){return e?.desktop===!0}function UA(e){return e?.chatSupported!==!1}function m$(e){return typeof e=="string"&&e.startsWith("custom-")}function h$(e){return r(e==="enterprise"?"企业":e==="ultimate"?"旗舰":"个人")}function Jh(e,t){const a=Number(e?.priority??100)-Number(t?.priority??100);return a!==0?a:(Number(e?.addedAt)||0)-(Number(t?.addedAt)||0)}function ur(e){return e?.enabled!==!1}function Cf(e,t=""){const a=e?.rateLimits||{},o=Date.now();return t?Number(a[t]?.resetAt)>o:Object.values(a).some(c=>Number(c?.resetAt)>o)}function VA(e){return e?.edition==="intl"?"intl":"cn"}function FA(e){return cr(An(e)).claim?e?.canClaim!==!1:!1}const $A="coding-plan",No="start-plan";function eg(e){return!!cr(An(e)).planChannel}function mj(e){return eg(e)?String(e?.zcodePlan||"").trim()===No?No:$A:""}function g$(e){return r(e===No?"套餐池(Start Plan)":"编码套餐(Coding Plan)")}function qA(e){switch(String(e??"").trim()){case"pending":return r("待生效");case"active":return r("生效中");case"expired":return r("已过期");case"unknown":return r("状态未知");default:return String(e??"")}}function tg(e){const t=e?.claimPlans;if(!t||typeof t!="object"||Array.isArray(t))return[];const a=gj();return Object.entries(t).filter(([,o])=>Number(o)>0&&gj(Number(o))===a).map(([o])=>o)}function x$(e){return tg(e).length>0}function b$(e){const t=tg(e),a=t.length?r("({plans})",{plans:t.join(r("、"))}):"";return r("今天(北京时间 {day})已领取 {n} 份{names};还有其他可领套餐时,点这里可以继续领;活动按自然日发新套餐,明天可再领",{day:gj(),n:t.length,names:a})}function v$(e){return!!cr(An(e)).usageDetail}function GA(e){return!!cr(An(e)).creditDetail}function hj(e){return/^free$/i.test(String(e??"").trim())}function KA(e){const t=String(e??"").trim();return/^trial$/i.test(t)?r("试用版"):hj(t)?r("免费版"):t}function gj(e=Date.now()){return new Date(e+8*3600*1e3).toISOString().slice(0,10)}function Tf(e,t,a){return Cf(e)||Zh(e,t)||fj(e,a)}function YA(e,t){const a=String(t.q||"").trim().toLowerCase();return a?[gu(e),e?.name,e?.nickname,e?.email,Qh(e),e?.id].some(c=>String(c||"").toLowerCase().includes(a)):!0}function XA(e,t){return t.provider==="all"||An(e)===t.provider}function xj(e,t){return t.enabled==="all"?!0:t.enabled==="enabled"?ur(e):!ur(e)}function QA(e,t,a,o){if(t.limit==="all")return!0;if(!ur(e))return!1;const c=Tf(e,a?.(e),o?.(e));return t.limit==="limited"?c:!c}function ZA(e,t,a,o){return XA(e,t)&&xj(e,t)&&QA(e,t,a,o)&&YA(e,t)}function y$(e,t,a,o){return(e||[]).filter(c=>ZA(c,t,a,o))}function WA(e,t,a,o){const c=e||[],d=h=>c.filter(b=>XA(b,t)&&(h==="enabled"||xj(b,t))&&YA(b,t)),f=d("enabled"),p=d("limit");return{enabledAll:f.length,enabled:f.filter(ur).length,disabled:f.filter(h=>!ur(h)).length,limitAll:p.length,normal:p.filter(h=>ur(h)&&!Tf(h,a?.(h),o?.(h))).length,limited:p.filter(h=>ur(h)&&Tf(h,a?.(h),o?.(h))).length}}function bj(e){const t=e?.rateLimits;if(!t||typeof t!="object")return[];const a=Date.now();return Object.entries(t).map(([o,c])=>({model:o,...c&&typeof c=="object"?c:{}})).filter(o=>Number(o.resetAt)>a).sort((o,c)=>Number(o.resetAt)-Number(c.resetAt))}function vj(e){const t=(e||[]).slice().sort(Jh),a=new Map;return t.forEach((o,c)=>a.set(o.id,{position:c+1,total:t.length})),a}function j$(e,t,a,o){const c=(e||[]).slice().sort(Jh),d=[],f=new Map;for(const p of c){const h=An(p);f.has(h)||(f.set(h,[]),d.push(h)),f.get(h).push(p)}return d.map((p,h)=>{const b=f.get(p)||[];return{provider:p,label:Pe().wbProviders?.labelOf?.(p)||p,rank:h+1,members:b,accounts:t?b.filter(t):b,enabled:b.filter(ur).length,disabled:b.filter(y=>!ur(y)).length,limited:b.filter(y=>ur(y)&&Tf(y,a?.(y),o?.(y))).length}})}function gu(e){if(!e)return"";const t=String(e.name||"").trim();if(e.nameCustom===!0&&t)return t;const a=String(e.email||"").trim();return cr(An(e)).emailAsName&&a?a:e?.nickname||t||Qh(e)||e?.id||""}const yj="已限流",JA=e=>new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime();function jj(e){const t=Number(e);if(!Number.isFinite(t)||t<=0||t<=Date.now())return yj;const a=new Date(t),o=a.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit",hour12:!1}),c=Math.round((JA(a)-JA(new Date))/864e5);return c===0?r("今天 {clock}",{clock:o}):c===1?r("明天 {clock}",{clock:o}):r("{month}月{day}日 {clock}",{month:a.getMonth()+1,day:a.getDate(),clock:o})}function w$(e){const t=An(e);if(!cr(t).edition)return"";const a=VA(e),o=e?.editionLabel,c=o||(a==="intl"?"国际版":"国内版");return(Pe().wbProviders?.labelOf?.(t)||"").includes(c)?"":o||r(a==="intl"?"国际版":"国内版")}function S$(e){return[UA(e)?null:{text:r("仅账号管理"),kind:"plain",title:r("该提供商的推理转发尚未接入,账号不参与转发")},m$(An(e))&&e.hasCredentials===!1?{text:r("未配置凭证"),kind:"bad",title:r("这条自定义账号既没有 API Key,也没有勾选「无需鉴权」:转发时会被跳过,该提供商下的模型也不会出现在模型列表里。去账号「设置」里补上 Key,或勾选「该上游无需鉴权」")}:null,e.proxy?.error?{text:r("代理异常"),kind:"bad",title:r("{error}(转发时会回退直连)",{error:e.proxy.error})}:null,mj(e)===No?{text:r("套餐池"),kind:"plain",title:r("转发走套餐池(Start Plan)通道(zcode.z.ai 的 Anthropic 端点,用账号里的体验额度 / 活动领取额度);在账号设置里可切回编码套餐")}:null].filter(t=>t!==null)}const eR="workbuddy-desktop-accounts-filters",tR="workbuddy-desktop-accounts-collapsed",nR="workbuddy-desktop-accounts-names-hidden";function N$(){const e={provider:"all",enabled:"all",limit:"all",q:""},t=Pe().wbFilterMemory?.load(eR,e)||e;return{provider:String(t.provider||"all"),enabled:String(t.enabled||"all"),limit:String(t.limit||"all"),q:""}}function k$(){try{const e=JSON.parse(localStorage.getItem(tR)||"[]");return new Set(Array.isArray(e)?e.map(t=>String(t)).filter(Boolean):[])}catch{return new Set}}function C$(){try{return localStorage.getItem(nR)==="1"}catch{return!1}}let hn={version:0,filter:N$(),collapsed:k$(),selected:new Set,panels:new Map,connections:new Map,clash:null,dialog:null,namesHidden:C$(),usageBusy:!1,usageInflight:new Set};const wj=new Set;function sR(e){return wj.add(e),()=>{wj.delete(e)}}function Gs(){return hn}function Rn(e){hn={...hn,...e,version:hn.version+1},wj.forEach(t=>t())}function wr(){Rn({})}function Sj(){return Pe().wbApp?.getState?.()?.accounts}function Al(){const e=Sj()?.accounts;return Array.isArray(e)?e:[]}function Aa(e){return Al().find(t=>t.id===e)||null}function T$(e,t){const a=j$(Al(),c=>ZA(c,hn.filter,e,t),e,t);return{groups:a.filter(c=>c.accounts.length>0),allGroups:a}}function rR(){return OA(Sj())}function E$(e,t){return WA(Al(),hn.filter,e,t)}function A$(){return vj(Al())}function ng(){Pe().wbFilterMemory?.save(eR,{provider:hn.filter.provider,enabled:hn.filter.enabled,limit:hn.filter.limit})}function R$(e){hn.filter.q!==e&&Rn({filter:{...hn.filter,q:e}})}function O$(e){const t=e||"all";hn.filter.provider!==t&&(Rn({filter:{...hn.filter,provider:t}}),ng())}function aR(e,t){const a={...hn.filter,[e]:t};a.enabled==="disabled"&&a.limit!=="all"&&(a.limit="all"),Rn({filter:a}),ng()}function sg(){return hn.filter.provider!=="all"||hn.filter.enabled!=="all"||hn.filter.limit!=="all"||hn.filter.q.trim()!==""}function lR(){Rn({filter:{provider:"all",enabled:"all",limit:"all",q:""}}),ng()}function M$(){const e=hn.filter.provider;e!=="all"&&(rR().some(t=>t.id===e)||(Rn({filter:{...hn.filter,provider:"all"}}),ng()))}function oR(e){try{localStorage.setItem(tR,JSON.stringify([...e]))}catch{}}function iR(e){const t=new Set(hn.collapsed);t.has(e)?t.delete(e):t.add(e),oR(t),Rn({collapsed:t})}function D$(e,t){const a=new Set(hn.collapsed);for(const o of e)t?a.add(o):a.delete(o);oR(a),Rn({collapsed:a})}function I$(e){return hn.selected.has(e)}function P$(e,t){const a=new Set(hn.selected);t?a.add(e):a.delete(e),Rn({selected:a})}function cR(e,t){const a=new Set(hn.selected);for(const o of e)t?a.add(o):a.delete(o);Rn({selected:a})}function _$(){Rn({selected:new Set})}function uR(e,t){return hn.panels.get(e)?.has(t)===!0}function dR(e,t,a){if(!e)return;const o=new Map(hn.panels),c=new Set(o.get(e)||[]);a?c.add(t):c.delete(t),c.size?o.set(e,c):o.delete(e),Rn({panels:o})}function L$(e,t){const a=new Map(hn.panels);for(const o of e){const c=new Set(a.get(o)||[]);c.add(t),a.set(o,c)}Rn({panels:a})}function z$(){const e=!hn.namesHidden;try{localStorage.setItem(nR,e?"1":"0")}catch{}Rn({namesHidden:e})}function B$(e){return"*".repeat(Math.min(Math.max(e.length,4),12))}const fR="usage_not_configured",ko=new Map,Ef=new Map;function ua(e,t,a){ko.set(e,t),t!=null&&xu(t)?Ef.set(e,a):Ef.delete(e)}function Wa(e){const t=ko.get(e.id);if(t===void 0)return;if(!xu(t))return t;const a=Math.max(Number(e.addedAt)||0,Number(e.updatedAt)||0);return(Ef.get(e.id)||0)>=a?t:void 0}const Af=new Map;let pR=0;function Rl(e){return e?Af.get(e.id)||[]:[]}function H$(e){const t=Number(e?.tokenAt)||0;if(!t||t===pR)return!1;const a=e?.tokenUsage;if(!a||typeof a!="object")return!1;pR=t;const o=new Map;for(const[d,f]of Object.entries(a)){if(!Array.isArray(f))continue;const p=[];for(const h of f){if(!h||typeof h!="object")continue;const b=Number(h.kind),y=Number(h.windowStart),v=Number(h.used);!Number.isFinite(b)||b<0||!Number.isFinite(y)||y<=0||!Number.isFinite(v)||v<0||p.push({kind:b,windowStart:y,used:v})}o.set(d,p)}const c=o.size!==Af.size||[...o].some(([d,f])=>{const p=Af.get(d);return!p||p.length!==f.length||f.some((h,b)=>h.used!==p[b]?.used||h.windowStart!==p[b]?.windowStart)});Af.clear();for(const[d,f]of o)Af.set(d,f);return c}let rg=null;async function mR(e={}){const t=Gs().clash;if(!e.force&&t)return t;rg||(rg=(async()=>{try{const o=await Pe().workbuddyDesktop?.getProxies?.();if(!o||typeof o!="object"||!o.clash)throw new Error(r("代理列表响应异常({type})",{type:typeof o}));return o.clash}finally{rg=null}})());const a=await rg;return Rn({clash:a}),a}function U$(){Rn({clash:null})}let Rf=null,ag=null;function V$(){return Rf}async function hR(e={}){if(!e.force&&Rf)return Rf;ag||(ag=(async()=>{try{const a=await Pe().workbuddyDesktop?.getProxyPool?.();if(!a||typeof a!="object"||!Array.isArray(a.items))throw new Error(r("代理池响应异常({type})",{type:typeof a}));return a.items}finally{ag=null}})());const t=await ag;return Rf=t,t}let Nj=null;function F$(){return Nj}let lg=0,gR=!1;function $$(){if(!(Rf||Date.now(){lg=0,Nj=null,wr()}).catch(e=>{Nj=ut(e),wr()})}}function og(e){if(!Aa(e)){_e(r("账号不存在,请刷新后重试"),"err");return}Rn({dialog:{kind:"settings",id:e}})}function ig(){Rn({dialog:null})}function kj(e,t="enable"){const a=(Array.isArray(e)?e:[]).filter(o=>Aa(o));if(!a.length){_e(r("请先勾选要操作的账号"),"err");return}Rn({dialog:{kind:"batch",ids:a,action:t}})}function q$(e){let t=!1;for(const f of[...ko.keys()])e.has(f)||(ko.delete(f),t=!0);for(const f of[...Ef.keys()])e.has(f)||Ef.delete(f);const a=new Map(Gs().panels);for(const f of[...a.keys()])e.has(f)||(a.delete(f),t=!0);const o=new Map(Gs().connections);for(const f of[...o.keys()])e.has(f)||(o.delete(f),t=!0);const c=new Set(Gs().usageInflight);for(const f of[...c])e.has(f)||(c.delete(f),t=!0);const d=new Set(Gs().selected);for(const f of[...d])e.has(f)||(d.delete(f),t=!0);t&&Rn({panels:a,connections:o,usageInflight:c,selected:d})}const G$=2e3;function xR(e){return Gs().connections.get(e)||0}async function bR(){try{const e=await Pe().workbuddyDesktop?.getAccountConnections?.(),t=e?.counts&&typeof e.counts=="object"?e.counts:{},a=new Map;for(const[o,c]of Object.entries(t)){const d=Number(c)||0;d>0&&a.set(o,d)}return K$(a,Gs().connections)||Rn({connections:a}),!0}catch{return!1}}function K$(e,t){if(e.size!==t.size)return!1;for(const[a,o]of e)if(t.get(a)!==o)return!1;return!0}let vR=null;function Y$(){vR||(vR=setInterval(()=>{document.hidden||Pe().wbApp?.currentPage!=="accounts"||bR()},G$))}function Cj(){return Al().filter(e=>Ea(e)&&e.available!==!1)}function xu(e){if(e==null)return null;if(typeof e=="string")return{message:e,notConfigured:!1};if(typeof e!="object")return null;const t=e.error;return t?{message:String(t),notConfigured:e.code===fR}:null}function yR(e){return e.usage?e.usage:{error:e.error?String(e.error):r("余额响应为空"),code:e.code}}function jR(e){const t=Array.isArray(e?.results)?e.results:[],a=Number(e?.at)||Date.now();let o=0;for(const c of t)c?.id&&(ua(String(c.id),yR(c),Number(c.at)||a),o++);return o&&(wr(),Pe().wbApp?.renderTopbarStatus?.()),o}let wR=!1;function X$(e){if(!GA(e))return!1;const t=Wa(e);return!t||typeof t!="object"||Array.isArray(t)||xu(t)?!1:!Array.isArray(t.credits)}async function Q$(){if(!wR){wR=!0;for(const e of Al().filter(X$)){const t=ko.get(e.id);try{await Of(e.id)}catch{}const a=ko.get(e.id);t!==void 0&&(!a||xu(a))&&ua(e.id,t,Date.now()),wr()}}}let SR=0;async function Z$(){try{const e=await Pe().workbuddyDesktop?.getBalancesSnapshot?.(),t=H$(e);t&&(wr(),Pe().wbApp?.renderTopbarStatus?.());const a=Number(e?.at)||0;return!a||a===SR||(SR=a,!jR(e))?t:(Q$(),!0)}catch{return!1}}async function Of(e){const t=await Pe().workbuddyDesktop?.getAllBalances?.(e||void 0),a=Array.isArray(t?.results)?t.results:[],o=Date.now(),c=new Set;for(const d of a){if(!d?.id)continue;const f=String(d.id);e&&f!==e||(c.add(f),ua(f,yR(d),o))}if(e)return c.has(e)||ua(e,r("未返回余额数据"),o),wr(),t;for(const d of Cj())c.has(d.id)||ua(d.id,r("未返回余额数据"),o);return wr(),t}async function NR(){if(Gs().usageBusy)return;const e=Cj();if(!e.length){_e(r("暂无可查询余额的账号"),"err");return}Rn({usageBusy:!0}),e.forEach(t=>ua(t.id,null,Date.now())),wr();try{const t=(await Of(null))?.results||[],a=t.filter(f=>f.usage).length,o=t.filter(f=>f.code===fR).length,c=o?r("({n} 个未配置查询凭证)",{n:o}):"",d=t.length-a-o;_e(a+o===t.length?r("✅ 已更新 {n} 个账号的余额{suffix}",{n:a,suffix:c}):r("已更新 {ok}/{total} 个账号,{failed} 个失败",{ok:a,total:t.length,failed:d}),d?"err":"ok")}catch(t){const a=ut(t);e.forEach(o=>ua(o.id,r("查询失败:{message}",{message:a}),Date.now())),wr(),_e(r("余额查询失败:{message}",{message:a}),"err")}finally{Rn({usageBusy:!1})}}async function kR(e){if(Gs().usageInflight.has(e))return;const t=new Set(Gs().usageInflight);t.add(e),ua(e,null,Date.now()),Rn({usageInflight:t});try{await Of(e)}finally{const a=new Set(Gs().usageInflight);a.delete(e),Rn({usageInflight:a})}}async function W$(e){if(!Gs().usageInflight.has(e))try{await kR(e);const t=xu(ko.get(e));t?.notConfigured?_e(t.message,"ok"):t?_e(r("余额查询失败:{message}",{message:t.message}),"err"):_e(r("✅ 已更新余额"))}catch(t){ua(e,r("查询失败:{message}",{message:ut(t)}),Date.now()),wr(),_e(r("余额查询失败:{message}",{message:ut(t)}),"err")}}async function cg(e){if(e){const a=Aa(e);if(!a||!Ea(a))return;try{await kR(e)}catch(o){ua(e,r("查询失败:{message}",{message:ut(o)}),Date.now()),wr()}return}if(Gs().usageBusy)return;const t=Cj();if(t.length){Rn({usageBusy:!0}),t.forEach(a=>ua(a.id,null,Date.now())),wr();try{await Of(null)}catch(a){const o=ut(a);t.forEach(c=>ua(c.id,r("查询失败:{message}",{message:o}),Date.now())),wr()}finally{Rn({usageBusy:!1})}}}async function CR(e,t){try{await Pe().workbuddyDesktop?.updateAccount?.(e,{enabled:t}),await Pe().wbApp?.refresh?.(),_e(r(t?"✅ 已启用":"✅ 已禁用"))}catch(a){_e(r("操作失败:{message}",{message:ut(a)}),"err"),Pe().wbApp?.refresh?.()}}async function TR(e,t){if(!e.length)return!1;try{return await Pe().workbuddyDesktop?.reorderAccounts?.(e),_e(t?r("✅ 已保存:{note}",{note:t}):r("✅ 顺序已保存")),await Pe().wbApp?.refresh?.(),!0}catch(a){return _e(r("顺序未保存:{message}",{message:ut(a)}),"err"),Pe().wbApp?.refresh?.(),!1}}async function ER(e,t){if(e.length)try{await Pe().workbuddyDesktop?.batchAccounts?.({action:t?"enable":"disable",ids:e}),_e(t?r("✅ 已启用 {n} 个账号",{n:e.length}):r("✅ 已禁用 {n} 个账号",{n:e.length})),await Pe().wbApp?.refresh?.()}catch(a){_e(r("操作失败:{message}",{message:ut(a)}),"err"),Pe().wbApp?.refresh?.()}}async function J$(e,t){try{await Pe().workbuddyDesktop?.clearRateLimits?.(e,t||null),_e(t?r("✅ 已清除 {model} 的限流标记",{model:t}):r("✅ 已清除该账号全部限流标记")),await Pe().wbApp?.refresh?.()}catch(a){_e(r("清除失败:{message}",{message:ut(a)}),"err")}}async function e8(e,t,a){if(t===AR){og(e);return}if(t!==ug&&t!==a)try{const o=t===""?null:{source:"pool",proxyId:t.slice(Qa.length)},d=(await Pe().workbuddyDesktop?.updateAccount?.(e,{proxy:o}))?.changes,f=Array.isArray(d)&&d.length?d[0]:r("代理已更新");_e(`✅ ${f}`)}catch(o){_e(r("保存失败:{message}",{message:ut(o)}),"err")}finally{await Pe().wbApp?.refresh?.()}}const ug="__proxy_custom__",AR="__proxy_custom_edit__";function RR(e,t){const a=Aa(e);if(!a){_e(r("账号不存在,请刷新后重试"),"err");return}const o=Pe().wbZcodePlans;if(!o?.open){_e(r("套餐明细弹窗未加载,请重启应用后重试"),"err");return}o.open({id:e,name:t||a.name})}function t8(e,t,a=1){return{seat:t.get(e.id)||{position:1,total:1},rank:a,picked:I$(e.id),usageEntry:ko.get(e.id),limitsOpen:uR(e.id,"limits"),connections:xR(e.id)}}const n8={DEFAULT_PROVIDER_ID:mu,RACCOON_PROVIDER_ID:J6,providerOf:An,providerFeatures:cr,providerSummaries:OA,identifierOf:Qh,tokenExpiryOf:l$,supportsUsage:Ea,isDesktopAccount:kf,supportsChat:UA,byPriorityOrder:Jh,typeLabel:h$,isEnabled:ur,isRateLimited:Cf,isLimited:e=>Tf(e,e?Wa(e):void 0,Rl(e)),accountEdition:VA,supportsClaim:FA,matchEnabled:xj,matchLimit:QA,visibleAccounts:y$,filterCounts:WA,positionMap:vj,activeLimits:bj,editionSuffix:w$,formatResetText:jj};function s8(){window.wbAccountsView={render:()=>wr(),refreshCaches:q$,openPanels:L$,syncConnections:bR,applyBalances:jR,syncBalancesSnapshot:Z$,queryUsageFor:Of,queryAllUsage:NR,refreshUsageAfterCheckin:cg,supportsUsage:Ea,isDesktopAccount:kf,isEnabled:ur,isRateLimited:Cf},window.wbAccountsModel=n8,window.wbAccountPanel={open:og,close:ig,openBatch:kj,closeBatch:ig,syncAddProvider:()=>Pe().wbAccountAddForms?.syncAddProvider?.(),invalidate:U$}}function r8(e){return e.type==="balance"?r("余额 < {threshold}",{threshold:e.threshold}):e.reset==="daily"?r("每日消耗 ≥ {count} Token(每天 0 点重置)",{count:El(e.threshold)}):r("每 {period}消耗 ≥ {count} Token",{period:HA(e.period??0),count:El(e.threshold)})}function a8(e){return e.action==="disable"?r("禁用该账号(需手动重新启用)"):r("跳过该账号(自动恢复)")}function l8(e){return`${Math.round(e.threshold).toLocaleString("en-US")} Token`}function o8(e,t){if(t.enabled===!1)return{text:r("已停用"),kind:"off"};if(t.type==="balance"){const b=Wa(e),y=Zh(e,b),v=b&&typeof b=="object"?b:null,j=v?v.totalLeft??v.available:void 0,w=j==null||j===""||v?.unlimited?"":r(" · 当前 {n}",{n:ss(j)});return y?{text:r("已跳过{current}",{current:w}),kind:"warn",title:r("余额低于阈值,转发时会跳过该账号(余额回升自动恢复)")}:{text:r("未触发{current}",{current:w}),kind:"ok"}}const a=Rl(e),o=Nf(t,a),c=o?o.used:0,d=El(t.threshold),f=t.reset==="daily"?r(" · 今日 {used} / {quota}",{used:El(c),quota:d}):r(" · 本周期 {used} / {quota}",{used:El(c),quota:d}),p=o?` · ${Wh(pj(t).remainingMs,t.reset==="daily")}`:"";return o!==null&&c>=t.threshold?t.action==="disable"?e.enabled===!1?{text:r("已触发 · 账号已禁用"),kind:"danger",title:r("重置也不恢复,需手动启用")}:{text:r("已达上限{usage}",{usage:f}),kind:"warn",title:r("稍后由后台判定自动禁用")}:{text:r("已跳过{usage}{countdown}",{usage:f,countdown:p}),kind:"warn",title:r("窗口内已用 {used} / {limit} Token,转发时会跳过该账号(重置后自动恢复)",{used:Math.round(c).toLocaleString("en-US"),limit:Math.round(t.threshold).toLocaleString("en-US")})}:{text:r("未触发{usage}{countdown}",{usage:f,countdown:p}),kind:"ok",title:l8(t)}}function i8(e){return e>0&&e%3600===0?{value:String(e/3600),unit:"hours"}:e>0&&e%60===0?{value:String(e/60),unit:"minutes"}:{value:"1",unit:"hours"}}function OR(e){const t={type:"balance",action:"skip",thresholdInput:"",tokenUnit:"wan",reset:"fixed",periodInput:"1",periodUnit:"hours"};if(!e)return t;if(e.type==="balance")return{...t,type:"balance",action:e.action,thresholdInput:String(e.threshold)};if(e.reset==="daily")return{...t,type:"token",action:e.action,reset:"daily",thresholdInput:String(e.threshold%1e4===0?e.threshold/1e4:e.threshold),tokenUnit:e.threshold%1e4===0?"wan":"unit"};const a=i8(e.period??0);return{...t,type:"token",action:e.action,reset:"fixed",thresholdInput:String(e.threshold%1e4===0?e.threshold/1e4:e.threshold),tokenUnit:e.threshold%1e4===0?"wan":"unit",periodInput:a.value,periodUnit:a.unit}}function MR(e){const t=Number(e.thresholdInput);if(!Number.isFinite(t)||t<=0)return{error:r("限制阈值必须是大于 0 的数字")};if(e.type==="balance")return{rule:{type:"balance",action:e.action,threshold:t,enabled:!0}};const a=Math.round(e.tokenUnit==="wan"?t*1e4:t);if(e.reset==="daily")return{rule:{type:"token",action:e.action,threshold:a,reset:"daily",enabled:!0}};const o=Number(e.periodInput)*(e.periodUnit==="hours"?3600:60);if(!Number.isFinite(o)||o<=0)return{error:r("请填写重置周期")};const c=Math.round(o);return c_A?{error:r("重置周期必须是 30 分钟 ~ 24 小时")}:{rule:{type:"token",action:e.action,threshold:a,period:c,reset:"fixed",enabled:!0}}}function c8({account:e,target:t,onClose:a,onSave:o}){const[c,d]=x.useState(""),[f,p]=x.useState(t?.draft??null);if(x.useEffect(()=>{p(t?.draft??null),d("")},[t]),!t||!f)return null;const h=v=>{d(""),p({...f,...v})},b=()=>{const v=MR(f);if("error"in v){d(v.error);return}o(v.rule,t.index)},y=()=>{if(f.type==="balance"){const P=Wa(e);if(P&&typeof P=="object"){const T=P;if(T.unlimited)return r("当前可用 ∞(不参与余额不足判定)");const C=T.totalLeft??T.available;if(C!=null&&C!=="")return r("当前余额 {n};与余额列同一数字口径,严格小于才触发(等于阈值仍可用)",{n:ss(C)})}return r("读数来自自动余额查询;与余额列同一数字口径,严格小于才触发(等于阈值仍可用)")}const v=MR(f);if(!("rule"in v))return"";const j=v.rule,w=Nf(j,Rl(e));if(!w)return j.reset==="daily"?r("窗口 = 今天 0 点起(本地时区),0 点重置即清零恢复;按账号在 requests 表聚合"):r("窗口对齐自然时间(整点 / 整 N 分钟一轮回),重置即清零恢复;按账号在 requests 表聚合");const k=pj(j),S=El(w.used),N=El(j.threshold),R=j.reset==="daily"?r("今日已用"):r("本周期已用");return r("{scope} {used} / {quota} Token,{countdown}重置",{scope:R,used:S,quota:N,countdown:Wh(k.remainingMs,k.daily)})};return s.jsx(Yt,{open:!0,onOpenChange:v=>{v||a()},children:s.jsxs(Xt,{className:"w-[min(580px,calc(100vw-48px))]",showCloseButton:!0,children:[s.jsx(Vt,{children:s.jsx(Ut,{children:t.index>=0?r("编辑限制"):r("添加限制")})}),s.jsxs(Lt,{children:[s.jsxs("div",{className:"field-row",children:[s.jsx("label",{children:r("限制类型")}),s.jsxs(dt,{value:f.type,onValueChange:v=>h({type:v,thresholdInput:""}),children:[s.jsx(pt,{className:"w-[150px]","aria-label":r("限制类型"),children:s.jsx(ft,{children:f.type==="balance"?r("余额"):r("Token 消耗")})}),s.jsxs(mt,{children:[s.jsx($e,{value:"balance",children:r("余额")}),s.jsx($e,{value:"token",children:r("Token 消耗")})]})]}),s.jsx("span",{className:"detail",children:r("余额沿用现有口径;Token 按重置方式内的累计消耗判定(切换类型会清空阈值)")})]}),f.type==="balance"?s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"field-row",children:[s.jsx("label",{children:r("触发条件")}),s.jsx("span",{className:"detail",style:{fontSize:13},children:r("余额低于")}),s.jsx(Fe,{type:"number",min:0,step:1,className:"max-w-[120px]",placeholder:r("阈值"),value:f.thresholdInput,onChange:v=>h({thresholdInput:v.currentTarget.value})}),s.jsx("span",{className:"detail",style:{fontSize:13},children:r("时")})]}),s.jsxs("div",{className:"field-row",children:[s.jsx("label",{children:r("触发后")}),s.jsxs(dt,{value:f.action,onValueChange:v=>h({action:v}),children:[s.jsx(pt,{className:"min-w-[280px]","aria-label":r("触发动作"),children:s.jsx(ft,{children:f.action==="disable"?r("禁用该账号(需手动重新启用)"):r("跳过该账号(余额回升自动恢复)")})}),s.jsxs(mt,{children:[s.jsx($e,{value:"skip",children:r("跳过该账号(余额回升自动恢复)")}),s.jsx($e,{value:"disable",children:r("禁用该账号(需手动重新启用)")})]})]})]})]}):s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"field-row",children:[s.jsx("label",{children:r("重置方式")}),s.jsxs(dt,{value:f.reset,onValueChange:v=>h({reset:v}),children:[s.jsx(pt,{className:"w-[190px]","aria-label":r("重置方式"),children:s.jsx(ft,{children:f.reset==="daily"?r("自然日(每天 0 点)"):r("固定周期")})}),s.jsxs(mt,{children:[s.jsx($e,{value:"fixed",children:r("固定周期")}),s.jsx($e,{value:"daily",children:r("自然日(每天 0 点)")})]})]}),s.jsx("span",{className:"detail",children:r("有的账号过了 0 点额度就回来 —— 选「自然日」")})]}),s.jsxs("div",{className:"field-row",children:[s.jsx("label",{children:r("触发条件")}),f.reset==="daily"?s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"detail",style:{fontSize:13},children:r("每日消耗 ≥")}),s.jsx(Fe,{type:"number",min:0,step:1,className:"max-w-[110px]",placeholder:r("阈值"),value:f.thresholdInput,onChange:v=>h({thresholdInput:v.currentTarget.value})}),s.jsxs(dt,{value:f.tokenUnit,onValueChange:v=>h({tokenUnit:v}),children:[s.jsx(pt,{className:"w-[92px]","aria-label":r("Token 单位"),children:s.jsx(ft,{children:f.tokenUnit==="wan"?r("万"):r("个")})}),s.jsxs(mt,{children:[s.jsx($e,{value:"wan",children:r("万")}),s.jsx($e,{value:"unit",children:r("个")})]})]}),s.jsx("span",{className:"detail",style:{fontSize:13},children:r("Token 时")})]}):s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"detail",style:{fontSize:13},children:r("每")}),s.jsx(Fe,{type:"number",min:1,step:1,className:"max-w-[90px]",placeholder:r("周期"),value:f.periodInput,onChange:v=>h({periodInput:v.currentTarget.value})}),s.jsxs(dt,{value:f.periodUnit,onValueChange:v=>h({periodUnit:v}),children:[s.jsx(pt,{className:"w-[92px]","aria-label":r("周期单位"),children:s.jsx(ft,{children:f.periodUnit==="hours"?r("小时"):r("分钟")})}),s.jsxs(mt,{children:[s.jsx($e,{value:"minutes",children:r("分钟")}),s.jsx($e,{value:"hours",children:r("小时")})]})]}),s.jsx("span",{className:"detail",style:{fontSize:13},children:r("内消耗 ≥")}),s.jsx(Fe,{type:"number",min:0,step:1,className:"max-w-[110px]",placeholder:r("阈值"),value:f.thresholdInput,onChange:v=>h({thresholdInput:v.currentTarget.value})}),s.jsxs(dt,{value:f.tokenUnit,onValueChange:v=>h({tokenUnit:v}),children:[s.jsx(pt,{className:"w-[92px]","aria-label":r("Token 单位"),children:s.jsx(ft,{children:f.tokenUnit==="wan"?r("万"):r("个")})}),s.jsxs(mt,{children:[s.jsx($e,{value:"wan",children:r("万")}),s.jsx($e,{value:"unit",children:r("个")})]})]}),s.jsx("span",{className:"detail",style:{fontSize:13},children:r("Token 时")})]})]}),s.jsxs("div",{className:"field-row",children:[s.jsx("label",{children:r("触发后")}),s.jsxs(dt,{value:f.action,onValueChange:v=>h({action:v}),children:[s.jsx(pt,{className:"min-w-[280px]","aria-label":r("触发动作"),children:s.jsx(ft,{children:f.action==="disable"?r("禁用该账号(需手动重新启用)"):r("跳过该账号(重置后自动恢复)")})}),s.jsxs(mt,{children:[s.jsx($e,{value:"skip",children:r("跳过该账号(重置后自动恢复)")}),s.jsx($e,{value:"disable",children:r("禁用该账号(需手动重新启用)")})]})]})]})]}),s.jsx("p",{className:"detail limiter-hint",children:y()}),c?s.jsx("p",{className:"detail text-destructive",children:c}):null]}),s.jsxs(tn,{children:[s.jsx(ne,{variant:"outline",onClick:a,children:r("取消")}),s.jsx(ne,{variant:"default",onClick:b,children:t.index>=0?r("保存规则"):r("添加规则")})]})]})})}function u8({account:e,draft:t,onChange:a}){const[o,c]=x.useState(null),d=()=>c({index:-1,draft:OR(null)}),f=y=>c({index:y,draft:OR(t[y])}),p=(y,v)=>{const j=[...t];v>=0?j[v]=y:j.push(y),a(j),c(null)},h=y=>{a(t.filter((v,j)=>j!==y)),o&&c(null)},b=(y,v)=>{const j=[...t];j[y]={...j[y],enabled:v},a(j)};return s.jsxs(s.Fragment,{children:[t.length?s.jsx("div",{className:"limiter-rules mt-2.5",children:t.map((y,v)=>{const j=o8(e,y);return s.jsxs("div",{className:"limiter-rule","data-off":y.enabled===!1||void 0,children:[s.jsx(Zn,{checked:y.enabled!==!1,"aria-label":r("启用该规则"),onCheckedChange:w=>b(v,w===!0)}),s.jsx("div",{className:"limiter-rule-main",children:s.jsxs("span",{className:"limiter-rule-cond",children:[s.jsx(ze,{variant:"secondary",shape:"tag",children:y.type==="balance"?r("余额"):"Token"})," ",r("{cond} 时 → {action}",{cond:r8(y),action:a8(y)})]})}),s.jsx(ze,{variant:j.kind==="ok"?"success":j.kind==="warn"?"warning":j.kind==="danger"?"destructive":"secondary",shape:"tag",title:j.title,children:j.text}),s.jsxs("div",{className:"limiter-rule-ops",children:[s.jsx(ne,{variant:"ghost",onClick:()=>f(v),children:r("编辑")}),s.jsx(ne,{variant:"ghost",onClick:()=>h(v),children:r("删除")})]})]},v)})}):s.jsx("p",{className:"detail mt-2.5",children:r("还没有限制规则:账号照常参与转发,余额与 Token 消耗都不设上限。")}),s.jsxs("div",{className:"field-row mt-2.5",children:[s.jsx(ne,{variant:"outline",onClick:d,children:r("+ 添加限制")}),s.jsx("span",{className:"detail",children:r("可添加多条;同类规则也允许并存(例如一条按余额、两条不同重置方式的 Token)")})]}),s.jsx(c8,{account:e,target:o,onClose:()=>c(null),onSave:p})]})}function d8(e,t){const a=hu(e);return JSON.stringify(t)===JSON.stringify(a)?null:{patch:{limiters:t}}}function f8(e){return hu(e).map(t=>({...t}))}const p8={seconds:1,minutes:60,hours:3600};function m8(e){return e>0&&e%3600===0?{value:String(e/3600),unit:"hours"}:e>0&&e%60===0?{value:String(e/60),unit:"minutes"}:e>0?{value:String(e),unit:"seconds"}:{value:"5",unit:"minutes"}}function h8(e){const{enabled:t,interval:a}=zA(e),o=m8(t?a:0);return{enabled:t,intervalInput:o.value,unit:o.unit}}function g8(e,t){const a=Math.round(Number(t.intervalInput)*p8[t.unit]);if(t.enabled){if(!Number.isFinite(Number(t.intervalInput))||Number(t.intervalInput)<=0)return{error:r("请填写查询间隔")};if(aDA)return{error:r("查询间隔必须是 {min} 秒 ~ 24 小时",{min:uj})}}const o={},c=zA(e);return(t.enabled!==c.enabled||t.enabled&&a!==c.interval)&&(o.usageQuery={enabled:t.enabled,interval:t.enabled?a:c.interval}),o.usageQuery?{patch:o}:null}function x8({account:e,draft:t,onChange:a}){const o=c=>a({...t,...c});return s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"field-row mt-2.5",children:s.jsxs(Je,{className:"inline-flex cursor-pointer items-center gap-2.5 font-normal",children:[s.jsx(Zn,{checked:t.enabled,onCheckedChange:c=>o({enabled:c===!0}),"aria-label":r("自动查询余额")}),s.jsx("span",{className:"text-xs text-subtle",children:r("自动查询余额(按下面的间隔自动刷新余额列的读数)")})]})}),t.enabled?s.jsxs("div",{className:"field-row mt-2.5",children:[s.jsx("label",{htmlFor:"account-usage-interval",children:r("查询间隔")}),s.jsx(Fe,{id:"account-usage-interval",type:"number",min:1,step:1,className:"max-w-[110px]",value:t.intervalInput,onChange:c=>o({intervalInput:c.currentTarget.value})}),s.jsxs(dt,{value:t.unit,onValueChange:c=>o({unit:c}),children:[s.jsx(pt,{className:"w-[92px]","aria-label":r("间隔单位"),children:s.jsx(ft,{children:t.unit==="hours"?r("小时"):t.unit==="minutes"?r("分钟"):r("秒")})}),s.jsxs(mt,{children:[s.jsx($e,{value:"seconds",children:r("秒")}),s.jsx($e,{value:"minutes",children:r("分钟")}),s.jsx($e,{value:"hours",children:r("小时")})]})]}),s.jsx("span",{className:"detail",children:r("30 秒 ~ 24 小时;手动查询会顺延下一轮")})]}):null]})}const b8={sub2api:{label:"Sub2API",endpoint:"{base}/v1/usage",note:r("用这条账号的 API Key 查询,不需要额外配置。"),fields:[]},new_api:{label:"NewAPI",endpoint:"{base}/api/user/self + /api/status",note:r("用 NewAPI 站点的个人访问令牌查询账户余额(不是这条账号的上游 API Key)。令牌在站点的「个人设置」里生成,只有旧版 / 定制站点才需要额外填用户 ID。"),fields:[{key:"accessToken",label:r("NewAPI 个人访问令牌"),secret:!0,placeholder:r("在 NewAPI 站点「个人设置」里生成的访问令牌"),hint:r("必填;留空 = 不修改,清除用右边的按钮")},{key:"userId",label:r("NewAPI 用户 ID"),placeholder:r("旧版 / 定制站点才需要,新版可留空"),hint:r("可留空:新版请求头只认令牌;旧版会把用户 ID 放进 New-Api-User 头")}]},deepseek:{label:"DeepSeek",endpoint:"{base}/user/balance",note:r("用这条账号的 API Key 查询,不需要额外配置。"),fields:[]},opencode:{label:"OpenCode Go",endpoint:"{base}/v1/usage",note:r("用这条账号的 API Key 查询订阅用量,不需要额外配置;读数展开成 5 小时 / 每周 / 每月三个窗口。"),fields:[]},sensenova:{label:"商汤日日新",endpoint:"platform.sensenova.cn 控制台",note:r("用商汤日日新控制台的账号密码查询(与推理用的 API Key 不是同一套)。网关会自动换取登录票并缓存,过期后自动重登,不需要手动维护。"),fields:[{key:"username",label:r("账号"),placeholder:r("商汤日日新控制台的登录账号"),hint:r("必填")},{key:"password",label:r("密码"),secret:!0,placeholder:r("商汤日日新控制台的登录密码"),hint:r("留空 = 不修改,清除用右边的按钮")}]},zhipu:{label:"智谱",endpoint:"bigmodel.cn 控制台",note:r("用 bigmodel.cn 控制台的访问令牌查询账户余额(人民币元)。令牌是登录后浏览器 Cookie `bigmodel_token_production` 的值:开发者工具 → 应用(Application)→ Cookie 里复制。"),fields:[{key:"token",label:r("访问令牌"),secret:!0,placeholder:r("bigmodel_token_production 的值"),hint:r("必填;留空 = 不修改,清除用右边的按钮")}]},zhipu_zai:{label:"智谱(z.ai 国际)",endpoint:"api.z.ai 控制台",note:r("用这条账号的 API Key 生成签名后查询账户余额(美元),不需要额外配置。要求 API Key 是 z.ai 的「id.secret」形态(控制台生成的 Key 就是)。"),fields:[]}};function Mf(e){return e?b8[e]??null:null}function v8(e,t){return t.secret?t.key==="accessToken"?e?.hasAccessToken===!0:t.key==="password"?e?.hasPassword===!0:t.key==="token"?e?.hasToken===!0:!1:!1}function y8(e){const t=String(e?.scheme||"");return t==="new_api"?e?.hasAccessToken===!0:t==="sensenova"?String(e?.username||"").trim()!==""&&e?.hasPassword===!0:t==="zhipu"?e?.hasToken===!0:!0}function j8(e){return{userId:String(e?.userId||""),username:String(e?.username||""),accessToken:"",password:"",token:""}}function w8(e,t){const a=Mf(e);if(!a||!a.fields.length)return null;const o={};for(const c of a.fields){const d=String(t[c.key]??"").trim();if(c.secret){d&&(o[c.key]=d);continue}o[c.key]=d}return Object.keys(o).length?o:null}function S8({field:e,value:t,configured:a,onValue:o,onClear:c,clearBusy:d,idPrefix:f}){const p=`${f}-${e.key}`;return s.jsxs("div",{className:"field-row mt-2.5",children:[s.jsx("label",{htmlFor:p,children:e.label}),s.jsx(Fe,{id:p,className:"min-w-[220px]",type:e.secret?"password":"text",autoComplete:e.secret?"new-password":"off",placeholder:a?r("已配置,留空则不修改"):e.placeholder,title:e.hint,value:t,onChange:h=>o(h.currentTarget.value)}),a&&c?s.jsx(ne,{variant:"outline",size:"sm",disabled:d===!0,onClick:c,title:r("清除已配置的 {label}",{label:e.label}),children:r("清除")}):null]})}function N8({spec:e,values:t,configured:a,onValue:o,onClear:c,clearBusy:d,idPrefix:f}){return s.jsxs(s.Fragment,{children:[s.jsxs("p",{className:"detail mt-2.5",children:[r("余额查询方案:{label}",{label:e.label}),s.jsx("span",{className:"ml-1 text-subtle",children:e.endpoint})," — ",e.note]}),e.fields.map(p=>s.jsx(S8,{field:p,idPrefix:f,value:t[p.key]||"",configured:a[p.key]===!0,onValue:h=>o(p.key,h),onClear:c?()=>c(p.key):void 0,clearBusy:d},p.key))]})}const DR=64;function k8(e,t){const a=An(e);return t.filter(o=>o.id!==e.id&&An(o)===a)}const Ol=999,IR=8;function dg(e){return gu(e)||e?.id||""}function PR(e){const t=e?.config?.source||e?.source,a=e?.config||null,o=t==="rotate";return{mode:t==="pool"?"pool":o?"rotate":t==="clash"?"clash":t==="custom"?"custom":"none",proxyId:t==="pool"?String(a?.proxyId||""):"",rotateAll:o?a?.all!==!1:!0,rotateIds:o&&Array.isArray(a?.proxyIds)?a.proxyIds.map(String):[],listenerUid:a?.source==="clash"||t==="clash"?String(a?.listenerUid||""):"",protocol:a?.protocol==="socks5"?"socks5":"http",host:a?.host||"",port:a?.port===void 0||a?.port===null?"":String(a.port),username:a?.username||"",password:a?.password||""}}function Tj(e){if(e.mode==="none")return null;if(e.mode==="pool"){if(!e.proxyId)throw new Error(r("请先选择已保存的代理"));return{source:"pool",proxyId:e.proxyId}}if(e.mode==="rotate"){if(e.rotateAll)return{source:"rotate",all:!0};if(!e.rotateIds.length)throw new Error(r("轮询至少要选择一条代理(或改选「全部」)"));return{source:"rotate",all:!1,proxyIds:[...e.rotateIds]}}if(e.mode==="clash"){if(!e.listenerUid)throw new Error(r("请先选择 Clash Verge 出口"));return{source:"clash",listenerUid:e.listenerUid}}const t=e.host.trim(),a=Number(e.port);if(!t)throw new Error(r("请填写代理主机地址"));if(!Number.isInteger(a)||a<1||a>65535)throw new Error(r("代理端口必须是 1-65535 的整数"));return{source:"custom",protocol:e.protocol==="socks5"?"socks5":"http",host:t,port:a,username:e.username.trim(),password:e.password}}function _R(e){const t=e.profileActive===!1?r("(其他订阅,可能未生效)"):"",a=e.enabled===!1?r("(已在 Clash 中禁用)"):"";return`${e.name} :${e.port}${t}${a}`}function LR({draft:e,onChange:t,idPrefix:a,allowRotate:o=!1}){const d=Gs().clash,f=Array.isArray(d?.options)?d.options:[],p=e.mode==="clash",[h,b]=x.useState(!1),[y,v]=x.useState(null),[j,w]=x.useState(null),[k,S]=x.useState(""),N=C=>t({...e,...C});x.useEffect(()=>{p&&mR().catch(()=>{})},[p]);const R=x.useCallback((C=!1)=>{S(""),hR({force:C}).then(E=>w(E)).catch(E=>{w([]),S(ut(E))})},[]);x.useEffect(()=>{(e.mode==="pool"||e.mode==="rotate")&&j===null&&R()},[e.mode,j,R]);function P(){return e.rotateAll?(j??[]).filter(C=>C.enabled!==!1).map(C=>C.id):[...e.rotateIds]}async function T(){if(h)return;if(e.mode==="rotate"){const E=P();if(!E.length){_e(r("轮询至少要选择一条代理(或改选「全部」)"),"err");return}const D=E.slice(0,IR);b(!0),v(r("正在连接上游…"));let I=0;const O=[];for(const H of D){const B=j?.find(L=>L.id===H)?.name||H;try{const L=await Pe().workbuddyDesktop?.testProxyPoolItem?.(H);L?.success?I+=1:O.push(`${B}(${L?.error||r("连接失败")})`)}catch(L){O.push(`${B}(${ut(L)})`)}}const _=E.length-D.length,z=r("✅ {ok}/{total} 个出口可用",{ok:I,total:D.length})+(_>0?r("(只测了前 {limit} 个,还有 {rest} 个未测)",{limit:IR,rest:_}):"");v(s.jsxs("span",{className:O.length?"text-destructive":"text-success",children:[z,O.length?` ${Za(O.join(r(";")))}`:""]})),b(!1);return}if(e.mode==="pool"){if(!e.proxyId){_e(r("请先选择已保存的代理"),"err");return}b(!0),v(r("正在连接上游…"));try{const E=await Pe().workbuddyDesktop?.testProxyPoolItem?.(e.proxyId);v(E?.success?s.jsxs("span",{className:"text-success",children:[r("✅ 出口可用"),E.ip?r(" 出口 IP {ip}",{ip:Za(E.ip)}):"",E.durationMs!==void 0&&E.durationMs!==""?` ${Za(String(E.durationMs))}ms`:""]}):s.jsxs("span",{className:"text-destructive",children:["❌ ",Za(E?.error||r("连接失败"))]}))}catch(E){v(s.jsxs("span",{className:"text-destructive",children:["❌ ",Za(ut(E))]}))}finally{b(!1)}return}let C;try{C=Tj(e)}catch(E){_e(ut(E),"err");return}b(!0),v(r("正在连接上游…"));try{const E=await Pe().workbuddyDesktop?.testProxy?.({proxy:C});E?.success?v(s.jsxs("span",{className:"text-success",children:[r("✅ 出口可用"),E.status!==void 0&&E.status!==""?` HTTP ${Za(String(E.status))}`:"",E.ip?r(" 出口 IP {ip}",{ip:Za(E.ip)}):"",E.durationMs!==void 0&&E.durationMs!==""?` ${Za(String(E.durationMs))}ms`:""]})):v(s.jsxs("span",{className:"text-destructive",children:["❌ ",Za(E?.error||r("连接失败"))]}))}catch(E){v(s.jsxs("span",{className:"text-destructive",children:["❌ ",Za(ut(E))]}))}finally{b(!1)}}return s.jsxs("div",{className:"flex flex-col",children:[s.jsxs(_h,{value:e.mode,onValueChange:C=>N({mode:C}),className:"flex-row flex-wrap items-center gap-5","aria-label":r("代理方式"),children:[s.jsxs(Je,{className:"inline-flex cursor-pointer items-center gap-2 font-normal",children:[s.jsx(jo,{value:"none"}),r("无代理(直连)")]}),s.jsxs(Je,{className:"inline-flex cursor-pointer items-center gap-2 font-normal",children:[s.jsx(jo,{value:"pool"}),r("已保存的代理")]}),o?s.jsxs(Je,{className:"inline-flex cursor-pointer items-center gap-2 font-normal",title:r("逐请求轮换出口(换 IP):OpenCode Zen 免费档按 IP 限流,单个 IP 的额度用完会对它一律 429"),children:[s.jsx(jo,{value:"rotate"}),r("轮询(换 IP)")]}):null,p?s.jsxs(Je,{className:"inline-flex cursor-pointer items-center gap-2 font-normal",children:[s.jsx(jo,{value:"clash"}),"Clash Verge"]}):null,s.jsxs(Je,{className:"inline-flex cursor-pointer items-center gap-2 font-normal",children:[s.jsx(jo,{value:"custom"}),r("自定义")]})]}),e.mode==="pool"?s.jsxs("div",{className:"mt-3",children:[s.jsxs("div",{className:"field-row",children:[s.jsx("label",{htmlFor:`${a}-pool-exit`,children:r("代理")}),s.jsxs(dt,{value:e.proxyId,disabled:!j?.length,onValueChange:C=>N({proxyId:String(C)}),children:[s.jsx(pt,{id:`${a}-pool-exit`,className:"min-w-[220px]",children:s.jsx(ft,{children:j?.find(C=>C.id===e.proxyId)?fu(j.find(C=>C.id===e.proxyId)):j===null?r("正在读取…"):j.length?r("请选择代理"):r("还没有保存的代理")})}),s.jsx(mt,{children:(j??[]).map(C=>s.jsx($e,{value:C.id,children:fu(C)},C.id))})]}),s.jsx(ne,{variant:"outline",size:"sm",onClick:()=>R(!0),children:r("重新读取")})]}),s.jsx("div",{className:"detail mt-1.5",children:k?r("读取失败:{error}",{error:k}):j===null?r("正在读取代理列表…"):j.length?r("地址与端口由「网络代理」页管理:那边改一次、测一次,所有引用它的账号一起生效"):r("「网络代理」页还没有出口 —— 去那里新增,或在「订阅管理」里点「同步 Clash Verge」把 Clash 的出口导进来")})]}):null,e.mode==="rotate"?s.jsxs("div",{className:"mt-3",children:[s.jsxs("div",{className:"flex flex-wrap items-center gap-x-2.5 gap-y-1",children:[s.jsx(_r,{id:`${a}-rotate-all`,checked:e.rotateAll,"aria-label":r("轮询全部代理节点"),onCheckedChange:C=>N({rotateAll:C===!0})}),s.jsx("label",{htmlFor:`${a}-rotate-all`,className:"cursor-pointer text-xs text-subtle",children:r("全部代理节点(推荐)")}),s.jsx("span",{className:"detail",children:r("「网络代理」页里每个启用的出口轮流使用;之后新加的出口自动加入")})]}),e.rotateAll?null:s.jsxs("div",{className:"field-row mt-2.5",children:[s.jsx("label",{htmlFor:`${a}-rotate-exits`,children:r("轮询的代理")}),s.jsx(Kh,{id:`${a}-rotate-exits`,value:e.rotateIds,onValueChange:C=>N({rotateIds:C.map(String)}),options:(j??[]).map(C=>({value:C.id,label:fu(C)})),placeholder:r("选择要轮询的代理(可多选)"),"aria-label":r("轮询的代理")}),s.jsx(ne,{variant:"outline",size:"sm",onClick:()=>R(!0),children:r("重新读取")})]}),s.jsx("div",{className:"detail mt-1.5",children:k?r("读取失败:{error}",{error:k}):j===null?r("正在读取代理列表…"):j.length?r("每条请求换一个出口(按顺序轮流),上游看到的 IP 因此是变化的;出口的地址与端口由「网络代理」页管理"):r("「网络代理」页还没有出口 —— 去那里新增,或在「订阅管理」里点「同步 Clash Verge」把 Clash 的出口导进来")})]}):null,e.mode==="clash"?s.jsxs("div",{className:"mt-3",children:[s.jsxs("div",{className:"field-row",children:[s.jsx("label",{htmlFor:`${a}-clash-exit`,children:r("出口")}),s.jsxs(dt,{value:e.listenerUid,disabled:!f.length,onValueChange:C=>N({listenerUid:String(C)}),children:[s.jsx(pt,{id:`${a}-clash-exit`,className:"min-w-[220px]",children:s.jsx(ft,{children:f.find(C=>String(C.uid)===e.listenerUid)?_R(f.find(C=>String(C.uid)===e.listenerUid)):d?.available===!1?r("未检测到 Clash Verge"):f.length?r("请选择出口"):r("没有可用出口")})}),s.jsx(mt,{children:f.map(C=>s.jsx($e,{value:String(C.uid),children:_R(C)},String(C.uid)))})]}),s.jsx(ne,{variant:"outline",size:"sm",onClick:()=>{mR({force:!0}).then(()=>_e(r("✅ 已重新读取 Clash Verge 配置"))).catch(C=>_e(r("读取失败:{error}",{error:ut(C)}),"err"))},children:r("重新读取")})]}),s.jsx("div",{className:"detail mt-1.5",children:d===null?r("正在读取 Clash Verge 配置…"):d.available===!1?d.error?r("不可用:{error}",{error:d.error}):r("未检测到 Clash Verge 配置"):f.length?r("读取自 {dir};端口由 Clash Verge 管理,这里实时同步",{dir:d.dir||"Clash Verge"}):r("Clash Verge 里还没有配置混合监听器或节点端口")}),s.jsxs("p",{className:"detail mt-1.5",children:[r("这是既有配置(直接引用 Clash 出口,不经过代理池)。推荐改用上面的"),s.jsx("b",{children:r("「已保存的代理」")}),r(":到「网络代理」页的「订阅管理」里点「同步 Clash Verge」把出口导进池后即可选 —— 那样能集中测试、也能被多个账号共用。")]})]}):null,e.mode==="custom"?s.jsxs("div",{className:"mt-3",children:[s.jsxs("div",{className:"field-row",children:[s.jsx("label",{htmlFor:`${a}-protocol`,children:r("协议")}),s.jsxs(dt,{value:e.protocol,onValueChange:C=>N({protocol:C}),children:[s.jsx(pt,{id:`${a}-protocol`,className:"min-w-[110px]",children:s.jsx(ft,{children:e.protocol==="socks5"?"SOCKS5":"HTTP"})}),s.jsxs(mt,{children:[s.jsx($e,{value:"http",children:"HTTP"}),s.jsx($e,{value:"socks5",children:"SOCKS5"})]})]}),s.jsx("label",{htmlFor:`${a}-host`,className:"ml-2",children:r("主机")}),s.jsx(Fe,{id:`${a}-host`,className:"min-w-[140px]",placeholder:"127.0.0.1",value:e.host,onChange:C=>N({host:C.currentTarget.value})}),s.jsx("label",{htmlFor:`${a}-port`,children:r("端口")}),s.jsx(Fe,{id:`${a}-port`,type:"number",min:1,max:65535,className:"max-w-[110px]",placeholder:"7890",value:e.port,onChange:C=>N({port:C.currentTarget.value})})]}),s.jsxs("div",{className:"field-row mt-2.5",children:[s.jsx("label",{htmlFor:`${a}-user`,children:r("用户名")}),s.jsx(Fe,{id:`${a}-user`,placeholder:r("可选"),autoComplete:"off",value:e.username,onChange:C=>N({username:C.currentTarget.value})}),s.jsx("label",{htmlFor:`${a}-pass`,children:r("密码")}),s.jsx(Fe,{id:`${a}-pass`,type:"password",placeholder:r("可选"),autoComplete:"new-password",value:e.password,onChange:C=>N({password:C.currentTarget.value})})]})]}):null,s.jsxs("div",{className:"field-row mt-3",children:[s.jsx(ne,{variant:"outline",size:"sm",disabled:h,onClick:()=>{T()},children:r(h?"测试中…":"测试出口")}),s.jsx("span",{className:"detail",children:y})]})]})}function C8({plan:e,hasJwt:t,onChange:a}){const o=g$(e),[c,d]=x.useState(null);return x.useEffect(()=>{if(e!==No)return()=>{};let f=!0;const p=()=>{Promise.resolve(Pe().workbuddyDesktop?.zcodeCaptchaStats?.()).then(b=>{f&&b&&d({ready:Number(b.ready)||0,target:Number(b.target)||0})}).catch(()=>{})};p();const h=window.setInterval(p,5e3);return()=>{f=!1,window.clearInterval(h)}},[e]),s.jsxs("div",{className:"field-row mt-2.5",children:[s.jsx("label",{htmlFor:"account-plan-channel",children:r("使用套餐")}),s.jsxs(dt,{value:e,onValueChange:f=>a(String(f)),children:[s.jsx(pt,{id:"account-plan-channel",className:"min-w-[220px]",children:s.jsx(ft,{children:o})}),s.jsxs(mt,{children:[s.jsx($e,{value:$A,children:r("编码套餐(Coding Plan)— 走开放平台端点,消耗开放平台的额度(订阅套餐 / 资源包 / 充值余额)")}),s.jsx($e,{value:No,children:r("套餐池(Start Plan)— 走 zcode.z.ai 端点,消耗 ZCode 套餐池的额度(新用户体验额度 / 活动领取)")})]})]}),e===No&&!t?s.jsx("span",{className:"detail text-destructive",children:r("该账号没有套餐登录态(jwt),套餐池通道会失败:请重新登录该账号")}):null,e===No?s.jsxs("span",{className:"detail",title:r("套餐池的推理端点要求每条请求带一个阿里云验证码令牌;令牌由本应用在后台静默铸造,界面关闭时无法铸造"),children:[r("验证码令牌:{counts}",{counts:c?`${c.ready} / ${c.target||3}`:r("读取中…")}),c&&c.ready===0?r("(库存为空,正在补;补不上时转发会失败)"):""]}):null]})}function T8({configured:e,value:t,onChange:a,onClear:o,clearBusy:c}){return s.jsxs("div",{className:"field-row mt-2.5",children:[s.jsx("label",{htmlFor:"account-balance-token-input",children:r("余额查询凭证")}),s.jsx(Fe,{id:"account-balance-token-input",className:"min-w-[220px]",placeholder:r(e?"已配置,留空则不修改":"一般不用填"),title:r("积分查询已复用转发用的登录凭证,这里通常留空即可。只有旧版本填过、或从旧代理导入过凭证时才有值"),value:t,onChange:d=>a(d.currentTarget.value)}),e?s.jsx(ne,{variant:"outline",size:"sm",disabled:c,onClick:o,title:r("清除已配置的余额查询凭证"),children:r("清除")}):null]})}function E8({hasApiKey:e,noAuth:t,value:a,onValue:o,onToggleNoAuth:c,onClear:d,clearBusy:f}){return s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"field-row mt-2.5",children:[s.jsx("label",{htmlFor:"account-api-key-input",children:r("API Key")}),s.jsx(Fe,{id:"account-api-key-input",type:"password",autoComplete:"new-password",className:"min-w-[220px]",disabled:t,placeholder:e?r("已配置,留空则不修改"):"sk-…",title:r("上游的 API Key。留空 = 不修改(改凭证不会换账号 id);要清掉已配的凭证用右边的「清除」"),value:a,onChange:p=>o(p.currentTarget.value)}),e&&!t?s.jsx(ne,{variant:"outline",size:"sm",disabled:f,onClick:d,title:r("清除已配置的 API Key(转发时会因缺少凭证被跳过)"),children:r("清除")}):null]}),s.jsx("div",{className:"field-row mt-2.5",children:s.jsxs(Je,{className:"inline-flex cursor-pointer items-center gap-2.5 font-normal",children:[s.jsx(_r,{checked:t,"aria-label":r("该上游无需鉴权"),onCheckedChange:p=>c(p===!0)}),s.jsx("span",{className:"text-xs text-subtle",children:r("该上游无需鉴权(转发与拉取模型都不发送鉴权头)")})]})}),s.jsxs("p",{className:"detail",children:[r("上游本来不要凭证时(本地 Ollama、OpenCode Zen 的免费档)勾上这一项:账号会被正常选路;只把 Key 留空"),s.jsx("strong",{children:r("又不勾")}),r("会被当成「未配置凭证」而跳过。")]})]})}function A8({provider:e,name:t,protocol:a,baseUrl:o,count:c,emulation:d,onName:f,onProtocol:p,onBaseUrl:h,onEmulation:b,onRemove:y}){const v=Pe().wbProviders?.PROTOCOL_OPTIONS||[{value:"openai",label:r("OpenAI 兼容")},{value:"anthropic",label:"Anthropic"}],j=v.find(w=>w.value===a)?.label||a;return s.jsxs(dn,{children:[s.jsx("h3",{children:r("提供商")}),s.jsxs("p",{children:[r("这一栏改的是"),s.jsx("strong",{children:r("「{name}」本身",{name:e.name||e.id})}),r("(名下 {count} 个账号共用)",{count:c}),r("改协议 / Base URL 会改变它们的转发方式,正在进行的请求可能失败;模型清单与映射在「模型管理」页。")]}),s.jsxs("div",{className:"field-row",children:[s.jsx("label",{htmlFor:"account-provider-name",children:r("名称")}),s.jsx(Fe,{id:"account-provider-name",maxLength:DR,className:"min-w-[220px]",placeholder:r("提供商显示名,1~{max} 个字符",{max:DR}),value:t,onChange:w=>f(w.currentTarget.value)})]}),s.jsxs("div",{className:"field-row mt-2.5",children:[s.jsx("label",{htmlFor:"account-provider-protocol",children:r("协议")}),s.jsxs(dt,{value:a,onValueChange:w=>p(String(w)),children:[s.jsx(pt,{id:"account-provider-protocol",className:"min-w-[180px]",children:s.jsx(ft,{children:j})}),s.jsx(mt,{children:v.map(w=>s.jsx($e,{value:w.value,children:w.label},w.value))})]})]}),s.jsxs("div",{className:"field-row mt-2.5",children:[s.jsx("label",{htmlFor:"account-provider-baseurl",children:r("Base URL")}),s.jsx(Fe,{id:"account-provider-baseurl",className:"min-w-[260px]",placeholder:r("OpenAI 兼容填到 /v1;Anthropic 填根地址"),value:o,onChange:w=>h(w.currentTarget.value)})]}),s.jsx("div",{className:"field-row mt-2.5",children:s.jsxs(Je,{className:"inline-flex cursor-pointer items-center gap-2.5 font-normal",children:[s.jsx(_r,{checked:d==="opencode","aria-label":r("伪装 OpenCode 官方客户端"),onCheckedChange:w=>b(w===!0?"opencode":"")}),s.jsx("span",{className:"text-xs text-subtle",children:r("伪装 OpenCode 官方客户端(OpenCode Zen 免费档要它才放行)")})]})}),s.jsxs("p",{className:"detail",children:[r("开启后,网关按 OpenCode 官方 CLI 的形状发请求:没填 Key 的账号用匿名凭证"),s.jsx("code",{children:"public"}),r("、补官方会话头、请求体补两个占位工具(上游免费档的三道校验)。"),s.jsx("strong",{children:r("它会改写请求体")}),r(",只对 OpenCode Zen 这类上游有意义,别的家请关掉。")]}),s.jsxs("div",{className:"field-row mt-3",children:[s.jsx(ne,{variant:"destructive",onClick:y,children:r("删除提供商")}),s.jsx("span",{className:"detail",children:r("级联删除名下全部账号,不可恢复")})]})]})}function R8({id:e,onClose:t}){const a=Aa(e),[o,c]=x.useState(a?.enabled!==!1),[d,f]=x.useState(a?.name||""),[p,h]=x.useState(()=>PR(a?.proxy)),[b,y]=x.useState(""),[v,j]=x.useState(()=>mj(a)),[w,k]=x.useState(!1),[S,N]=x.useState(""),[R,P]=x.useState(null),[T,C]=x.useState(""),[E,D]=x.useState("chat_completions"),[I,O]=x.useState(""),[_,z]=x.useState(""),[H,B]=x.useState(""),[L,F]=x.useState(a?.noAuth===!0),[$,X]=x.useState(()=>h8(a)),[K,q]=x.useState(()=>j8(a?.balanceQuery)),[Q,G]=x.useState(()=>f8(a)),[J,Y]=x.useState("basic"),[re,M]=x.useState(()=>String(Number(a?.maxConcurrent)||0));if(x.useEffect(()=>{let Ae=!0;P(null);const oe=Aa(e);return oe?(Promise.resolve(Pe().wbCustomProvidersUi?.find?.(An(oe))).then(me=>{!Ae||!me||(P(me),C(me.name||""),D(me.protocol||"chat_completions"),O(me.baseUrl||""),z(typeof me.clientEmulation=="string"?me.clientEmulation:""))}).catch(()=>{}),()=>{Ae=!1}):()=>{Ae=!1}},[e]),!a)return s.jsx(Yt,{open:!0,onOpenChange:Ae=>{Ae||t()},children:s.jsxs(Xt,{children:[s.jsx(Vt,{children:s.jsx(Ut,{children:r("账号设置")})}),s.jsx(Lt,{children:s.jsx("p",{className:"detail",children:r("账号不存在,请刷新后重试。")})}),s.jsxs(tn,{children:[s.jsx("div",{className:"mr-auto"}),s.jsx(ne,{variant:"outline",onClick:t,children:r("关闭")})]})]})});const U=a,Z=k8(U,Al()),ae=An(U)==="catpaw",ce=An(U).startsWith("custom-"),W=RA(R,U.baseUrl)||p.mode==="rotate",ue=Mf(U.balanceQuery?.scheme),ve={};for(const Ae of ue?.fields??[])ve[Ae.key]=v8(U.balanceQuery,Ae);const ee=!!(ue&&ue.fields.length)&&!y8(U.balanceQuery);async function he(){if(!w){k(!0);try{await Pe().workbuddyDesktop?.updateAccount?.(e,{balanceToken:null}),y(""),_e(r("✅ 已清除余额查询凭证")),await Pe().wbApp?.refresh?.()}catch(Ae){_e(r("清除失败:{error}",{error:ut(Ae)}),"err")}finally{k(!1)}}}async function te(){if(!w){k(!0);try{await Pe().workbuddyDesktop?.updateAccount?.(e,{apiKey:null}),B(""),_e(r("✅ 已清除 API Key(该账号现在没有凭证,转发会被跳过)")),await Pe().wbApp?.refresh?.()}catch(Ae){_e(r("清除失败:{error}",{error:ut(Ae)}),"err")}finally{k(!1)}}}async function ke(Ae){if(!w){k(!0);try{await Pe().workbuddyDesktop?.updateAccount?.(e,{balanceQuery:{[Ae]:null}}),q(oe=>({...oe,[Ae]:""})),_e(r("✅ 已清除查询凭证")),await Pe().wbApp?.refresh?.()}catch(oe){_e(r("清除失败:{error}",{error:ut(oe)}),"err")}finally{k(!1)}}}function le(){if(!ce)return null;const Ae=H.trim(),oe={};return Ae?oe.apiKey=Ae:L!==(U.noAuth===!0)&&(oe.noAuth=L),Object.keys(oe).length?oe:null}function de(){if(!R)return null;const Ae=T.trim(),oe=I.trim();if(!Ae)return{error:r("请填写提供商名称")};if(!oe)return{error:r("请填写提供商的 Base URL")};const me=typeof R.clientEmulation=="string"?R.clientEmulation:"";return R.name===Ae&&R.protocol===E&&R.baseUrl===oe&&me===_?null:{id:R.id,name:Ae,protocol:E,baseUrl:oe,clientEmulation:_}}async function Se(){if(w)return;let Ae;try{Ae=Tj(p)}catch(Tt){_e(ut(Tt),"err");return}const oe=de();if(oe&&"error"in oe){N(s.jsx("span",{className:"text-destructive",children:oe.error}));return}const me=Ea(U)?g8(U,$):null;if(me&&"error"in me){N(s.jsx("span",{className:"text-destructive",children:me.error}));return}const pe=d8(U,Q),Ce=w8(U.balanceQuery?.scheme,K),Ne=le()||{},be=Number(re);if(!Number.isFinite(be)||be<0){_e(r("并发上限必须是 0~{max} 的整数",{max:Ol}),"err");return}const De=Math.min(Ol,Math.round(be)),Ge=Number(U.maxConcurrent)||0,Ct=De!==Ge?{maxConcurrent:De}:{};k(!0);try{const Tt=ae&&b.trim()?{balanceToken:b.trim()}:{},Mt=eg(U)&&v!==mj(U)?{zcodePlan:v}:{};if(await Pe().workbuddyDesktop?.updateAccount?.(e,{name:d.trim()||U.name,enabled:o,proxy:Ae,...Tt,...Mt,...Ne,...Ct,...Ce?{balanceQuery:Ce}:{},...me&&"patch"in me?me.patch:{},...pe&&"patch"in pe?pe.patch:{}}),oe)try{await Pe().wbCustomProvidersUi?.update?.(oe)}catch(ot){N(s.jsx("span",{className:"text-destructive",children:r("账号已保存,但提供商未更新:{error}",{error:ut(ot)})})),await Pe().wbApp?.refresh?.(),k(!1);return}t(),_e(r("✅ 账号设置已保存"));try{await Pe().wbApp?.refresh?.()}catch{}}catch(Tt){N(s.jsx("span",{className:"text-destructive",children:ut(Tt)})),_e(r("保存失败:{error}",{error:ut(Tt)}),"err")}finally{k(!1)}}const Te=Number(cr(An(U)).concurrencyDefault)||0,Le=ae||ce||eg(U);return s.jsx(Yt,{open:!0,onOpenChange:Ae=>{Ae||w||t()},children:s.jsxs(Xt,{className:"w-[min(900px,calc(100vw-48px))]",children:[s.jsx(Vt,{children:s.jsx(Ut,{children:r("账号设置 · {name}",{name:dg(a)})})}),s.jsx(Lt,{className:"p-0",children:s.jsxs("div",{className:"acct-dlg",children:[s.jsx("aside",{className:"prov-rail acct-dlg-rail","aria-label":r("账号设置分组"),children:s.jsxs("div",{className:"rail-scroll",children:[s.jsx("div",{className:"rail-label",children:r("账号设置")}),[["basic",r("基本")],...Le?[["credential",r("凭证与套餐")]]:[],...Ea(U)?[["query",r("查询设置")],["limiter",r("限制器")]]:[],["network",r("网络")]].map(([Ae,oe])=>s.jsx(du,{active:J===Ae,title:oe,className:"shadow-none",onClick:()=>Y(Ae),children:oe},Ae))]})}),s.jsxs("div",{className:"acct-dlg-main",children:[J==="basic"?s.jsxs("div",{children:[s.jsxs("div",{className:"acct-dlg-pane-head",children:[s.jsx("h3",{children:r("基本")}),s.jsx("p",{children:r("这条账号是谁、排第几、能不能接请求。")})]}),s.jsxs("div",{className:"field-row",children:[s.jsx("label",{children:r("启用")}),s.jsx(Zn,{checked:o,onCheckedChange:c,"aria-label":r("启用该账号")}),s.jsx("span",{className:"detail",children:r("关闭则不参与转发(余额查询照常,见「查询设置」)")})]}),s.jsxs("div",{className:"field-row",children:[s.jsx("label",{htmlFor:"account-name-input",children:r("备注名")}),s.jsx(Fe,{id:"account-name-input",maxLength:100,placeholder:r("账号显示名称"),className:"max-w-[280px]",value:d,onChange:Ae=>f(Ae.currentTarget.value)})]}),s.jsxs("div",{className:"field-row",children:[s.jsx("label",{children:r("转发顺序")}),s.jsx("span",{className:"detail",children:r("在列表里拖:拖分组带调整整组顺位,拖行首把手调整组内先后(顺序由拖拽表达,不再填数字)")})]}),s.jsxs("div",{className:"field-row",children:[s.jsx("label",{htmlFor:"account-conc-input",children:r("并发上限")}),s.jsx(Fe,{id:"account-conc-input",type:"number",min:0,max:Ol,step:1,className:"max-w-[110px]",value:re,onChange:Ae=>M(Ae.currentTarget.value)}),s.jsx("span",{className:"detail",children:Te>0?r("0 = 按本家默认 {default}",{default:Te}):r("0 = 不限")})]}),s.jsx("p",{className:"detail acct-dlg-hint",children:Te>0?r("并发上限 受上游硬顶约束,达到上限的账号跳过、请求转给其他账号(原列表 ⋯ 菜单的「并发上限」入口已并入这里)"):r("并发上限 0~{max};达到上限的账号跳过、请求转给其他账号(原列表 ⋯ 菜单的「并发上限」入口已并入这里)",{max:Ol})})]}):null,J==="credential"&&Le?s.jsxs("div",{children:[s.jsxs("div",{className:"acct-dlg-pane-head",children:[s.jsx("h3",{children:r("凭证与套餐")}),s.jsx("p",{children:r("这一段按提供商出现:有什么配什么。")})]}),ae?s.jsx(T8,{configured:a.hasBalanceToken===!0,value:b,onChange:y,clearBusy:w,onClear:()=>{he()}}):null,ce?s.jsx(E8,{hasApiKey:U.hasApiKey===!0,noAuth:L,value:H,onValue:B,onToggleNoAuth:F,onClear:()=>{te()},clearBusy:w}):null,eg(U)?s.jsx(C8,{plan:v,hasJwt:a.canClaim===!0,onChange:j}):null,R?s.jsx(A8,{provider:R,count:Z.length+1,name:T,protocol:E,baseUrl:I,emulation:_,onName:C,onProtocol:D,onBaseUrl:O,onEmulation:z,onRemove:()=>{w||Promise.resolve(Pe().wbCustomProvidersUi?.remove?.(R.id)).then(Ae=>{Ae&&t()})}}):null]}):null,J==="query"&&Ea(U)?s.jsxs("div",{children:[s.jsxs("div",{className:"acct-dlg-pane-head",children:[s.jsx("h3",{children:r("查询设置")}),s.jsx("p",{children:r("余额列读数的自动刷新;也是「限制器」余额规则的数据来源。")})]}),ue?s.jsx(N8,{spec:ue,values:K,configured:ve,onValue:(Ae,oe)=>q(me=>({...me,[Ae]:oe})),onClear:Ae=>{ke(Ae)},clearBusy:w,idPrefix:"account-balance-query"}):null,ee?s.jsx("p",{className:"detail mt-2.5 text-subtle",children:r("查询凭证还没配齐:填好后余额列才有读数,在此之前会显示「未配置」。")}):null,s.jsx(x8,{account:U,draft:$,onChange:X})]}):null,J==="limiter"&&Ea(U)?s.jsxs("div",{children:[s.jsxs("div",{className:"acct-dlg-pane-head",children:[s.jsx("h3",{children:r("限制器")}),s.jsx("p",{children:r("按规则限制该账号参与转发:没有规则(或全部停用)= 不限制;跳过档自动恢复,禁用档需手动启用。")})]}),s.jsx(u8,{account:U,draft:Q,onChange:G})]}):null,J==="network"?s.jsxs("div",{children:[s.jsxs("div",{className:"acct-dlg-pane-head",children:[s.jsx("h3",{children:r("网络")}),s.jsx("p",{children:r("这条账号访问上游走哪条线路。")})]}),s.jsx(LR,{draft:p,onChange:h,idPrefix:"account-proxy",allowRotate:W}),a.proxy?.error?s.jsx("p",{className:"detail text-destructive",children:r("当前代理不可用:{error}(转发时会回退直连)",{error:a.proxy.error})}):null]}):null]})]})}),s.jsxs(tn,{children:[s.jsx("div",{className:"detail mr-auto",style:{minHeight:18},children:S}),s.jsx(ne,{variant:"outline",disabled:w,onClick:t,children:r("取消")}),s.jsx(ne,{variant:"default",disabled:w,onClick:()=>{Se()},children:r(w?"保存中…":"保存")})]})]})})}const O8=[{value:"enable",label:r("启用")},{value:"disable",label:r("禁用")},{value:"proxy",label:r("修改代理")},{value:"concurrency",label:r("设置并发上限")},{value:"remove",label:r("删除")}];function M8({ids:e,action:t,onClose:a}){const[o,c]=x.useState(t),[d,f]=x.useState(()=>PR(null)),[p,h]=x.useState(""),[b,y]=x.useState(!1),[v,j]=x.useState(""),w=e.map(T=>Aa(T)).filter(T=>T!==null),k=w.reduce((T,C)=>Math.max(T,Number(cr(An(C)).concurrencyDefault)||0),0),S=w.length>0&&w.every(T=>a$(T));function N(T){return Promise.resolve(Pe().wbConfirm?.ask?.({title:r("删除选中的账号"),html:r("确定删除选中的 {count} 个账号?此操作不可恢复,账号的登录态会一并移除。",{count:T}),okText:r("删除"),okClass:"danger"})??!1)}async function R(){if(b)return;if(!e.length){_e(r("没有选中的账号"),"err");return}let T;if(o==="proxy")try{T=Tj(d)}catch(E){_e(ut(E),"err");return}let C;if(o==="concurrency"){const E=Number(p.trim());if(!p.trim()||!Number.isFinite(E)||E<0){_e(r("并发上限必须是 0~{max} 的整数",{max:Ol}),"err");return}C=Math.min(Ol,Math.round(E))}if(!(o==="remove"&&!await N(e.length))){if(o==="disable"||o==="remove"){const E=new Set(e);if(!Al().filter(I=>I.enabled!==!1&&!E.has(I.id)).length){const I=r(o==="remove"?"删除":"禁用");if(!await Promise.resolve(Pe().wbConfirm?.ask?.({title:r("全部启用中的账号将被{what}",{what:I}),html:r("这会{what}所有启用中的账号,转发将不可用。确定继续?",{what:I}),okText:I,okClass:o==="remove"?"danger":"primary"})??!1))return}}y(!0),j("");try{const E={action:o,ids:e};o==="proxy"&&(E.proxy=T),o==="concurrency"&&(E.maxConcurrent=C);const D=await Pe().workbuddyDesktop?.batchAccounts?.(E),I=(D?.ok||[]).filter(B=>B.changes?.length).length,O=(D?.removed||[]).length,_=D?.failed||[],z=o==="remove"?O:I,H={enable:r("启用"),disable:r("禁用"),proxy:r("修改代理"),concurrency:r("设置并发上限"),remove:r("删除")}[o]||o;if(_.length){const B=_.slice(0,3).map(L=>dg(Aa(String(L.id)))||L.id).join(r("、"));_e(r("{verb}完成:成功 {ok} 个,失败 {fail} 个({detail}{more})",{verb:H,ok:z,fail:_.length,detail:B,more:_.length>3?r(" 等"):""}),"err"),j(s.jsxs("span",{className:"text-destructive",children:[r("失败 {count} 个:",{count:_.length}),_.map(L=>`${dg(Aa(String(L.id)))||L.id}(${L.error})`).join(r(";"))]}))}else _e(r("✅ {verb}完成:共 {count} 个账号",{verb:H,count:z})),a();await Pe().wbApp?.refresh?.()}catch(E){j(s.jsx("span",{className:"text-destructive",children:ut(E)})),_e(r("批量操作失败:{error}",{error:ut(E)}),"err")}finally{y(!1)}}}const P={enable:r("启用"),disable:r("禁用"),proxy:r("修改代理"),concurrency:r("设置并发上限"),remove:r("删除")}[o]||o;return s.jsx(Yt,{open:!0,onOpenChange:T=>{T||b||a()},children:s.jsxs(Xt,{children:[s.jsx(Vt,{children:s.jsx(Ut,{children:r("批量操作 · 已选 {count} 个账号",{count:e.length})})}),s.jsxs(Lt,{children:[s.jsxs(dn,{children:[s.jsx("h3",{children:r("将作用于以下账号")}),s.jsx("p",{style:{maxHeight:84,overflowY:"auto"},children:w.map(T=>dg(T)).join(r("、"))})]}),s.jsxs(dn,{children:[s.jsx("h3",{children:r("操作")}),s.jsx(_h,{value:o,onValueChange:c,className:"flex-row flex-wrap items-center gap-5","aria-label":r("批量动作"),children:O8.map(T=>s.jsxs(Je,{className:"inline-flex cursor-pointer items-center gap-2 font-normal",children:[s.jsx(jo,{value:T.value}),T.label]},T.value))}),o==="proxy"?s.jsx("div",{className:"mt-2.5",children:s.jsx(LR,{draft:d,onChange:f,idPrefix:"batch-proxy",allowRotate:S})}):null,o==="concurrency"?s.jsxs("div",{className:"mt-2.5",children:[s.jsxs("div",{className:"field-row",children:[s.jsx("label",{htmlFor:"batch-conc-input",children:r("并发上限")}),s.jsx(Fe,{id:"batch-conc-input",type:"number",min:0,max:Ol,step:1,className:"max-w-[110px]",placeholder:r("不限"),value:p,onChange:T=>h(T.currentTarget.value)}),s.jsx("span",{className:"detail",children:r("0 = 不限")})]}),s.jsx("p",{className:"detail acct-dlg-hint",children:k>0?r("并发上限 0~{max};有上游硬顶的家(如 CodeArts)以它的硬顶为准;达到上限的账号会被跳过、请求转给其他账号",{max:Ol}):r("并发上限 0~{max};达到上限的账号会被跳过、请求转给其他账号",{max:Ol})})]}):null]}),s.jsx("div",{className:"detail",style:{minHeight:18},children:v})]}),s.jsxs(tn,{children:[s.jsx("div",{className:"mr-auto"}),s.jsx(ne,{variant:"outline",disabled:b,onClick:a,children:r("取消")}),s.jsx(ne,{variant:o==="remove"?"destructive":"default",disabled:b,onClick:()=>{R()},children:b?r("执行中…"):r("执行({action})",{action:P})})]})]})})}function D8(){const e=Gs();return e.dialog?e.dialog.kind==="settings"?s.jsx(R8,{id:e.dialog.id,onClose:ig},e.dialog.id):s.jsx(M8,{ids:e.dialog.ids,action:e.dialog.action,onClose:ig},e.dialog.ids.join(",")):null}var Ej={exports:{}},Df={},Aj={exports:{}},Rj={};var zR;function I8(){return zR||(zR=1,(function(e){function t(X,K){var q=X.length;X.push(K);e:for(;0>>1,G=X[Q];if(0>>1;Qc(re,q))Mc(U,re)?(X[Q]=U,X[M]=q,Q=M):(X[Q]=re,X[Y]=q,Q=Y);else if(Mc(U,q))X[Q]=U,X[M]=q,Q=M;else break e}}return K}function c(X,K){var q=X.sortIndex-K.sortIndex;return q!==0?q:X.id-K.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var d=performance;e.unstable_now=function(){return d.now()}}else{var f=Date,p=f.now();e.unstable_now=function(){return f.now()-p}}var h=[],b=[],y=1,v=null,j=3,w=!1,k=!1,S=!1,N=!1,R=typeof setTimeout=="function"?setTimeout:null,P=typeof clearTimeout=="function"?clearTimeout:null,T=typeof setImmediate<"u"?setImmediate:null;function C(X){for(var K=a(b);K!==null;){if(K.callback===null)o(b);else if(K.startTime<=X)o(b),K.sortIndex=K.expirationTime,t(h,K);else break;K=a(b)}}function E(X){if(S=!1,C(X),!k)if(a(h)!==null)k=!0,D||(D=!0,B());else{var K=a(b);K!==null&&$(E,K.startTime-X)}}var D=!1,I=-1,O=5,_=-1;function z(){return N?!0:!(e.unstable_now()-_X&&z());){var Q=v.callback;if(typeof Q=="function"){v.callback=null,j=v.priorityLevel;var G=Q(v.expirationTime<=X);if(X=e.unstable_now(),typeof G=="function"){v.callback=G,C(X),K=!0;break t}v===a(h)&&o(h),C(X)}else o(h);v=a(h)}if(v!==null)K=!0;else{var J=a(b);J!==null&&$(E,J.startTime-X),K=!1}}break e}finally{v=null,j=q,w=!1}K=void 0}}finally{K?B():D=!1}}}var B;if(typeof T=="function")B=function(){T(H)};else if(typeof MessageChannel<"u"){var L=new MessageChannel,F=L.port2;L.port1.onmessage=H,B=function(){F.postMessage(null)}}else B=function(){R(H,0)};function $(X,K){I=R(function(){X(e.unstable_now())},K)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(X){X.callback=null},e.unstable_forceFrameRate=function(X){0>X||125Q?(X.sortIndex=q,t(b,X),a(h)===null&&X===a(b)&&(S?(P(I),I=-1):S=!0,$(E,q-Q))):(X.sortIndex=G,t(h,X),k||w||(k=!0,D||(D=!0,B()))),X},e.unstable_shouldYield=z,e.unstable_wrapCallback=function(X){var K=j;return function(){var q=j;j=K;try{return X.apply(this,arguments)}finally{j=q}}}})(Rj)),Rj}var BR;function P8(){return BR||(BR=1,Aj.exports=I8()),Aj.exports}var HR;function _8(){if(HR)return Df;HR=1;var e=P8(),t=Xd(),a=M1();function o(n){var l="https://react.dev/errors/"+n;if(1ke||(n.current=te[ke],te[ke]=null,ke--)}function Se(n,l){ke++,te[ke]=n.current,n.current=l}var Te=le(null),Le=le(null),Ae=le(null),oe=le(null);function me(n,l){switch(Se(Ae,l),Se(Le,n),Se(Te,null),l.nodeType){case 9:case 11:n=(n=l.documentElement)&&(n=n.namespaceURI)?i5(n):0;break;default:if(n=l.tagName,l=l.namespaceURI)l=i5(l),n=c5(l,n);else switch(n){case"svg":n=1;break;case"math":n=2;break;default:n=0}}de(Te),Se(Te,n)}function pe(){de(Te),de(Le),de(Ae)}function Ce(n){var l=n.memoizedState;l!==null&&(qd._currentValue=l.memoizedState,Se(oe,n)),l=Te.current;var i=c5(l,n.type);l!==i&&(Se(Le,n),Se(Te,i))}function Ne(n){Le.current===n&&(de(Te),de(Le)),oe.current===n&&(de(oe),qd._currentValue=he)}var be,De;function Ge(n){if(be===void 0)try{throw Error()}catch(i){var l=i.stack.trim().match(/\n( *(at )?)/);be=l&&l[1]||"",De=-1)":-1m||se[u]!==xe[m]){var we=`
`+se[u].replace(" at new "," at ");return n.displayName&&we.includes("")&&(we=we.replace("",n.displayName)),we}while(1<=u&&0<=m);break}}}finally{Ct=!1,Error.prepareStackTrace=i}return(i=n?n.displayName||n.name:"")?Ge(i):""}function Mt(n,l){switch(n.tag){case 26:case 27:case 5:return Ge(n.type);case 16:return Ge("Lazy");case 13:return n.child!==l&&l!==null?Ge("Suspense Fallback"):Ge("Suspense");case 19:return Ge("SuspenseList");case 0:case 15:return Tt(n.type,!1);case 11:return Tt(n.type.render,!1);case 1:return Tt(n.type,!0);case 31:return Ge("Activity");case 30:return Ge("ViewTransition");default:return""}}function ot(n){try{var l="",i=null;do l+=Mt(n,i),i=n,n=n.return;while(n);return l}catch(u){return`
Error generating stack: `+u.message+`
-`+u.stack}}var Kn=Object.prototype.hasOwnProperty,ms=e.unstable_scheduleCallback,Yn=e.unstable_cancelCallback,vs=e.unstable_shouldYield,it=e.unstable_requestPaint,$t=e.unstable_now,Vn=e.unstable_getCurrentPriorityLevel,rn=e.unstable_ImmediatePriority,nt=e.unstable_UserBlockingPriority,Dt=e.unstable_NormalPriority,qt=e.unstable_LowPriority,es=e.unstable_IdlePriority,Fn=e.log,$n=e.unstable_setDisableYieldValue,Dn=null,en=null;function cs(n){if(typeof Fn=="function"&&$n(n),en&&typeof en.setStrictMode=="function")try{en.setStrictMode(Dn,n)}catch{}}var Et=Math.clz32?Math.clz32:wt,xt=Math.log,jt=Math.LN2;function wt(n){return n>>>=0,n===0?32:31-(xt(n)/jt|0)|0}var Tr=256,ar=262144,Fr=4194304;function Nn(n){var l=n&42;if(l!==0)return l;switch(n&-n){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return n&-n;case 262144:case 524288:case 1048576:case 2097152:return n&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return n&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return n}}function al(n,l,i){var u=n.pendingLanes;if(u===0)return 0;var m=0,g=n.suspendedLanes,T=n.pingedLanes;n=n.warmLanes;var V=u&134217727;return V!==0?(u=V&~g,u!==0?m=Nn(u):(T&=V,T!==0?m=Nn(T):i||(i=V&~n,i!==0&&(m=Nn(i))))):(V=u&~g,V!==0?m=Nn(V):T!==0?m=Nn(T):i||(i=u&~n,i!==0&&(m=Nn(i)))),m===0?0:l!==0&&l!==m&&(l&g)===0&&(g=m&-m,i=l&-l,g>=i||g===32&&(i&4194048)!==0)?l:m}function ln(n,l){return(n.pendingLanes&~(n.suspendedLanes&~n.pingedLanes)&l)===0}function hc(n,l){(l&8)!==0&&(l|=l&32);var i=n.entangledLanes;if(i!==0)for(n=n.entanglements,i&=l;0i;i++)l.push(n);return l}function Go(n,l){n.pendingLanes|=l,l!==268435456&&(n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0)}function Ko(n,l,i,u,m,g){var T=n.pendingLanes;n.pendingLanes=i,n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0,n.expiredLanes&=i,n.entangledLanes&=i,n.errorRecoveryDisabledLanes&=i,n.shellSuspendCounter=0;var V=n.entanglements,se=n.expirationTimes,xe=n.hiddenUpdates;for(i=T&~i;0"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Qt=!1;if(lt)try{var In={};Object.defineProperty(In,"passive",{get:function(){Qt=!0}}),window.addEventListener("test",In,In),window.removeEventListener("test",In,In)}catch{Qt=!1}var gn=null,Pn=null,hs=null;function Er(){if(hs)return hs;var n,l=Pn,i=l.length,u,m="value"in gn?gn.value:gn.textContent,g=m.length;for(n=0;n=tm),i_=" ",c_=!1;function u_(n,l){switch(n){case"keyup":return sne.indexOf(l.keyCode)!==-1;case"keydown":return l.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function d_(n){return n=n.detail,typeof n=="object"&&"data"in n?n.data:null}var pd=!1;function ane(n,l){switch(n){case"compositionend":return d_(l);case"keypress":return l.which!==32?null:(c_=!0,i_);case"textInput":return n=l.data,n===i_&&c_?null:n;default:return null}}function lne(n,l){if(pd)return n==="compositionend"||!aN&&u_(n,l)?(n=Er(),hs=Pn=gn=null,pd=!1,n):null;switch(n){case"paste":return null;case"keypress":if(!(l.ctrlKey||l.altKey||l.metaKey)||l.ctrlKey&&l.altKey){if(l.char&&1"u")return null;try{return n.activeElement||n.body}catch{return n.body}}function v_(n){for(;n&&n.firstChild;)n=n.firstChild;return n}function y_(n,l){var i=v_(n);n=0;for(var u;i;){if(i.nodeType===3){if(u=n+i.textContent.length,n<=l&&u>=l)return{node:i,offset:l-n};n=u}e:{for(;i;){if(i.nextSibling){i=i.nextSibling;break e}i=i.parentNode}i=void 0}i=v_(i)}}function j_(n,l){return n&&l?n===l?!0:n&&n.nodeType===3?!1:l&&l.nodeType===3?j_(n,l.parentNode):"contains"in n?n.contains(l):n.compareDocumentPosition?!!(n.compareDocumentPosition(l)&16):!1:!1}function w_(n){n=n!=null&&n.ownerDocument!=null&&n.ownerDocument.defaultView!=null?n.ownerDocument.defaultView:window;for(var l=iN(n.document);l instanceof n.HTMLIFrameElement;){try{var i=typeof l.contentWindow.location.href=="string"}catch{i=!1}if(i)n=l.contentWindow;else break;l=iN(n.document)}return l}function cN(n){var l=n&&n.nodeName&&n.nodeName.toLowerCase();return l&&(l==="input"&&(n.type==="text"||n.type==="search"||n.type==="tel"||n.type==="url"||n.type==="password")||l==="textarea"||n.contentEditable==="true")}var mne=lt&&"documentMode"in document&&11>=document.documentMode,md=null,uN=null,am=null,dN=!1;function S_(n,l,i){var u=i.window===i?i.document:i.nodeType===9?i:i.ownerDocument;dN||md==null||md!==iN(u)||(u=md,"selectionStart"in u&&cN(u)?u={start:u.selectionStart,end:u.selectionEnd}:(u=(u.ownerDocument&&u.ownerDocument.defaultView||window).getSelection(),u={anchorNode:u.anchorNode,anchorOffset:u.anchorOffset,focusNode:u.focusNode,focusOffset:u.focusOffset}),am&&rm(am,u)||(am=u,u=mv(uN,"onSelect"),0>=T,m-=T,ol=1<<32-Et(l)+m|i<rt?(Ns=st,st=null):Ns=st.sibling;var Zt=fe(ge,st,ye[rt],Ee);if(Zt===null){st===null&&(st=Ns);break}n&&st&&Zt.alternate===null&&l(ge,st),ie=g(Zt,ie,rt),Ht===null?Ke=Zt:Ht.sibling=Zt,Ht=Zt,st=Ns}if(rt===ye.length)return i(ge,st),At&&Yl(ge,rt),Ke;if(st===null){for(;rtrt?(Ns=st,st=null):Ns=st.sibling;var wi=fe(ge,st,Zt.value,Ee);if(wi===null){st===null&&(st=Ns);break}n&&st&&wi.alternate===null&&l(ge,st),ie=g(wi,ie,rt),Ht===null?Ke=wi:Ht.sibling=wi,Ht=wi,st=Ns}if(Zt.done)return i(ge,st),At&&Yl(ge,rt),Ke;if(st===null){for(;!Zt.done;rt++,Zt=ye.next())Zt=Re(ge,Zt.value,Ee),Zt!==null&&(ie=g(Zt,ie,rt),Ht===null?Ke=Zt:Ht.sibling=Zt,Ht=Zt);return At&&Yl(ge,rt),Ke}for(st=u(st);!Zt.done;rt++,Zt=ye.next())Zt=je(st,ge,rt,Zt.value,Ee),Zt!==null&&(n&&(Ns=Zt.alternate,Ns!==null&&st.delete(Ns.key===null?rt:Ns.key)),ie=g(Zt,ie,rt),Ht===null?Ke=Zt:Ht.sibling=Zt,Ht=Zt);return n&&st.forEach(function(are){return l(ge,are)}),At&&Yl(ge,rt),Ke}function vt(ge,ie,ye,Ee){if(typeof ye=="object"&&ye!==null&&ye.type===H&&ye.key===null&&ye.props.ref===void 0&&(ye=ye.props.children),typeof ye=="object"&&ye!==null){switch(ye.$$typeof){case _:e:{for(var Ke=ye.key;ie!==null;){if(ie.key===Ke){if(Ke=ye.type,Ke===H){if(ie.tag===7){i(ge,ie.sibling),Ee=m(ie,ye.props.children),si(Ee,ye),Ee.return=ge,ge=Ee;break e}}else if(ie.elementType===Ke||typeof Ke=="object"&&Ke!==null&&Ke.$$typeof===G&&_c(Ke)===ie.type){i(ge,ie.sibling),Ee=m(ie,ye.props),si(Ee,ye),Ee.return=ge,ge=Ee;break e}i(ge,ie);break}else l(ge,ie);ie=ie.sibling}ye.type===H?(Ee=Ac(ye.props.children,ge.mode,Ee,ye.key),si(Ee,ye),Ee.return=ge,ge=Ee):(Ee=vb(ye.type,ye.key,ye.props,null,ge.mode,Ee),si(Ee,ye),Ee.return=ge,ge=Ee)}return T(ge);case z:e:{for(Ke=ye.key;ie!==null;){if(ie.key===Ke)if(ie.tag===4&&ie.stateNode.containerInfo===ye.containerInfo&&ie.stateNode.implementation===ye.implementation){i(ge,ie.sibling),Ee=m(ie,ye.children||[]),Ee.return=ge,ge=Ee;break e}else{i(ge,ie);break}else l(ge,ie);ie=ie.sibling}Ee=bN(ye,ge.mode,Ee),Ee.return=ge,ge=Ee}return T(ge);case G:return ye=_c(ye),vt(ge,ie,ye,Ee)}if(ue(ye))return He(ge,ie,ye,Ee);if(ae(ye)){if(Ke=ae(ye),typeof Ke!="function")throw Error(o(150));return ye=Ke.call(ye),We(ge,ie,ye,Ee)}if(typeof ye.then=="function")return vt(ge,ie,Ab(ye),Ee);if(ye.$$typeof===$)return vt(ge,ie,kb(ge,ye),Ee);Rb(ge,ye)}return typeof ye=="string"&&ye!==""||typeof ye=="number"||typeof ye=="bigint"?(ye=""+ye,ie!==null&&ie.tag===6?(i(ge,ie.sibling),Ee=m(ie,ye),Ee.return=ge,ge=Ee):(i(ge,ie),Ee=xN(ye,ge.mode,Ee),Ee.return=ge,ge=Ee),T(ge)):i(ge,ie)}return function(ge,ie,ye,Ee){try{dm=0;var Ke=vt(ge,ie,ye,Ee);return Sd=null,Ke}catch(st){if(st===wd||st===Tb)throw st;var Ht=Ar(29,st,null,ge.mode);return Ht.lanes=Ee,Ht.return=ge,Ht}}}var zc=K_(!0),Y_=K_(!1),ri=!1;function EN(n){n.updateQueue={baseState:n.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function AN(n,l){n=n.updateQueue,l.updateQueue===n&&(l.updateQueue={baseState:n.baseState,firstBaseUpdate:n.firstBaseUpdate,lastBaseUpdate:n.lastBaseUpdate,shared:n.shared,callbacks:null})}function ai(n){return{lane:n,tag:0,payload:null,callback:null,next:null}}function li(n,l,i){var u=n.updateQueue;if(u===null)return null;if(u=u.shared,(on&2)!==0){var m=u.pending;return m===null?l.next=l:(l.next=m.next,m.next=l),u.pending=l,l=bb(n),O_(n,null,i),l}return xb(n,u,l,i),bb(n)}function fm(n,l,i){if(l=l.updateQueue,l!==null&&(l=l.shared,(i&4194048)!==0)){var u=l.lanes;u&=n.pendingLanes,i|=u,l.lanes=i,gc(n,i)}}function RN(n,l){var i=n.updateQueue,u=n.alternate;if(u!==null&&(u=u.updateQueue,i===u)){var m=null,g=null;if(i=i.firstBaseUpdate,i!==null){do{var T={lane:i.lane,tag:i.tag,payload:i.payload,callback:null,next:null};g===null?m=g=T:g=g.next=T,i=i.next}while(i!==null);g===null?m=g=l:g=g.next=l}else m=g=l;i={baseState:u.baseState,firstBaseUpdate:m,lastBaseUpdate:g,shared:u.shared,callbacks:u.callbacks},n.updateQueue=i;return}n=i.lastBaseUpdate,n===null?i.firstBaseUpdate=l:n.next=l,i.lastBaseUpdate=l}var ON=!1;function pm(){if(ON){var n=jd;if(n!==null)throw n}}function mm(n,l,i,u){ON=!1;var m=n.updateQueue;ri=!1;var g=m.firstBaseUpdate,T=m.lastBaseUpdate,V=m.shared.pending;if(V!==null){m.shared.pending=null;var se=V,xe=se.next;se.next=null,T===null?g=xe:T.next=xe,T=se;var we=n.alternate;we!==null&&(we=we.updateQueue,V=we.lastBaseUpdate,V!==T&&(V===null?we.firstBaseUpdate=xe:V.next=xe,we.lastBaseUpdate=se))}if(g!==null){var Re=m.baseState;T=0,we=xe=se=null,V=g;do{var fe=V.lane&-536870913,je=fe!==V.lane;if(je?(Bt&fe)===fe:(u&fe)===fe){fe!==0&&fe===Ic&&(ON=!0),we!==null&&(we=we.next={lane:0,tag:V.tag,payload:V.payload,callback:null,next:null});e:{var He=n,We=V;fe=l;var vt=i;switch(We.tag){case 1:if(He=We.payload,typeof He=="function"){Re=He.call(vt,Re,fe);break e}Re=He;break e;case 3:He.flags=He.flags&-65537|128;case 0:if(He=We.payload,fe=typeof He=="function"?He.call(vt,Re,fe):He,fe==null)break e;Re=I({},Re,fe);break e;case 2:ri=!0}}fe=V.callback,fe!==null&&(n.flags|=64,je&&(n.flags|=8192),je=m.callbacks,je===null?m.callbacks=[fe]:je.push(fe))}else je={lane:fe,tag:V.tag,payload:V.payload,callback:V.callback,next:null},we===null?(xe=we=je,se=Re):we=we.next=je,T|=fe;if(V=V.next,V===null){if(V=m.shared.pending,V===null)break;je=V,V=je.next,je.next=null,m.lastBaseUpdate=je,m.shared.pending=null}}while(!0);we===null&&(se=Re),m.baseState=se,m.firstBaseUpdate=xe,m.lastBaseUpdate=we,g===null&&(m.shared.lanes=0),pi|=T,n.lanes=T,n.memoizedState=Re}}function X_(n,l){if(typeof n!="function")throw Error(o(191,n));n.call(l)}function Q_(n,l){var i=n.callbacks;if(i!==null)for(n.callbacks=null,n=0;ng?g:8;var T=ve.T,V={};V.types=T!==null?T.types:null,ve.T=V,ZN(n,!1,l,i);try{var se=m(),xe=ve.S;if(xe!==null&&xe(V,se),se!==null&&typeof se=="object"&&typeof se.then=="function"){var we=kne(se,u);bm(n,l,we,Jr(n))}else bm(n,l,u,Jr(n))}catch(Re){bm(n,l,{then:function(){},status:"rejected",reason:Re},Jr())}finally{ee.p=g,T!==null&&V.types!==null&&(T.types=V.types),ve.T=T}}function One(){}function XN(n,l,i,u){if(n.tag!==5)throw Error(o(476));var m=EL(n).queue;TL(n,m,l,he,i===null?One:function(){return AL(n),i(u)})}function EL(n){var l=n.memoizedState;if(l!==null)return l;l={memoizedState:he,baseState:he,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Wl,lastRenderedState:he},next:null};var i={};return l.next={memoizedState:i,baseState:i,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Wl,lastRenderedState:i},next:null},n.memoizedState=l,n=n.alternate,n!==null&&(n.memoizedState=l),l}function AL(n){var l=EL(n);l.next===null&&(l=n.alternate.memoizedState),bm(n,l.next.queue,{},Jr())}function QN(){return Xs(qd)}function RL(){return gs().memoizedState}function OL(){return gs().memoizedState}function Mne(n){for(var l=n.return;l!==null;){switch(l.tag){case 24:case 3:var i=Jr();n=ai(i);var u=li(l,n,i);u!==null&&(Dr(u,l,i),fm(u,l,i)),l={cache:NN()},n.payload=l;return}l=l.return}}function Dne(n,l,i){var u=Jr();i={lane:u,revertLane:0,gesture:null,action:i,hasEagerState:!1,eagerState:null,next:null},Hb(n)?DL(l,i):(i=hN(n,l,i,u),i!==null&&(Dr(i,n,u),IL(i,l,u)))}function ML(n,l,i){var u=Jr();bm(n,l,i,u)}function bm(n,l,i,u){var m={lane:u,revertLane:0,gesture:null,action:i,hasEagerState:!1,eagerState:null,next:null};if(Hb(n))DL(l,m);else{var g=n.alternate;if(n.lanes===0&&(g===null||g.lanes===0)&&(g=l.lastRenderedReducer,g!==null))try{var T=l.lastRenderedState,V=g(T,i);if(m.hasEagerState=!0,m.eagerState=V,Yr(V,T))return xb(n,l,m,0),_n===null&&gb(),!1}catch{}if(i=hN(n,l,m,u),i!==null)return Dr(i,n,u),IL(i,l,u),!0}return!1}function ZN(n,l,i,u){if(u={lane:2,revertLane:Uk(),gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},Hb(n)){if(l)throw Error(o(479))}else l=hN(n,i,u,2),l!==null&&Dr(l,n,2)}function Hb(n){var l=n.alternate;return n===bt||l!==null&&l===bt}function DL(n,l){Nd=Db=!0;var i=n.pending;i===null?l.next=l:(l.next=i.next,i.next=l),n.pending=l}function IL(n,l,i){if((i&4194048)!==0){var u=l.lanes;u&=n.pendingLanes,i|=u,l.lanes=i,gc(n,i)}}var Ub={readContext:Xs,use:_b,useCallback:us,useContext:us,useEffect:us,useImperativeHandle:us,useLayoutEffect:us,useInsertionEffect:us,useMemo:us,useReducer:us,useRef:us,useState:us,useDebugValue:us,useDeferredValue:us,useTransition:us,useSyncExternalStore:us,useId:us,useHostTransitionStatus:us,useFormState:us,useActionState:us,useOptimistic:us,useMemoCache:us,useCacheRefresh:us,useEffectEvent:us},PL={readContext:Xs,use:_b,useCallback:function(n,l){return xr().memoizedState=[n,l===void 0?null:l],n},useContext:Xs,useEffect:bL,useImperativeHandle:function(n,l,i){i=i!=null?i.concat([n]):null,zb(4194308,4,wL.bind(null,l,n),i)},useLayoutEffect:function(n,l){return zb(4194308,4,n,l)},useInsertionEffect:function(n,l){zb(4,2,n,l)},useMemo:function(n,l){var i=xr();l=l===void 0?null:l;var u=n();if(Bc){cs(!0);try{n()}finally{cs(!1)}}return i.memoizedState=[u,l],u},useReducer:function(n,l,i){var u=xr();if(i!==void 0){var m=i(l);if(Bc){cs(!0);try{i(l)}finally{cs(!1)}}}else m=l;return u.memoizedState=u.baseState=m,n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:n,lastRenderedState:m},u.queue=n,n=n.dispatch=Dne.bind(null,bt,n),[u.memoizedState,n]},useRef:function(n){var l=xr();return n={current:n},l.memoizedState=n},useState:function(n){n=$N(n);var l=n.queue,i=ML.bind(null,bt,l);return l.dispatch=i,[n.memoizedState,i]},useDebugValue:KN,useDeferredValue:function(n,l){var i=xr();return YN(i,n,l)},useTransition:function(){var n=$N(!1);return n=TL.bind(null,bt,n.queue,!0,!1),xr().memoizedState=n,[!1,n]},useSyncExternalStore:function(n,l,i){var u=bt,m=xr();if(At){if(i===void 0)throw Error(o(407));i=i()}else{if(i=l(),_n===null)throw Error(o(349));(Bt&127)!==0||nL(u,l,i)}m.memoizedState=i;var g={value:i,getSnapshot:l};return m.queue=g,bL(rL.bind(null,u,g,n),[n]),u.flags|=2048,Cd(9,{destroy:void 0},sL.bind(null,u,g,i,l),null),i},useId:function(){var n=xr(),l=_n.identifierPrefix;if(At){var i=il,u=ol;i=(u&~(1<<32-Et(u)-1)).toString(32)+i,l="_"+l+"R_"+i,i=Ib++,0<\/script>",g=g.removeChild(g.firstChild);break;case"select":g=typeof u.is=="string"?T.createElement("select",{is:u.is}):T.createElement("select"),u.multiple?g.multiple=!0:u.size&&(g.size=u.size);break;default:g=typeof u.is=="string"?T.createElement(m,{is:u.is}):T.createElement(m)}}g[Ms]=l,g[Ys]=u;e:for(T=l.child;T!==null;){if(T.tag===5||T.tag===6)g.appendChild(T.stateNode);else if(T.tag!==4&&T.tag!==27&&T.child!==null){T.child.return=T,T=T.child;continue}if(T===l)break e;for(;T.sibling===null;){if(T.return===null||T.return===l)break e;T=T.return}T.sibling.return=T.return,T=T.sibling}l.stateNode=g;e:switch(Js(g,m,u),m){case"button":case"input":case"select":case"textarea":u=!!u.autoFocus;break e;case"img":u=!0;break e;default:u=!1}u&&eo(l)}}return Hn(l),l.subtreeFlags&=-33554433,uk(l,l.type,n===null?null:n.memoizedProps,l.pendingProps,i),null;case 6:if(n&&l.stateNode!=null)n.memoizedProps!==u&&eo(l);else{if(typeof u!="string"&&l.stateNode===null)throw Error(o(166));if(n=Ae.current,yd(l)){if(n=l.stateNode,i=l.memoizedProps,u=null,m=Hs,m!==null)switch(m.tag){case 27:case 5:u=m.memoizedProps}n[Ms]=l,n=!!(n.nodeValue===i||u!==null&&u.suppressHydrationWarning===!0||r5(n.nodeValue,i)),n||ti(l,!0)}else n=Om(n).createTextNode(u),n[Ms]=l,l.stateNode=n}return Hn(l),null;case 31:if(i=l.memoizedState,n===null||n.memoizedState!==null){if(u=yd(l),i!==null){if(n===null){if(!u)throw Error(o(318));if(n=l.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(o(557));n[Ms]=l}else Rc(),(l.flags&128)===0&&(l.memoizedState=null),l.flags|=4;Hn(l),n=!1}else i=jN(),n!==null&&n.memoizedState!==null&&(n.memoizedState.hydrationErrors=i),n=!0;if(!n)return l.flags&256?(Xr(l),l):(Xr(l),null);if((l.flags&128)!==0)throw Error(o(558))}return Hn(l),null;case 13:if(u=l.memoizedState,n===null||n.memoizedState!==null&&n.memoizedState.dehydrated!==null){if(m=yd(l),u!==null&&u.dehydrated!==null){if(n===null){if(!m)throw Error(o(318));if(m=l.memoizedState,m=m!==null?m.dehydrated:null,!m)throw Error(o(317));m[Ms]=l}else Rc(),(l.flags&128)===0&&(l.memoizedState=null),l.flags|=4;Hn(l),m=!1}else m=jN(),n!==null&&n.memoizedState!==null&&(n.memoizedState.hydrationErrors=m),m=!0;if(!m)return l.flags&256?(Xr(l),l):(Xr(l),null)}return Xr(l),(l.flags&128)!==0?(l.lanes=i,l):(i=u!==null,n=n!==null&&n.memoizedState!==null,i&&(u=l.child,m=null,u.alternate!==null&&u.alternate.memoizedState!==null&&u.alternate.memoizedState.cachePool!==null&&(m=u.alternate.memoizedState.cachePool.pool),g=null,u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(g=u.memoizedState.cachePool.pool),g!==m&&(u.flags|=2048)),i!==n&&i&&(l.child.flags|=8192),Kb(l,l.updateQueue),Hn(l),null);case 4:return pe(),n===null&&qk(l.stateNode.containerInfo),l.flags|=67108864,Hn(l),null;case 10:return Ql(l.type),Hn(l),null;case 19:if(PN(l),u=l.memoizedState,u===null)return Hn(l),null;if(m=(l.flags&128)!==0,g=u.rendering,g===null)if(m)ym(u,!1);else{if(ds!==0||n!==null&&(n.flags&128)!==0)for(n=l.child;n!==null;){if(g=Mb(n),g!==null){for(l.flags|=128,ym(u,!1),n=g.updateQueue,l.updateQueue=n,Kb(l,n),l.subtreeFlags=0,n=i,i=l.child;i!==null;)M_(i,n),i=i.sibling;return hm(l,Zs.current&1|2),At&&Yl(l,u.treeForkCount),l.child}n=n.sibling}u.tail!==null&&$t()>av&&(l.flags|=128,m=!0,ym(u,!1),l.lanes=4194304)}else{if(!m)if(n=Mb(g),n!==null){if(l.flags|=128,m=!0,n=n.updateQueue,l.updateQueue=n,Kb(l,n),ym(u,!0),u.tail===null&&u.tailMode!=="collapsed"&&u.tailMode!=="visible"&&!g.alternate&&!At)return Hn(l),null}else 2*$t()-u.renderingStartTime>av&&i!==536870912&&(l.flags|=128,m=!0,ym(u,!1),l.lanes=4194304);u.isBackwards?(g.sibling=l.child,l.child=g):(n=u.last,n!==null?n.sibling=g:l.child=g,u.last=g)}if(u.tail!==null){n=u.tail;e:{for(i=n;i!==null;){if(i.alternate!==null){i=!1;break e}i=i.sibling}i=!0}return u.rendering=n,u.tail=n.sibling,u.renderingStartTime=$t(),n.sibling=null,g=Zs.current,g=m?g&1|2:g&1,u.tailMode==="visible"||u.tailMode==="collapsed"||!i||At?hm(l,g):(i=g,Se(Qs,l),Se(Zs,i),or===null&&(or=l)),At&&Yl(l,u.treeForkCount),n}return Hn(l),null;case 22:case 23:return Xr(l),DN(),u=l.memoizedState!==null,n!==null?n.memoizedState!==null!==u&&(l.flags|=8192):u&&(l.flags|=8192),u?(i&536870912)!==0&&(l.flags&128)===0&&(Hn(l),l.subtreeFlags&6&&(l.flags|=8192)):Hn(l),i=l.updateQueue,i!==null&&Kb(l,i.retryQueue),i=null,n!==null&&n.memoizedState!==null&&n.memoizedState.cachePool!==null&&(i=n.memoizedState.cachePool.pool),u=null,l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(u=l.memoizedState.cachePool.pool),u!==i&&(l.flags|=2048),n!==null&&de(Pc),null;case 24:return i=null,n!==null&&(i=n.memoizedState.cache),l.memoizedState.cache!==i&&(l.flags|=2048),Ql(js),Hn(l),null;case 25:return null;case 30:return l.flags|=33554432,Hn(l),null}throw Error(o(156,l.tag))}function Hne(n,l){switch(vN(l),l.tag){case 1:return n=l.flags,n&65536?(l.flags=n&-65537|128,l):null;case 3:return Ql(js),pe(),n=l.flags,(n&65536)!==0&&(n&128)===0?(l.flags=n&-65537|128,l):null;case 26:case 27:case 5:return Ne(l),null;case 31:if(l.memoizedState!==null){if(Xr(l),l.alternate===null)throw Error(o(340));Rc()}return n=l.flags,n&65536?(l.flags=n&-65537|128,l):null;case 13:if(Xr(l),n=l.memoizedState,n!==null&&n.dehydrated!==null){if(l.alternate===null)throw Error(o(340));Rc()}return n=l.flags,n&65536?(l.flags=n&-65537|128,l):null;case 19:return PN(l),n=l.flags,n&65536?(l.flags=n&-65537|128,n=l.memoizedState,n!==null&&(n.rendering=null,n.tail=null),l.flags|=4,l):null;case 4:return pe(),null;case 10:return Ql(l.type),null;case 22:case 23:return Xr(l),DN(),n!==null&&de(Pc),n=l.flags,n&65536?(l.flags=n&-65537|128,l):null;case 24:return Ql(js),null;case 25:return null;default:return null}}function l3(n,l){switch(vN(l),l.tag){case 3:Ql(js),pe();break;case 26:case 27:case 5:Ne(l);break;case 4:pe();break;case 31:l.memoizedState!==null&&Xr(l);break;case 13:Xr(l);break;case 19:PN(l);break;case 10:Ql(l.type);break;case 22:case 23:Xr(l),DN(),n!==null&&de(Pc);break;case 24:Ql(js)}}function jm(n,l){try{var i=l.updateQueue,u=i!==null?i.lastEffect:null;if(u!==null){var m=u.next;i=m;do{if((i.tag&n)===n){u=void 0;var g=i.create,T=i.inst;u=g(),T.destroy=u}i=i.next}while(i!==m)}}catch(V){bn(l,l.return,V)}}function ui(n,l,i){try{var u=l.updateQueue,m=u!==null?u.lastEffect:null;if(m!==null){var g=m.next;u=g;do{if((u.tag&n)===n){var T=u.inst,V=T.destroy;if(V!==void 0){T.destroy=void 0,m=l;var se=i,xe=V;try{xe()}catch(we){bn(m,se,we)}}}u=u.next}while(u!==g)}}catch(we){bn(l,l.return,we)}}function o3(n){var l=n.updateQueue;if(l!==null){var i=n.stateNode;try{Q_(l,i)}catch(u){bn(n,n.return,u)}}}function i3(n,l,i){i.props=Hc(n.type,n.memoizedProps),i.state=n.memoizedState;try{i.componentWillUnmount()}catch(u){bn(n,l,u)}}function cl(n,l){try{var i=n.ref;if(i!==null){switch(n.tag){case 26:case 27:case 5:var u=n.stateNode;break;case 30:var m=n.stateNode,g=ql(n.memoizedProps,m);(m.ref===null||m.ref.name!==g)&&(m.ref=h5(g)),u=m.ref;break;case 7:if(n.stateNode===null){var T=new ea(n);v(n.child,!1,Rse,T,void 0,void 0),n.stateNode=T}u=n.stateNode;break;default:u=n.stateNode}typeof i=="function"?n.refCleanup=i(u):i.current=u}}catch(V){bn(n,l,V)}}function Ws(n,l){var i=n.ref,u=n.refCleanup;if(i!==null)if(typeof u=="function")try{u()}catch(m){bn(n,l,m)}finally{n.refCleanup=null,n=n.alternate,n!=null&&(n.refCleanup=null)}else if(typeof i=="function")try{i(null)}catch(m){bn(n,l,m)}else i.current=null}function Yb(n,l){if((n.tag===5||n.tag===27||n.tag===6)&&n.alternate===null&&l!==null)for(var i=0;i title"))),Js(u,l,i),u[Ms]=n,ys(u),l=u;break e;case"link":if(g=M5("link","href",m).get(l+(i.href||""))){for(T=0;Tvt&&(T=vt,vt=We,We=T);var ge=y_(V,We),ie=y_(V,vt);if(ge&&ie&&(je.rangeCount!==1||je.anchorNode!==ge.node||je.anchorOffset!==ge.offset||je.focusNode!==ie.node||je.focusOffset!==ie.offset)){var ye=Re.createRange();ye.setStart(ge.node,ge.offset),je.removeAllRanges(),We>vt?(je.addRange(ye),je.extend(ie.node,ie.offset)):(ye.setEnd(ie.node,ie.offset),je.addRange(ye))}}}}for(Re=[],je=V;je=je.parentNode;)je.nodeType===1&&Re.push({element:je,left:je.scrollLeft,top:je.scrollTop});for(typeof V.focus=="function"&&V.focus(),V=0;Vi?32:i,ve.T=null,i=Ok,Ok=null;var g=Fa,T=hl;if(ts=0,$c=Fa=null,hl=0,(on&6)!==0)throw Error(o(331));var V=on;if(on|=4,O3(g.current),E3(g,g.current,T,i),on=V,Em(0,!1),en&&typeof en.onPostCommitFiberRoot=="function")try{en.onPostCommitFiberRoot(Dn,g)}catch{}return!0}finally{ee.p=m,ve.T=u,G3(n,l)}}function K3(n,l,i){l=xa(i,l),l=ek(n.stateNode,l,2),n=li(n,l,2),n!==null&&(Go(n,2),gl(n))}function bn(n,l,i){if(n.tag===3)K3(n,n,i);else for(;l!==null;){if(l.tag===3){K3(l,n,i);break}else if(l.tag===1){var u=l.stateNode;if(typeof l.type.getDerivedStateFromError=="function"||typeof u.componentDidCatch=="function"&&(mi===null||!mi.has(u))){n=xa(i,n),i=FL(2),u=li(l,i,2),u!==null&&($L(i,u,l,n),Go(u,2),gl(u));break}}l=l.return}}function zk(n,l,i){var u=n.pingCache;if(u===null){u=n.pingCache=new $ne;var m=new Set;u.set(l,m)}else m=u.get(l),m===void 0&&(m=new Set,u.set(l,m));m.has(i)||(Ek=!0,m.add(i),n=Wne.bind(null,n,l,i),l.then(n,n))}function Wne(n,l,i){var u=n.pingCache;u!==null&&u.delete(l),n.pingedLanes|=n.suspendedLanes&i,n.warmLanes&=~i,_n===n&&(Bt&i)===i&&((ds===4||ds===3&&(Bt&62914560)===Bt&&300>$t()-rv)&&(on&2)===0?Ld(n,0):sv|=i,Md===Bt&&(Md=0)),gl(n)}function Y3(n,l){l===0&&(l=mr()),n=Ec(n,l),n!==null&&(Go(n,l),gl(n))}function Jne(n){var l=n.memoizedState,i=0;l!==null&&(i=l.retryLane),Y3(n,i)}function ese(n,l){var i=0;switch(n.tag){case 31:case 13:var u=n.stateNode,m=n.memoizedState;m!==null&&(i=m.retryLane);break;case 19:u=n.stateNode;break;case 22:u=n.stateNode._retryCache;break;default:throw Error(o(314))}u!==null&&u.delete(l),Y3(n,i)}function tse(n,l){return ms(n,l)}var Bd=null,Hd=null,Bk=!1,fv=!1,Hk=!1,gi=0;function gl(n){n!==Hd&&n.next===null&&(Hd===null?Bd=Hd=n:Hd=Hd.next=n),fv=!0,Bk||(Bk=!0,sse())}function Em(n,l){if(!Hk&&fv){Hk=!0;do for(var i=!1,u=Bd;u!==null;){if(n!==0){var m=u.pendingLanes;if(m===0)var g=0;else{var T=u.suspendedLanes,V=u.pingedLanes;g=(1<<31-Et(42|n)+1)-1,g&=m&~(T&~V),g=g&201326741?g&201326741|1:g?g|2:0}g!==0&&(i=!0,W3(u,g))}else g=Bt,g=al(u,u===_n?g:0,u.cancelPendingCommit!==null||u.timeoutHandle!==-1),(g&3)===0||ln(u,g)||(i=!0,W3(u,g));u=u.next}while(i);Hk=!1}}function nse(){X3()}function X3(){fv=Bk=!1;var n=0;gi!==0&&mse()&&(n=gi);for(var l=$t(),i=null,u=Bd;u!==null;){var m=u.next,g=Q3(u,l);g===0?(u.next=null,i===null?Bd=m:i.next=m,m===null&&(Hd=i)):(i=u,(n!==0||(g&3)!==0)&&(fv=!0)),u=m}ts!==0&&ts!==5||Em(n),gi!==0&&(gi=0)}function Q3(n,l){for(var i=n.suspendedLanes,u=n.pingedLanes,m=n.expirationTimes,g=n.pendingLanes&-62914561;0V)break;var we=se.transferSize,Re=se.initiatorType;we&&a5(Re)&&(se=se.responseEnd,T+=we*(sexv){We.length=He;break}ye=new Promise(yse.bind(ye)),We.push(ye)}}}if(0"u"?null:document;function E5(n,l,i){var u=Vd;if(u&&typeof l=="string"&&l){var m=gr(l);m='link[rel="'+n+'"][href="'+m+'"]',typeof i=="string"&&(m+='[crossorigin="'+i+'"]'),T5.has(m)||(T5.add(m),n={rel:n,crossOrigin:i,href:l},u.querySelector(m)===null&&(l=u.createElement("link"),Js(l,"link",n),ys(l),u.head.appendChild(l)))}}function Bse(n){no.D(n),E5("dns-prefetch",n,null)}function Hse(n,l){no.C(n,l),E5("preconnect",n,l)}function Use(n,l,i){no.L(n,l,i);var u=Vd;if(u&&n&&l){var m='link[rel="preload"][as="'+gr(l)+'"]';l==="image"&&i&&i.imageSrcSet?(m+='[imagesrcset="'+gr(i.imageSrcSet)+'"]',typeof i.imageSizes=="string"&&(m+='[imagesizes="'+gr(i.imageSizes)+'"]')):m+='[href="'+gr(n)+'"]';var g=m;switch(l){case"style":g=Fd(n);break;case"script":g=$d(n)}if(!(Sa.has(g)||(n=I({rel:"preload",href:l==="image"&&i&&i.imageSrcSet?void 0:n,as:l},i),Sa.set(g,n),u.querySelector(m)!==null||l==="style"&&u.querySelector(Dm(g))||l==="script"&&u.querySelector(Im(g))))){var T=u.createElement("link");Js(T,"link",n),l==="style"&&(T[Ds]=!0,T.onload=T.onerror=function(){$p(T)}),ys(T),u.head.appendChild(T)}}}function Vse(n,l){no.m(n,l);var i=Vd;if(i&&n){var u=l&&typeof l.as=="string"?l.as:"script",m='link[rel="modulepreload"][as="'+gr(u)+'"][href="'+gr(n)+'"]',g=m;switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":g=$d(n)}if(!Sa.has(g)&&(n=I({rel:"modulepreload",href:n},l),Sa.set(g,n),i.querySelector(m)===null)){switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(i.querySelector(Im(g)))return}u=i.createElement("link"),Js(u,"link",n),ys(u),i.head.appendChild(u)}}}function Fse(n,l,i){no.S(n,l,i);var u=Vd;if(u&&n){var m=Qo(u).hoistableStyles,g=Fd(n);l=l||"default";var T=m.get(g);if(!T){var V={loading:0,preload:null};if(T=u.querySelector(Dm(g)))V.loading=5;else{n=I({rel:"stylesheet",href:n,"data-precedence":l},i),(i=Sa.get(g))&&oC(n,i);var se=T=u.createElement("link");ys(se),Js(se,"link",n),se._p=new Promise(function(xe,we){se.onload=xe,se.onerror=we}),se.addEventListener("load",function(){V.loading|=1}),se.addEventListener("error",function(){V.loading|=2}),V.loading|=4,hv(T,l,u)}T={type:"stylesheet",instance:T,count:1,state:V},m.set(g,T)}}}function $se(n,l){no.X(n,l);var i=Vd;if(i&&n){var u=Qo(i).hoistableScripts,m=$d(n),g=u.get(m);g||(g=i.querySelector(Im(m)),g||(n=I({src:n,async:!0},l),(l=Sa.get(m))&&iC(n,l),g=i.createElement("script"),ys(g),Js(g,"link",n),i.head.appendChild(g)),g={type:"script",instance:g,count:1,state:null},u.set(m,g))}}function qse(n,l){no.M(n,l);var i=Vd;if(i&&n){var u=Qo(i).hoistableScripts,m=$d(n),g=u.get(m);g||(g=i.querySelector(Im(m)),g||(n=I({src:n,async:!0,type:"module"},l),(l=Sa.get(m))&&iC(n,l),g=i.createElement("script"),ys(g),Js(g,"link",n),i.head.appendChild(g)),g={type:"script",instance:g,count:1,state:null},u.set(m,g))}}function A5(n,l,i,u){var m=(m=Ae.current)?Mm(m):null;if(!m)throw Error(o(446));switch(n){case"meta":case"title":return null;case"style":return typeof i.precedence=="string"&&typeof i.href=="string"?(i=Fd(i.href),l=Qo(m).hoistableStyles,u=l.get(i),u||(u={type:"style",instance:null,count:0,state:null},l.set(i,u)),u):{type:"void",instance:null,count:0,state:null};case"link":if(i.rel==="stylesheet"&&typeof i.href=="string"&&typeof i.precedence=="string"){n=Fd(i.href);var g=Qo(m).hoistableStyles,T=g.get(n);if(T||(m=m.ownerDocument||m,T={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},g.set(n,T),(g=m.querySelector(Dm(n)))?g._p||(T.instance=g,T.state.loading=5):(g=Sa.get(n),g||(g={rel:"preload",as:"style",href:i.href,crossOrigin:i.crossOrigin,integrity:i.integrity,media:i.media,hrefLang:i.hrefLang,referrerPolicy:i.referrerPolicy},Sa.set(n,g)),Gse(m,n,g,T.state))),l&&u===null)throw Error(o(528,""));return T}if(l&&u!==null)throw Error(o(529,""));return null;case"script":return l=i.async,i=i.src,typeof i=="string"&&l&&typeof l!="function"&&typeof l!="symbol"?(i=$d(i),l=Qo(m).hoistableScripts,u=l.get(i),u||(u={type:"script",instance:null,count:0,state:null},l.set(i,u)),u):{type:"void",instance:null,count:0,state:null};default:throw Error(o(444,n))}}function Fd(n){return'href="'+gr(n)+'"'}function Dm(n){return'link[rel="stylesheet"]['+n+"]"}function R5(n){return I({},n,{"data-precedence":n.precedence,precedence:null})}function Gse(n,l,i,u){if(l=n.querySelector('link[rel="preload"][as="style"]['+l+"]")){if(l[Ds]!==!0){u.loading=1;return}}else l=n.createElement("link"),l[Ds]=!0,l.onload=l.onerror=$p.bind(null,l),Js(l,"link",i),ys(l),n.head.appendChild(l);u.preload=l,l.addEventListener("load",function(){return u.loading|=1}),l.addEventListener("error",function(){return u.loading|=2})}function $d(n){return'[src="'+gr(n)+'"]'}function Im(n){return"script[async]"+n}function O5(n,l,i){if(l.count++,l.instance===null)switch(l.type){case"style":var u=n.querySelector('style[data-href~="'+gr(i.href)+'"]');if(u)return l.instance=u,ys(u),u;var m=I({},i,{"data-href":i.href,"data-precedence":i.precedence,href:null,precedence:null});return u=(n.ownerDocument||n).createElement("style"),ys(u),Js(u,"style",m),hv(u,i.precedence,n),l.instance=u;case"stylesheet":m=Fd(i.href);var g=n.querySelector(Dm(m));if(g)return l.state.loading|=4,l.instance=g,ys(g),g;u=R5(i),(m=Sa.get(m))&&oC(u,m),g=(n.ownerDocument||n).createElement("link"),ys(g);var T=g;return T._p=new Promise(function(V,se){T.onload=V,T.onerror=se}),Js(g,"link",u),l.state.loading|=4,hv(g,i.precedence,n),l.instance=g;case"script":return g=$d(i.src),(m=n.querySelector(Im(g)))?(l.instance=m,ys(m),m):(u=i,(m=Sa.get(g))&&(u=I({},i),iC(u,m)),n=n.ownerDocument||n,m=n.createElement("script"),ys(m),Js(m,"link",u),n.head.appendChild(m),l.instance=m);case"void":return null;default:throw Error(o(443,l.type))}else l.type==="stylesheet"&&(l.state.loading&4)===0&&(u=l.instance,l.state.loading|=4,hv(u,i.precedence,n));return l.instance}function hv(n,l,i){for(var u=i.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),m=u.length?u[u.length-1]:null,g=m,T=0;T title"):null)}function Kse(n,l,i){if(i===1||l.itemProp!=null)return!1;switch(n){case"meta":case"title":return!0;case"style":if(typeof l.precedence!="string"||typeof l.href!="string"||l.href==="")break;return!0;case"link":if(typeof l.rel!="string"||typeof l.href!="string"||l.href===""||l.onLoad||l.onError)break;return l.rel==="stylesheet"?(n=l.disabled,typeof l.precedence=="string"&&n==null):!0;case"script":if(l.async&&typeof l.async!="function"&&typeof l.async!="symbol"&&!l.onLoad&&!l.onError&&l.src&&typeof l.src=="string")return!0}return!1}function D5(n,l){return n==="img"&&l.src!=null&&l.src!==""&&l.onLoad==null&&l.loading!=="lazy"}function I5(n){return!(n.type==="stylesheet"&&(n.state.loading&3)===0)}function P5(n){return(n.width||100)*(n.height||100)*(typeof devicePixelRatio=="number"?devicePixelRatio:1)*.25}function _5(n,l){typeof l.decode=="function"&&(n.imgCount++,l.complete||(n.imgBytes+=P5(l),n.suspenseyImages.push(l)),n=Qse.bind(n),l.decode().then(n,n))}function Yse(n,l,i,u){if(i.type==="stylesheet"&&(typeof u.media!="string"||matchMedia(u.media).matches!==!1)&&(i.state.loading&4)===0){if(i.instance===null){var m=Fd(u.href),g=l.querySelector(Dm(m));if(g){l=g._p,l!==null&&typeof l=="object"&&typeof l.then=="function"&&(n.count++,n=Pm.bind(n),l.then(n,n)),i.state.loading|=4,i.instance=g,ys(g);return}g=l.ownerDocument||l,u=R5(u),(m=Sa.get(m))&&oC(u,m),g=g.createElement("link"),ys(g);var T=g;T._p=new Promise(function(V,se){T.onload=V,T.onerror=se}),Js(g,"link",u),i.instance=g}n.stylesheets===null&&(n.stylesheets=new Map),n.stylesheets.set(i,l),(l=i.state.preload)&&(i.state.loading&3)===0&&(n.count++,i=Pm.bind(n),l.addEventListener("load",i),l.addEventListener("error",i))}}var xv=0;function Xse(n,l){return n.stylesheets&&n.count===0&&vv(n,n.stylesheets),0xv?50:800)+l);return n.unsuspend=i,function(){n.unsuspend=null,clearTimeout(u),clearTimeout(m)}}:null}function L5(n){if(n.count===0&&(n.imgCount===0||!n.waitingForImages)){if(n.stylesheets)vv(n,n.stylesheets);else if(n.unsuspend){var l=n.unsuspend;n.unsuspend=null,l()}}}function Pm(){this.count--,L5(this)}function Qse(){this.imgCount--,L5(this)}var bv=null;function vv(n,l){n.stylesheets=null,n.unsuspend!==null&&(n.count++,bv=new Map,l.forEach(Zse,n),bv=null,Pm.call(n))}function Zse(n,l){if(!(l.state.loading&4)){var i=bv.get(n);if(i)var u=i.get(null);else{i=new Map,bv.set(n,i);for(var m=n.querySelectorAll("link[data-precedence],style[data-precedence]"),g=0;g"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),Ej.exports=I8(),Ej.exports}var jn=P8();const dg=[20,50,100,200],fg=[20,50,100,200,"all"],xu=50,VR="workbuddy-desktop-table-size:";function FR(e){return e==="all"?r("全部"):String(e)}function pg(e,t=fg,a=xu){t.includes(a)||(a=t.includes(xu)?xu:t[0]);let o=null;try{o=localStorage.getItem(VR+e)}catch{return a}if(o===null||o.trim()==="")return a;if(o==="all")return t.includes("all")?"all":a;const c=Number(o);return Number.isFinite(c)&&t.includes(c)?c:a}function mg(e,t){try{localStorage.setItem(VR+e,String(t))}catch{}}function hg(e,t,a={}){const o=a.sizes??fg,c=a.defaultSize??xu,[d,f]=x.useState(()=>pg(t,o,c)),[p,h]=x.useState(1),b=Math.max(1,d==="all"?1:Math.ceil(e/d)),y=Math.min(Math.max(1,p),b);x.useEffect(()=>{y!==p&&h(y)},[y,p]);const v=x.useCallback(k=>{f(k),mg(t,k),h(1)},[t]),j=x.useCallback(k=>{h(Math.min(Math.max(1,Math.round(k)||1),b))},[b]),w=d==="all"?0:(y-1)*d,S=d==="all"?e:Math.min(e,w+d),N=x.useCallback(k=>d==="all"?k.slice():k.slice(w,S),[d,w,S]);return{size:d,page:y,pageCount:b,rangeStart:e?w+1:0,rangeEnd:e?S:0,paged:d!=="all",setSize:v,goto:j,slice:N}}function $i({total:e,page:t,pageCount:a,size:o,sizes:c=fg,onSizeChange:d,onPageChange:f,range:p=null,disabled:h=!1,leading:b,className:y}){const[v,j]=x.useState(String(t));x.useEffect(()=>j(String(t)),[t]);const w=()=>{const k=v.trim();if(!k){j(String(t));return}const A=Number(k);if(!Number.isFinite(A)){j(String(t));return}const P=Math.min(Math.max(1,Math.round(A)),a);j(String(P)),P!==t&&f(P)},S=a<=1,N=e===0?r("共 0 条"):p?r("共 {total} 条 · 当前第 {start}–{end} 条",{total:e,start:p.start,end:p.end}):r("共 {total} 条(全部显示)",{total:e});return s.jsxs("div",{className:y?`panel-foot table-foot-bar ${y}`:"panel-foot table-foot-bar",children:[b,s.jsx("div",{className:"spacer"}),s.jsxs("div",{className:"table-foot-ctl",children:[s.jsx("span",{className:"table-foot-count",children:N}),s.jsxs("span",{className:"table-foot-size",children:[r("每页"),s.jsxs(ut,{value:String(o),onValueChange:k=>d(k==="all"?"all":Number(k)),children:[s.jsx(ft,{className:"h-[26px] w-[86px]",disabled:h,"aria-label":r("每页条数"),children:s.jsx(dt,{children:FR(o)})}),s.jsx(pt,{children:c.map(k=>s.jsx($e,{value:String(k),children:FR(k)},String(k)))})]}),r("条")]}),s.jsxs("span",{className:"table-foot-jump",children:[r("跳至"),s.jsx(Fe,{className:"h-[26px] w-[52px] px-1 text-center",value:v,disabled:h||S,"aria-label":r("跳转到指定页"),title:S?r("当前只有一页"):r("跳转到第 1–{pageCount} 页",{pageCount:a}),inputMode:"numeric",onChange:k=>j(k.target.value),onKeyDown:k=>{k.key==="Enter"?(k.preventDefault(),w()):k.key==="Escape"&&j(String(t))},onBlur:w}),r("页")]}),s.jsx(K6,{page:t,pageCount:a,onPageChange:f,disabled:h})]})]})}const Oj=[{key:"pick",label:r("选择"),align:"center",legacyAlign:"left"},{key:"order",label:r("顺序"),title:r("组内先后:按住左边的把手上下拖动即可调整;整组的先后拖分组带的把手"),align:"center",legacyAlign:"left"},{key:"account",label:r("账号"),align:"center",legacyAlign:"left"},{key:"proxy",label:r("代理"),title:r("该账号出网走的代理(Clash 出口 / 自定义 / 直连);点击可修改"),align:"center"},{key:"connections",label:r("连接数"),title:r("此刻正在使用这个账号的请求数(含还在下发内容的流式请求);为 0 时不显示"),align:"center"},{key:"status",label:r("状态"),align:"center",legacyAlign:"left"},{key:"limits",label:r("限流"),title:r("该账号当前限流中的模型;点徽章看明细"),align:"center",legacyAlign:"left"},{key:"expiry",label:r("有效期"),align:"center",legacyAlign:"left"},{key:"usage",label:r("余额"),align:"center",legacyAlign:"left"},{key:"actions",label:r("操作"),align:"right"}],$R="agent2api-accounts-col-widths",If={pick:47,order:84,proxy:186,connections:56,status:80,limits:148,expiry:80,usage:148,actions:200},Mj=new Set(["account"]),_8=300,Dj=56,L8=new Set([...Object.keys(If),...Mj]),bu=(()=>{try{const e=JSON.parse(localStorage.getItem($R)||"{}"),t={};for(const[a,o]of Object.entries(e||{})){const c=Number(o);L8.has(a)&&Number.isFinite(c)&&c>=Dj&&(t[a]=Math.round(c))}return t}catch{return{}}})();function qR(){try{localStorage.setItem($R,JSON.stringify(bu))}catch{}}function z8(){return{...If,...bu}}function B8(e){let t=0;for(const a of e){const o=bu[a];o?t+=o:Mj.has(a)?t+=_8:If[a]?t+=If[a]:t+=Dj}return Math.round(t)}function GR(e,t){const a=e?.querySelector(`thead th:nth-child(${t+1})`),o=a?.getAttribute("data-col")||a?.className.match(/cell-([a-z]+)/)?.[1];if(!o)return null;const c=e?.querySelector(`colgroup col[data-col="${CSS.escape(o)}"]`)||e?.querySelectorAll("colgroup col")[t];return c?{key:o,col:c}:null}function H8(e,t,a){const o=Math.max(Dj,Math.round(a));e.style.width=o+"px",Mj.has(t)||o!==If[t]?bu[t]=o:delete bu[t]}let Ij=()=>{};function U8(e,t){if(Ij=t,!e)return;let a=null;e.addEventListener("pointerdown",o=>{if(o.button!==0)return;const c=o.target?.closest?.(".col-grip");if(!c)return;o.preventDefault();const d=c.closest("th"),f=d?.closest("table")||null,p=d?.parentElement?[...d.parentElement.children].indexOf(d):-1,h=GR(f,p);if(!h)return;const b=o.clientX,y=h.col.getBoundingClientRect().width;c.classList.add("active"),document.body.classList.add("col-resizing");try{c.setPointerCapture(o.pointerId)}catch{}a={...h,startX:b,startWidth:y,grip:c,pointerId:o.pointerId},window.addEventListener("pointermove",v),window.addEventListener("pointerup",j),window.addEventListener("pointercancel",j),window.addEventListener("blur",j);function v(w){if(a){if(w.buttons===0){j();return}H8(a.col,a.key,a.startWidth+w.clientX-a.startX)}}function j(){if(!a)return;const{grip:w,pointerId:S}=a;a=null,w.classList.remove("active"),document.body.classList.remove("col-resizing");try{w.releasePointerCapture(S)}catch{}window.removeEventListener("pointermove",v),window.removeEventListener("pointerup",j),window.removeEventListener("pointercancel",j),window.removeEventListener("blur",j),qR(),Ij()}}),e.addEventListener("dblclick",o=>{const c=o.target?.closest?.(".col-grip");if(!c)return;const d=c.closest("th"),f=d?.closest("table")||null,p=d?.parentElement?[...d.parentElement.children].indexOf(d):-1,h=GR(f,p);h&&(delete bu[h.key],qR(),Ij())})}function gt(){return window}function Ln(e,t){gt().wbApp?.toast?.(e,t)}function ko(e){return e instanceof Error&&e.message?e.message:String(e??"").trim()||r("未知错误")}function Pj(e){return(gt().wbApp?.getState?.()?.accounts?.accounts||[]).filter(a=>(a?.provider||"workbuddy")===e).length}function KR(e){const t=e?.name||"";if(t)return(gt().wbProviders?.customList?.()||[]).find(a=>(a.name||"")===t)}function V8(e){const t=e?.name||"";return t?(gt().wbPresetProviders?.list||[]).some(a=>a.name===t):!1}async function vu(e){const t=gt().__TAURI_INTERNALS__;if(!t||typeof t.invoke!="function")throw new Error(r("桌面运行时不可用(Tauri 未初始化)"));return t.invoke("api_request",{request:{method:"POST",path:"/api/accounts",body:e}})}function Pf(e){return e?.name||e?.uid||e?.userId||""}function _j(){gt().wbAddAccountModal?.close?.()}async function Co(e,t){_j(),await gt().wbApp?.refresh?.(),Ln(r("✅ {label}账号已添加{name}",{label:t,name:e?`:${e}`:""}))}const yu=new Map;function _r(e){return{defaultValue:yu.get(e)??"",onChange:t=>{const a=t.currentTarget.value;a?yu.set(e,a):yu.delete(e)}}}function To(e,t){t?yu.set(e,t):yu.delete(e);const a=document.getElementById(e);(a instanceof HTMLInputElement||a instanceof HTMLTextAreaElement)&&(a.value=t)}function dr(e){const t=document.getElementById(e);return t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement?t.value.trim():(yu.get(e)??"").trim()}function Lj(e){for(const t of e)To(t,"")}const qi={edition:"cn",loginMode:"embedded",socialRestore:!1},zj=100,F8=256,$8=e=>e.key==="name"?zj:F8,q8={provider:"raccoon",label:"小浣熊",addButton:r("添加小浣熊账号"),webLogin:{noteHtml:r("在