use std::rc::Rc;
use serde::{Deserialize, Serialize};
use crate::build_context::BuildContext;
use crate::color_prop::ColorProp;
use crate::signal::{Prop, Signal};
use crate::widget_id::WidgetId;
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Default, Serialize, Deserialize)]
pub enum CardVariant {
Plain,
#[default]
Elevated,
Outlined,
Filled,
}
#[derive(Clone, Debug)]
pub struct CardStyleConfig {
pub content: WidgetId,
pub is_hovered: Option<Signal<bool>>,
pub variant: CardVariant,
pub background_override: Option<ColorProp>,
pub corner_radius_override: Option<Prop<f32>>,
pub padding_override: Option<Prop<f32>>,
pub shadow_override: Option<teksilo_tokens::Shadow>,
}
pub trait CardStyle: 'static {
fn make_body(&self, cfg: &CardStyleConfig, ctx: &mut BuildContext) -> WidgetId;
}
pub type SharedCardStyle = Rc<dyn CardStyle>;