feat: shimmering transcribe button (#50)

This commit is contained in:
Owen Gretzinger
2025-08-05 11:56:15 -04:00
committed by GitHub
parent fb827dec2c
commit ef429ddcc9
2 changed files with 21 additions and 2 deletions
@@ -33,6 +33,11 @@ class MeetingViewModel: ObservableObject {
return generateButtonEnabled && noEnhancedNotesYet
}
// Computed property to determine if Transcribe button should animate
var shouldAnimateTranscribeButton: Bool {
return !isRecording && meeting.transcriptChunks.isEmpty && !isStartingRecording
}
// Computed property that always uses the direct RecordingSessionManager check
var isRecording: Bool {
return recordingSessionManager.isRecordingMeeting(meeting.id)
+16 -2
View File
@@ -314,7 +314,7 @@ struct MeetingDetailContentView: View {
// Shimmer overlay when ready
Group {
if viewModel.shouldAnimateGenerateButton {
ShimmerOverlay()
ShimmerOverlay(color: .green)
.clipShape(RoundedRectangle(cornerRadius: 8))
}
}
@@ -336,6 +336,15 @@ struct MeetingDetailContentView: View {
.frame(minWidth: 110, minHeight: 36)
.background(viewModel.isRecording ? Color.red.opacity(0.1) : Color.accentColor.opacity(0.1))
.cornerRadius(8)
.overlay(
// Shimmer overlay when ready to transcribe
Group {
if viewModel.shouldAnimateTranscribeButton {
ShimmerOverlay(color: .accentColor)
.clipShape(RoundedRectangle(cornerRadius: 8))
}
}
)
}
.buttonStyle(.plain)
.disabled(cannotStartRecording || viewModel.isValidatingKey || viewModel.isStartingRecording)
@@ -504,6 +513,11 @@ struct MeetingDetailContentView: View {
// MARK: - Shimmer Overlay
struct ShimmerOverlay: View {
@State private var animate: Bool = false
let color: Color
init(color: Color = .green) {
self.color = color
}
var body: some View {
GeometryReader { geo in
@@ -512,7 +526,7 @@ struct ShimmerOverlay: View {
RoundedRectangle(cornerRadius: 8)
.fill(
LinearGradient(
gradient: Gradient(colors: [Color.clear, Color.green.opacity(0.1), Color.clear]),
gradient: Gradient(colors: [Color.clear, color.opacity(0.1), Color.clear]),
startPoint: UnitPoint(x: animate ? 2.5 : -1, y: 0.5),
endPoint: UnitPoint(x: animate ? 3.5 : 0, y: 0.5)
)