import SwiftUI #if canImport(SafariServices) && canImport(UIKit) import SafariServices import UIKit #endif /// In-App-Browser für die Druck-Ansicht des Decks. Nutzt /// `SFSafariViewController`, weil iOS dort die Print-Sheet und /// „In Dateien speichern" → PDF von Haus aus mitbringt — kein eigener /// PDF-Renderer in der App nötig. /// /// Auth-Cookies für `cardecky.mana.how` werden geteilt mit Safari auf /// dem Gerät; der User muss dort eingeloggt sein, damit die Print- /// Seite den Deck-Inhalt rendert. struct DeckPrintView: View { let deckId: String @Environment(\.dismiss) private var dismiss private var printURL: URL { URL(string: "https://cardecky.mana.how/decks/\(deckId)/print")! } var body: some View { #if canImport(SafariServices) && canImport(UIKit) SafariViewRepresentable(url: printURL) .ignoresSafeArea() #else VStack(spacing: 16) { Text("Druck-Ansicht ist nur auf iOS verfügbar.") .font(.subheadline) Link("Im Web öffnen", destination: printURL) Button("Schließen") { dismiss() } } .padding(32) #endif } } #if canImport(SafariServices) && canImport(UIKit) private struct SafariViewRepresentable: UIViewControllerRepresentable { let url: URL func makeUIViewController(context _: Context) -> SFSafariViewController { let config = SFSafariViewController.Configuration() config.entersReaderIfAvailable = false let controller = SFSafariViewController(url: url, configuration: config) controller.preferredControlTintColor = .systemGreen controller.dismissButtonStyle = .close return controller } func updateUIViewController(_: SFSafariViewController, context _: Context) {} } #endif