use ratatui_core::buffer::Buffer;
use ratatui_core::layout::Rect;
mod state;
mod widget;
pub use state::*;
pub use widget::*;
pub trait TableEditor<T> {
type State: TableEditorState<T>;
fn render(
&self, area: Rect,
cell_areas: &[Rect],
buf: &mut Buffer,
state: &mut Self::State,
);
}
#[allow(unused_variables)]
pub trait TableEditorState<T> {
type Context<'a>;
type Err;
fn create_value<'a>(&self, ctx: &'a Self::Context<'a>) -> Result<T, Self::Err>;
fn set_value<'a>(&mut self, value: T, ctx: &'a Self::Context<'a>) -> Result<(), Self::Err>;
fn value<'a>(&mut self, ctx: &'a Self::Context<'a>) -> Result<Option<T>, Self::Err>;
fn focused_col(&self) -> Option<usize> {
None
}
fn start<'a>(
&mut self,
col: Option<usize>,
ctx: &'a Self::Context<'a>,
) -> Result<(), Self::Err> {
Ok(())
}
fn stop<'a>(&mut self, ctx: &'a Self::Context<'a>) -> Result<(), Self::Err> {
Ok(())
}
}
#[derive(Default, Debug, Clone, Copy, PartialEq, Eq)]
pub enum Mode {
#[default]
View,
Edit,
Insert,
}