mirror of
https://github.com/samsonjs/vibetunnel.git
synced 2026-04-11 12:15:53 +00:00
56 lines
1.7 KiB
Swift
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")
|
|
}
|
|
}
|
|
}
|