diff --git a/Sources/AgentBar/Localization/I18n.swift b/Sources/AgentBar/Localization/I18n.swift index 411a48c..a145922 100644 --- a/Sources/AgentBar/Localization/I18n.swift +++ b/Sources/AgentBar/Localization/I18n.swift @@ -38,7 +38,6 @@ enum I18n { let missingTokenUsageResult: String let missingWeeklyQuotaWindow: String let availableResetCredits: String - let resetCreditDefaultTitle: String let resetCreditNeverExpires: String let resetCreditDetailsUnavailable: String let noAvailableResetCredits: String @@ -151,9 +150,9 @@ enum I18n { func resetCreditExpiresOn(_ dateText: String) -> String { switch I18n.language { case .simplifiedChinese: - return "将于 \(dateText) 到期" + return "\(dateText) 到期" case .english: - return "Expires on \(dateText)" + return "Expires \(dateText)" } } @@ -253,7 +252,6 @@ enum I18n { missingTokenUsageResult: "Missing token usage result.", missingWeeklyQuotaWindow: "The weekly quota window was not returned.", availableResetCredits: "Available resets:", - resetCreditDefaultTitle: "Rate-limit reset", resetCreditNeverExpires: "Does not expire", resetCreditDetailsUnavailable: "Details unavailable", noAvailableResetCredits: "No reset credits available", @@ -298,7 +296,6 @@ enum I18n { missingTokenUsageResult: "缺少 token 消耗结果。", missingWeeklyQuotaWindow: "未返回周额度窗口。", availableResetCredits: "可用重置次数:", - resetCreditDefaultTitle: "额度重置", resetCreditNeverExpires: "不会到期", resetCreditDetailsUnavailable: "暂无重置详情", noAvailableResetCredits: "暂无可用重置次数", diff --git a/Sources/AgentBar/UI/QuotaPopoverView.swift b/Sources/AgentBar/UI/QuotaPopoverView.swift index 586e2fc..870c174 100644 --- a/Sources/AgentBar/UI/QuotaPopoverView.swift +++ b/Sources/AgentBar/UI/QuotaPopoverView.swift @@ -613,7 +613,7 @@ private final class ResetCreditsHoverAnchorView: NSView { private enum ResetCreditsMenuLayout { static let width: CGFloat = 210 - static let rowHeight: CGFloat = 68 + static let rowHeight: CGFloat = 28 static let maxVisibleRows = 6 static func height( @@ -638,6 +638,8 @@ private struct ResetCreditsDetailMenuView: View { let availableCount: Int? let credits: [RateLimitResetCredit]? + private static let fullResetTitle = "Full reset" + var body: some View { ScrollView { LazyVStack(spacing: 0) { @@ -668,7 +670,7 @@ private struct ResetCreditsDetailMenuView: View { var rows = credits.map { credit in ResetCreditMenuRow( id: credit.id, - title: credit.title ?? I18n.current.resetCreditDefaultTitle, + title: Self.fullResetTitle, subtitle: credit.expiresAt.map(expirationText) ?? I18n.current.resetCreditNeverExpires ) } @@ -729,21 +731,25 @@ private struct ResetCreditDetailRow: View { let row: ResetCreditMenuRow var body: some View { - VStack(alignment: .leading, spacing: 5) { + HStack(spacing: 8) { Text(row.title) .font(.system(size: 13, weight: .medium)) .foregroundStyle(QuotaPopoverColors.primaryText) .lineLimit(1) .truncationMode(.tail) + Spacer(minLength: 8) + if let subtitle = row.subtitle { Text(subtitle) .font(.system(size: 13, weight: .medium)) .foregroundStyle(QuotaPopoverColors.mutedText) .lineLimit(1) + .monospacedDigit() + .layoutPriority(1) } } - .frame(maxWidth: .infinity, minHeight: ResetCreditsMenuLayout.rowHeight, alignment: .leading) + .frame(maxWidth: .infinity, minHeight: ResetCreditsMenuLayout.rowHeight) .padding(.horizontal, 16) } }