54 lines
1.5 KiB
Rust
54 lines
1.5 KiB
Rust
#[cfg(not(target_arch = "wasm32"))]
|
|
pub mod model;
|
|
#[cfg(not(target_arch = "wasm32"))]
|
|
mod parakeet;
|
|
#[cfg(target_arch = "wasm32")]
|
|
mod web;
|
|
|
|
use std::time::Duration;
|
|
|
|
use gpui::{
|
|
Animation, AnimationExt as _, AnyElement, App, IntoElement as _, ParentElement as _,
|
|
Styled as _, div,
|
|
};
|
|
use gpui_kit::component::ActiveTheme as _;
|
|
use gpui_kit::component::speech::SpeechRecognizer;
|
|
|
|
/// A ticking `M:SS` counter for the dictation in progress.
|
|
pub fn elapsed(started: instant::Instant, cx: &App) -> AnyElement {
|
|
div()
|
|
.text_xs()
|
|
.text_color(cx.theme().muted_foreground)
|
|
.with_animation(
|
|
"dictation-elapsed",
|
|
Animation::new(Duration::from_secs(1))
|
|
.repeat()
|
|
.with_max_fps(1.),
|
|
move |counter, _| counter.child(format_elapsed(started)),
|
|
)
|
|
.into_any_element()
|
|
}
|
|
|
|
fn format_elapsed(started: instant::Instant) -> String {
|
|
let seconds = started.elapsed().as_secs();
|
|
format!("{}:{:02}", seconds / 60, seconds % 60)
|
|
}
|
|
|
|
/// The recognizer backing the composer's microphone button.
|
|
#[cfg(not(target_arch = "wasm32"))]
|
|
pub fn recognizer() -> impl SpeechRecognizer {
|
|
parakeet::ParakeetRecognizer
|
|
}
|
|
|
|
/// The recognizer backing the composer's microphone button.
|
|
#[cfg(target_arch = "wasm32")]
|
|
pub fn recognizer() -> impl SpeechRecognizer {
|
|
web::WebSpeechRecognizer
|
|
}
|
|
|
|
/// The audio source backing the composer's microphone button on the web.
|
|
#[cfg(target_arch = "wasm32")]
|
|
pub fn input() -> impl gpui_kit::component::speech::AudioInput {
|
|
web::SelfCapturedInput
|
|
}
|