use std::rc::Rc;
use serde::{Deserialize, Serialize};
use crate::build_context::BuildContext;
use crate::color_prop::ColorProp;
use crate::signal::Prop;
use crate::widget_id::WidgetId;
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Default, Serialize, Deserialize)]
pub enum PanelVariant {
#[default]
Plain,
Sunken,
Raised,
Highlighted,
}
#[derive(Clone, Debug)]
pub struct PanelStyleConfig {
pub content: WidgetId,
pub variant: PanelVariant,
pub background_override: Option<ColorProp>,
pub border_color_override: Option<ColorProp>,
pub border_width_override: Option<Prop<f32>>,
pub corner_radius_override: Option<Prop<f32>>,
pub padding_override: Option<Prop<f32>>,
}
pub trait PanelStyle: 'static {
fn make_body(&self, cfg: &PanelStyleConfig, ctx: &mut BuildContext) -> WidgetId;
}
pub type SharedPanelStyle = Rc<dyn PanelStyle>;