use bevy::ui::FocusPolicy;
use super::inv::*;
use crate::image_rendering::ImageRendering;
use crate::protocol::animatable::Animatable;
use crate::protocol::background_image::{BackgroundImageSpec, de_background_image};
use crate::protocol::keywords::{FOCUS_POLICY_KEYWORDS, IMAGE_RENDERING_KEYWORDS};
use crate::protocol::units::Rect;
use crate::protocol::visual::{BorderColorSpec, BoxShadowList, GradientList, OutlineSpec};
use crate::scrollbar::ScrollbarSpec;
use crate::style::{Codec, Invalidate, StyleProperty};
pub static BACKGROUND_COLOR: StyleProperty<Animatable<String>> = StyleProperty {
invalidate: Invalidate::Fixed(PAINT),
..StyleProperty::with_codec("backgroundColor", Codec::serde_as("Animatable<Color>"))
};
pub static BORDER_COLOR: StyleProperty<Animatable<BorderColorSpec>> = StyleProperty {
invalidate: Invalidate::Fixed(PAINT),
..StyleProperty::with_codec(
"borderColor",
Codec::serde_as(
"Animatable<Color> | { top?: Color; right?: Color; bottom?: Color; left?: Color }",
),
)
};
pub static BORDER_RADIUS: StyleProperty<Animatable<Rect>> = StyleProperty {
invalidate: Invalidate::Fixed(LAYOUT_PAINT),
..StyleProperty::with_codec("borderRadius", Codec::serde_as("Animatable<Rect>"))
};
pub static OUTLINE: StyleProperty<OutlineSpec> = StyleProperty {
invalidate: Invalidate::Fixed(PAINT),
..StyleProperty::with_codec(
"outline",
Codec::serde_as("{ width?: Length; offset?: Length; color?: Color }"),
)
};
pub static BOX_SHADOW: StyleProperty<BoxShadowList> = StyleProperty {
invalidate: Invalidate::Fixed(PAINT),
..StyleProperty::with_codec("boxShadow", Codec::serde_as("BoxShadow | BoxShadow[]"))
};
pub static BACKGROUND_GRADIENT: StyleProperty<GradientList> = StyleProperty {
invalidate: Invalidate::Fixed(PAINT),
..StyleProperty::with_codec(
"backgroundGradient",
Codec::serde_as("Gradient | Gradient[]"),
)
};
pub static BORDER_GRADIENT: StyleProperty<GradientList> = StyleProperty {
invalidate: Invalidate::Fixed(PAINT),
..StyleProperty::with_codec("borderGradient", Codec::serde_as("Gradient | Gradient[]"))
};
pub static BACKGROUND_IMAGE: StyleProperty<BackgroundImageSpec> = StyleProperty {
invalidate: Invalidate::Fixed(PAINT_ASSET),
..StyleProperty::with_codec(
"backgroundImage",
Codec::custom(
erased!(de_background_image => BackgroundImageSpec),
"BackgroundImage",
),
)
};
pub static IMAGE_RENDERING: StyleProperty<ImageRendering> = StyleProperty {
invalidate: Invalidate::Fixed(PAINT_ASSET),
..StyleProperty::with_codec("imageRendering", Codec::keyword(&IMAGE_RENDERING_KEYWORDS))
};
pub static LAYOUT_ROUNDING: StyleProperty<bool> = StyleProperty {
invalidate: Invalidate::Fixed(ROUNDING),
..StyleProperty::new("layoutRounding")
};
pub static Z_INDEX: StyleProperty<i32> = StyleProperty {
invalidate: Invalidate::Fixed(STACKING_PAINT),
..StyleProperty::new("zIndex")
};
pub static GLOBAL_Z_INDEX: StyleProperty<i32> = StyleProperty {
invalidate: Invalidate::Fixed(STACKING_PAINT),
..StyleProperty::new("globalZIndex")
};
pub static FOCUS_POLICY: StyleProperty<FocusPolicy> = StyleProperty {
invalidate: Invalidate::Fixed(HIT_TEST),
..StyleProperty::with_codec("focusPolicy", Codec::keyword(&FOCUS_POLICY_KEYWORDS))
};
pub static CURSOR: StyleProperty<String> = StyleProperty {
invalidate: Invalidate::Fixed(NONE),
..StyleProperty::with_codec("cursor", Codec::serde_as("SystemCursor | (string & {})"))
};
pub static SCROLLBAR: StyleProperty<ScrollbarSpec> = StyleProperty {
invalidate: Invalidate::Fixed(LAYOUT_PAINT),
..StyleProperty::with_codec(
"scrollbar",
Codec::serde_as("\"none\" | \"default\" | ScrollbarStyle"),
)
};