import AppKit extension StatusItemController { func addStackedCodexMenuCards( _ display: CodexAccountMenuDisplay, to menu: NSMenu, context: MenuCardContext) { let snapshotsByAccountID = Dictionary(uniqueKeysWithValues: display.snapshots.map { ($0.account.id, $0) }) var cardIndex = 0 let sections = display.showsWorkspaceGroups ? display.workspaceSections : [ CodexAccountWorkspaceSection(title: "", accounts: display.accounts), ] for (sectionIndex, section) in sections.enumerated() { if display.showsWorkspaceGroups { self.addCodexWorkspaceHeader(section.title, index: sectionIndex, to: menu) } for account in section.accounts { let accountSnapshot = snapshotsByAccountID[account.id] let health = CodexAccountHealth.status(for: account, error: accountSnapshot?.error) let model = self.menuCardModel( for: .codex, snapshotOverride: accountSnapshot?.snapshot, errorOverride: health.label, forceOverrideCard: accountSnapshot == nil, accountOverride: self.accountInfo(for: account)) guard let model else { continue } menu.addItem(self.makeMenuCardItem( UsageMenuCardView(model: model, width: context.menuWidth), id: "menuCard-\(cardIndex)", width: context.menuWidth, heightCacheScope: account.id, heightCacheFingerprint: model.heightFingerprint(section: "card"), containsInteractiveControls: true)) cardIndex += 1 if account.id != section.accounts.last?.id { menu.addItem(.separator()) } } if sectionIndex < sections.count - 1 { menu.addItem(.separator()) } } if cardIndex == 0, let model = self.menuCardModel(for: context.selectedProvider) { menu.addItem(self.makeMenuCardItem( UsageMenuCardView(model: model, width: context.menuWidth), id: "menuCard", width: context.menuWidth, heightCacheScope: context.currentProvider.rawValue, heightCacheFingerprint: model.heightFingerprint(section: "card"), containsInteractiveControls: true)) } menu.addItem(.separator()) if self.addStorageMenuCardSection(to: menu, provider: context.currentProvider, width: context.menuWidth) { menu.addItem(.separator()) } } private func addCodexWorkspaceHeader(_ title: String, index: Int, to menu: NSMenu) { let header = NSMenuItem(title: title, action: nil, keyEquivalent: "") header.isEnabled = false header.representedObject = "codexWorkspace-\(index)" let font = NSFont.systemFont(ofSize: NSFont.smallSystemFontSize, weight: .semibold) header.attributedTitle = NSAttributedString( string: title, attributes: [.font: font, .foregroundColor: NSColor.secondaryLabelColor]) menu.addItem(header) }}
import AppKit
extension StatusItemController {
func addStackedCodexMenuCards(
_ display: CodexAccountMenuDisplay,
to menu: NSMenu,
context: MenuCardContext)
{
let snapshotsByAccountID = Dictionary(uniqueKeysWithValues: display.snapshots.map {
($0.account.id, $0)
})
var cardIndex = 0
let sections = display.showsWorkspaceGroups ? display.workspaceSections : [
CodexAccountWorkspaceSection(title: "", accounts: display.accounts),
]
for (sectionIndex, section) in sections.enumerated() {
if display.showsWorkspaceGroups {
self.addCodexWorkspaceHeader(section.title, index: sectionIndex, to: menu)
}
for account in section.accounts {
let accountSnapshot = snapshotsByAccountID[account.id]
let health = CodexAccountHealth.status(for: account, error: accountSnapshot?.error)
let model = self.menuCardModel(
for: .codex,
snapshotOverride: accountSnapshot?.snapshot,
errorOverride: health.label,
forceOverrideCard: accountSnapshot == nil,
accountOverride: self.accountInfo(for: account))
guard let model else { continue }
menu.addItem(self.makeMenuCardItem(
UsageMenuCardView(model: model, width: context.menuWidth),
id: "menuCard-\(cardIndex)",
width: context.menuWidth,
heightCacheScope: account.id,
heightCacheFingerprint: model.heightFingerprint(section: "card"),
containsInteractiveControls: true))
cardIndex += 1
if account.id != section.accounts.last?.id {
menu.addItem(.separator())
}
}
if sectionIndex < sections.count - 1 {
menu.addItem(.separator())
}
}
if cardIndex == 0, let model = self.menuCardModel(for: context.selectedProvider) {
menu.addItem(self.makeMenuCardItem(
UsageMenuCardView(model: model, width: context.menuWidth),
id: "menuCard",
width: context.menuWidth,
heightCacheScope: context.currentProvider.rawValue,
heightCacheFingerprint: model.heightFingerprint(section: "card"),
containsInteractiveControls: true))
}
menu.addItem(.separator())
if self.addStorageMenuCardSection(to: menu, provider: context.currentProvider, width: context.menuWidth) {
menu.addItem(.separator())
}
}
private func addCodexWorkspaceHeader(_ title: String, index: Int, to menu: NSMenu) {
let header = NSMenuItem(title: title, action: nil, keyEquivalent: "")
header.isEnabled = false
header.representedObject = "codexWorkspace-\(index)"
let font = NSFont.systemFont(ofSize: NSFont.smallSystemFontSize, weight: .semibold)
header.attributedTitle = NSAttributedString(
string: title,
attributes: [.font: font, .foregroundColor: NSColor.secondaryLabelColor])
menu.addItem(header)
}
}