use bevy::text::{FontWeight, Justify, LineBreak};
use super::inv::*;
use crate::protocol::animatable::Animatable;
use crate::protocol::keywords::{LINE_BREAK_KEYWORDS, TEXT_ALIGN_KEYWORDS, de_font_weight};
use crate::protocol::units::FontSize;
use crate::protocol::visual::{LetterSpacingSpec, LineHeightSpec, TextShadowSpec};
use crate::style::{Codec, Invalidate, StyleProperty};
pub static COLOR: StyleProperty<Animatable<String>> = StyleProperty {
invalidate: Invalidate::Fixed(PAINT),
..StyleProperty::with_codec("color", Codec::serde_as("Animatable<Color>"))
};
pub static FONT_SIZE: StyleProperty<FontSize> = StyleProperty {
invalidate: Invalidate::Fixed(SHAPING),
..StyleProperty::with_codec("fontSize", Codec::serde_as("FontSize"))
};
pub static FONT_WEIGHT: StyleProperty<FontWeight> = StyleProperty {
invalidate: Invalidate::Fixed(SHAPING),
..StyleProperty::with_codec(
"fontWeight",
Codec::custom(
erased!(de_font_weight => FontWeight),
"\"thin\" | \"light\" | \"normal\" | \"medium\" | \"semibold\" | \"bold\" | \"black\" \
| (string & {})",
),
)
};
pub static FONT_FAMILY: StyleProperty<String> = StyleProperty {
invalidate: Invalidate::Fixed(SHAPING),
..StyleProperty::new("fontFamily")
};
pub static TEXT_ALIGN: StyleProperty<Justify> = StyleProperty {
invalidate: Invalidate::Fixed(LAYOUT_PAINT),
..StyleProperty::with_codec("textAlign", Codec::keyword(&TEXT_ALIGN_KEYWORDS))
};
pub static LINE_HEIGHT: StyleProperty<LineHeightSpec> = StyleProperty {
invalidate: Invalidate::Fixed(SHAPING),
..StyleProperty::with_codec(
"lineHeight",
Codec::serde_as("number | string | { px: number }"),
)
};
pub static LETTER_SPACING: StyleProperty<LetterSpacingSpec> = StyleProperty {
invalidate: Invalidate::Fixed(SHAPING),
..StyleProperty::with_codec(
"letterSpacing",
Codec::serde_as("number | string | { rem: number }"),
)
};
pub static TEXT_SHADOW: StyleProperty<TextShadowSpec> = StyleProperty {
invalidate: Invalidate::Fixed(PAINT),
..StyleProperty::with_codec(
"textShadow",
Codec::serde_as("{ color?: Color; offsetX?: number; offsetY?: number }"),
)
};
pub static LINE_BREAK: StyleProperty<LineBreak> = StyleProperty {
invalidate: Invalidate::Fixed(LAYOUT_PAINT),
..StyleProperty::with_codec("lineBreak", Codec::keyword(&LINE_BREAK_KEYWORDS))
};