rat-widget 3.2.1

ratatui widgets extended edition
Documentation
use crate::mini_salsa::{MiniSalsaState, layout_grid, mock_init, run_ui, setup_logging};
use rat_event::try_flow;
use rat_text::HasScreenCursor;
use rat_theme4::WidgetStyle;
use rat_widget::date_input;
use rat_widget::date_input::{DateInput, DateInputState};
use rat_widget::event::Outcome;
use ratatui_core::buffer::Buffer;
use ratatui_core::layout::{Constraint, Layout, Rect};
use ratatui_core::text::Span;
use ratatui_core::widgets::{StatefulWidget, Widget};
use ratatui_crossterm::crossterm::event::Event;

mod mini_salsa;

fn main() -> Result<(), anyhow::Error> {
    setup_logging()?;

    let mut state = State {
        input: DateInputState::new().with_pattern("%x")?,
    };

    run_ui("dateinput1", mock_init, event, render, &mut state)
}

struct State {
    pub(crate) input: DateInputState,
}

fn render(
    buf: &mut Buffer,
    area: Rect,
    ctx: &mut MiniSalsaState,
    state: &mut State,
) -> Result<(), anyhow::Error> {
    let l = layout_grid::<5, 4>(
        area,
        Layout::horizontal([
            Constraint::Fill(1),
            Constraint::Length(15),
            Constraint::Length(25),
            Constraint::Fill(1),
            Constraint::Fill(1),
        ])
        .spacing(1),
        Layout::vertical([
            Constraint::Length(1),
            Constraint::Length(1),
            Constraint::Length(1),
            Constraint::Fill(1),
        ]),
    );

    DateInput::new() //
        .styles(ctx.theme.style(WidgetStyle::TEXT))
        .render(l[1][1], buf, &mut state.input);
    if let Some((x, y)) = state.input.screen_cursor() {
        ctx.cursor = Some((x, y));
    }

    Span::from(format!("{:?}", state.input.value())) //
        .render(l[2][1], buf);

    Ok(())
}

fn event(
    event: &Event,
    _ctx: &mut MiniSalsaState,
    state: &mut State,
) -> Result<Outcome, anyhow::Error> {
    try_flow!(date_input::handle_events(&mut state.input, true, event));

    Ok(Outcome::Continue)
}