pub fn format_duration(ms: u64) -> String {
if ms < 1000 {
format!("{}ms", ms)
} else if ms < 60000 {
format!("{:.1}s", ms as f64 / 1000.0)
} else {
let minutes = ms / 60000;
let seconds = (ms % 60000) / 1000;
format!("{}m {}s", minutes, seconds)
}
}
pub fn format_relative_time(timestamp: &str) -> String {
timestamp.to_string()
}
pub fn truncate(s: &str, max_len: usize) -> String {
if s.len() <= max_len {
s.to_string()
} else {
format!("{}...", &s[..max_len.saturating_sub(3)])
}
}
pub async fn copy_to_clipboard(text: &str) -> Result<(), String> {
let window = web_sys::window().ok_or("No window")?;
let navigator = window.navigator();
let clipboard = navigator.clipboard();
wasm_bindgen_futures::JsFuture::from(clipboard.write_text(text))
.await
.map_err(|_| "Failed to copy to clipboard")?;
Ok(())
}