vibetunnel/ios/VibeTunnel/Views/Terminal/FileBrowserFAB.swift
2025-06-23 14:58:11 +02:00

56 lines
1.7 KiB
Swift

import SwiftUI
private let logger = Logger(category: "FileBrowserFAB")
/// Floating action button for opening file browser
struct FileBrowserFAB: View {
let isVisible: Bool
let action: () -> Void
var body: some View {
Button(action: {
Task { @MainActor in
HapticFeedback.impact(.medium)
}
action()
}, label: {
Image(systemName: "folder.fill")
.font(.system(size: 20, weight: .medium))
.foregroundColor(Theme.Colors.terminalBackground)
.frame(width: 56, height: 56)
.background(
Circle()
.fill(Theme.Colors.primaryAccent)
.overlay(
Circle()
.stroke(Theme.Colors.primaryAccent.opacity(0.3), lineWidth: 1)
)
)
.shadow(color: .black.opacity(0.3), radius: 8, x: 0, y: 4)
})
.opacity(isVisible ? 1 : 0)
.scaleEffect(isVisible ? 1 : 0.8)
.animation(Theme.Animation.smooth, value: isVisible)
.allowsHitTesting(isVisible)
}
}
// Note: Use FileBrowserFAB directly with overlay instead of this extension
// Example:
// .overlay(
// FileBrowserFAB(isVisible: showFAB, action: { })
// .padding(.bottom, Theme.Spacing.extraLarge)
// .padding(.trailing, Theme.Spacing.large),
// alignment: .bottomTrailing
// )
#Preview {
ZStack {
Theme.Colors.terminalBackground
.ignoresSafeArea()
FileBrowserFAB(isVisible: true) {
logger.debug("Open file browser")
}
}
}