Opinionated, component-based TUI framework for Rust - declarative components, reconciliation, layout engine, focus, overlays, and rich widgets on top of ratatui.
useunicode_width::UnicodeWidthStr;usecrate::widgets::Input;pub(crate)fnmeasure_input(input:&Input)->(u16, u16){let value = input.value.as_ref();let value_w =UnicodeWidthStr::width(value.lines().next().unwrap_or(""));let ph_w = input
.placeholder
.as_ref().map(|ph|UnicodeWidthStr::width(ph.lines().next().unwrap_or(""))).unwrap_or(0);let cursor_w =if input.focusable {1}else{0};letmut w = ph_w.max(value_w.saturating_add(cursor_w));ifletSome(prefix)=&input.prefix {
w = w.saturating_add(UnicodeWidthStr::width(prefix.as_ref()));}ifletSome(suffix)=&input.suffix {
w = w.saturating_add(UnicodeWidthStr::width(suffix.as_ref()));}letmut h =1usize;
w = w.saturating_add(input.padding.horizontal()asusize);
h = h.saturating_add(input.padding.vertical()asusize);if input.border {
w = w.saturating_add(2);
h = h.saturating_add(2);}if input.reserve_error_row || input.error.is_some(){
h = h.saturating_add(1);}let w = w.min(u16::MAXasusize)asu16;let h = h.min(u16::MAXasusize)asu16;(w, h)}