Files
yattee/Yattee/Views/Player/Gestures/GestureSeekPreviewView.swift
2026-02-08 18:33:56 +01:00

74 lines
1.8 KiB
Swift

//
// GestureSeekPreviewView.swift
// Yattee
//
// Seek preview overlay shown during drag-to-seek gesture.
//
#if os(iOS)
import SwiftUI
/// Preview overlay shown during drag-to-seek gesture.
/// Shows only the storyboard thumbnail with timestamp overlay.
struct GestureSeekPreviewView: View {
let storyboard: Storyboard?
let currentTime: TimeInterval
let seekTime: TimeInterval
let duration: TimeInterval
let storyboardService: StoryboardService
let buttonBackground: ButtonBackgroundStyle
let theme: ControlsTheme
let chapters: [VideoChapter]
let isActive: Bool
@State private var opacity: Double = 0
var body: some View {
Group {
// Only show if storyboard is available
if let storyboard {
SeekPreviewView(
storyboard: storyboard,
seekTime: seekTime,
storyboardService: storyboardService,
buttonBackground: buttonBackground,
theme: theme,
chapters: chapters
)
}
}
.opacity(opacity)
.onChange(of: isActive) { _, active in
withAnimation(.easeInOut(duration: 0.2)) {
opacity = active ? 1 : 0
}
}
.onAppear {
if isActive {
withAnimation(.easeOut(duration: 0.15)) {
opacity = 1
}
}
}
}
}
#Preview {
ZStack {
Color.black
GestureSeekPreviewView(
storyboard: nil,
currentTime: 120,
seekTime: 180,
duration: 600,
storyboardService: StoryboardService(),
buttonBackground: .regularGlass,
theme: .dark,
chapters: [],
isActive: true
)
}
}
#endif