// // View+Extensions.swift // oAI // // SwiftUI view helpers and modifiers // // SPDX-License-Identifier: AGPL-3.0-or-later // Copyright (C) 2026 Rune Olsen // // This file is part of oAI. // // oAI is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // oAI is distributed in the hope that it will be useful, but WITHOUT // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General // Public License for more details. // // You should have received a copy of the GNU Affero General Public // License along with oAI. If not, see . import SwiftUI extension View { // MARK: - Conditional Modifiers @ViewBuilder func `if`(_ condition: Bool, transform: (Self) -> Transform) -> some View { if condition { transform(self) } else { self } } @ViewBuilder func ifLet(_ value: Value?, transform: (Self, Value) -> Transform) -> some View { if let value = value { transform(self, value) } else { self } } // MARK: - Platform-Specific Helpers #if os(macOS) func onCommandReturn(perform action: @escaping () -> Void) -> some View { self // Note: onKeyPress modifiers don't work in command-line Swift build // This will be implemented when running in actual Xcode project // For now, using keyboard shortcuts in toolbar instead } #endif // MARK: - Common Styling func oaiCardStyle() -> some View { self .background(Color.oaiSurface) .cornerRadius(8) .overlay( RoundedRectangle(cornerRadius: 8) .stroke(Color.oaiBorder, lineWidth: 1) ) } func oaiButton() -> some View { self .padding(.horizontal, 12) .padding(.vertical, 6) .background(Color.oaiSurface) .foregroundColor(.oaiPrimary) .cornerRadius(6) } func oaiTextField() -> some View { self .padding(8) .background(Color.oaiBackground) .cornerRadius(6) .overlay( RoundedRectangle(cornerRadius: 6) .stroke(Color.oaiBorder, lineWidth: 1) ) } } // MARK: - Frame Helpers extension View { func frame(square size: CGFloat) -> some View { self.frame(width: size, height: size) } }