#if os(macOS) import Foundation import Observation import RastrilloApple import SwiftUI /// Scene values are opaque IDs, never credentials. Reserve before opening a scene. @MainActor @Observable final class SheetsWindows { struct Entry: Identifiable { let id: UUID let account: String let document: UInt64 let client: NativeHTTP var title: String var isOpen = false } var entries: [Entry] = [] var activeAccount: String? var createRequested = false var accountsRequested = false func reserve(account: String, document: UInt64, title: String, client: NativeHTTP) -> UUID { if let index = entries.firstIndex(where: { $0.account == account && $0.client.origin == client.origin && $0.document == document }) { var entry = entries.remove(at: index) entry.title = title entry.isOpen = true entries.insert(entry, at: 0) return entry.id } let entry = Entry(id: UUID(), account: account, document: document, client: client, title: title, isOpen: true) entries.insert(entry, at: 0) return entry.id } func updateRecents(_ documents: [(UInt64, String)], account: String, client: NativeHTTP) { for (document, title) in documents { if let index = entries.firstIndex(where: { $0.account == account && $0.client.origin == client.origin && $0.document == document }) { entries[index].title = title } else { entries.append(Entry(id: UUID(), account: account, document: document, client: client, title: title)) } } } func setOpen(_ id: UUID, _ value: Bool) { if let index = entries.firstIndex(where: { $0.id == id }) { entries[index].isOpen = value } } func canSignOut(_ account: String?) -> Bool { !entries.contains { $0.account == account && $0.isOpen } } } extension FocusedValues { @Entry var sheetsWindowAccount: String? } #endif