Widgets

ThemePicker

Interactive theme selection widget.

Overview

The ThemePicker widget provides an interactive interface for selecting and previewing themes in your TUI application.

Basic Usage

use ratkit::widgets::theme_picker::{ThemePicker, ThemePickerState};
use ratkit::theme::{Theme, BuiltinTheme};
use ratatui::Frame;

fn render_theme_picker(frame: &mut Frame) {
    let themes = vec![
        Theme::builtin(BuiltinTheme::Dark),
        Theme::builtin(BuiltinTheme::Light),
        Theme::builtin(BuiltinTheme::Dracula),
        Theme::builtin(BuiltinTheme::Monokai),
    ];
    
    let picker = ThemePicker::new(themes);
    let mut state = ThemePickerState::default();
    
    frame.render_stateful_widget(picker, frame.area(), &mut state);
}

Features

  • Theme preview - See theme before applying
  • Live preview - Preview on selection change
  • Custom themes - Support for custom theme definitions
  • Search - Find themes by name
  • Favorites - Mark frequently used themes

Custom Themes

Add your own themes:

let custom_theme = Theme::new("Custom")
    .background(Color::Black)
    .foreground(Color::White)
    .accent(Color::Cyan)
    .error(Color::Red)
    .warning(Color::Yellow)
    .success(Color::Green);

let picker = ThemePicker::new(vec![custom_theme]);

Event Handling

Handle theme selection:

if let Some(theme) = state.selected_theme() {
    app.apply_theme(theme);
}