glues-tui 0.8.1

TUI and WASM frontends for the Glues note-taking experience
Documentation
use {
    crate::{
        context::{EntryContext, entry::MENU_ITEMS},
        theme::THEME,
    },
    ratatui::{
        Frame,
        layout::{Alignment, Constraint::Length, Flex, Layout, Rect},
        style::{Style, Stylize},
        widgets::{Block, HighlightSpacing, List, ListDirection, Padding},
    },
    tui_big_text::BigText,
};

pub fn draw(frame: &mut Frame, area: Rect, context: &mut EntryContext) {
    let background = Block::default().bg(THEME.background);
    frame.render_widget(background, area);

    let [area] = Layout::horizontal([Length(38)])
        .flex(Flex::Center)
        .areas(area);
    let [title_area, area] = Layout::vertical([Length(9), Length(13)])
        .flex(Flex::Center)
        .areas(area);

    let title = BigText::builder()
        .lines(vec!["Glues".fg(THEME.accent).into()])
        .build();
    let block = Block::bordered()
        .fg(THEME.text)
        .padding(Padding::new(2, 2, 1, 1))
        .title("Open Notes")
        .title_alignment(Alignment::Center);

    let items = MENU_ITEMS.into_iter().map(|name| name.fg(THEME.menu));
    let list = List::new(items)
        .block(block)
        .highlight_style(Style::new().fg(THEME.accent_text).bg(THEME.accent))
        .highlight_symbol(" ")
        .highlight_spacing(HighlightSpacing::Always)
        .direction(ListDirection::TopToBottom);

    frame.render_widget(title, title_area);
    frame.render_stateful_widget(list, area, &mut context.list_state);
}