Publish harness and TUI open-source
initial sync from the monorepo
This commit is contained in:
commit
c68e39f604
2734 changed files with 1437016 additions and 0 deletions
59
crates/codegen/xai-ratatui-textarea/src/render/line_utils.rs
Normal file
59
crates/codegen/xai-ratatui-textarea/src/render/line_utils.rs
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
use ratatui::text::Line;
|
||||
use ratatui::text::Span;
|
||||
|
||||
/// Clone a borrowed ratatui `Line` into an owned `'static` line.
|
||||
pub fn line_to_static(line: &Line<'_>) -> Line<'static> {
|
||||
Line {
|
||||
style: line.style,
|
||||
alignment: line.alignment,
|
||||
spans: line
|
||||
.spans
|
||||
.iter()
|
||||
.map(|s| Span {
|
||||
style: s.style,
|
||||
content: std::borrow::Cow::Owned(s.content.to_string()),
|
||||
})
|
||||
.collect(),
|
||||
}
|
||||
}
|
||||
|
||||
/// Append owned copies of borrowed lines to `out`.
|
||||
pub fn push_owned_lines<'a>(src: &[Line<'a>], out: &mut Vec<Line<'static>>) {
|
||||
for l in src {
|
||||
out.push(line_to_static(l));
|
||||
}
|
||||
}
|
||||
|
||||
/// Consider a line blank if it has no spans or only spans whose contents are
|
||||
/// empty or consist solely of spaces (no tabs/newlines).
|
||||
pub fn is_blank_line_spaces_only(line: &Line<'_>) -> bool {
|
||||
if line.spans.is_empty() {
|
||||
return true;
|
||||
}
|
||||
line.spans
|
||||
.iter()
|
||||
.all(|s| s.content.is_empty() || s.content.chars().all(|c| c == ' '))
|
||||
}
|
||||
|
||||
/// Prefix each line with `initial_prefix` for the first line and
|
||||
/// `subsequent_prefix` for following lines. Returns a new Vec of owned lines.
|
||||
pub fn prefix_lines(
|
||||
lines: Vec<Line<'static>>,
|
||||
initial_prefix: Span<'static>,
|
||||
subsequent_prefix: Span<'static>,
|
||||
) -> Vec<Line<'static>> {
|
||||
lines
|
||||
.into_iter()
|
||||
.enumerate()
|
||||
.map(|(i, l)| {
|
||||
let mut spans = Vec::with_capacity(l.spans.len() + 1);
|
||||
spans.push(if i == 0 {
|
||||
initial_prefix.clone()
|
||||
} else {
|
||||
subsequent_prefix.clone()
|
||||
});
|
||||
spans.extend(l.spans);
|
||||
Line::from(spans).style(l.style)
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
Loading…
Reference in a new issue