use std::rc::Rc;
use serde::{Deserialize, Serialize};
use crate::build_context::BuildContext;
use crate::signal::Signal;
use crate::widget_id::WidgetId;
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Default, Serialize, Deserialize)]
pub enum CheckboxVariant {
#[default]
Square,
Rounded,
Circle,
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Default, Serialize, Deserialize)]
pub enum CheckboxState {
#[default]
Unchecked,
Checked,
Indeterminate,
}
#[derive(Clone, Debug)]
pub struct CheckboxStyleConfig {
pub state: Signal<CheckboxState>,
pub is_hovered: Signal<bool>,
pub is_pressed: Signal<bool>,
pub is_focused: Signal<bool>,
pub is_disabled: Signal<bool>,
pub variant: CheckboxVariant,
}
pub trait CheckboxStyle: 'static {
fn make_body(&self, cfg: &CheckboxStyleConfig, ctx: &mut BuildContext) -> WidgetId;
}
pub type SharedCheckboxStyle = Rc<dyn CheckboxStyle>;