use leptos::prelude::*; /// (cx, cy) positions for dots on a 48×48 die face. fn dot_positions(value: u8) -> &'static [(&'static str, &'static str)] { match value { 1 => &[("24", "24")], 2 => &[("35", "13"), ("13", "35")], 3 => &[("35", "13"), ("24", "24"), ("13", "35")], 4 => &[("13", "13"), ("35", "13"), ("13", "35"), ("35", "35")], 5 => &[("13", "13"), ("35", "13"), ("24", "24"), ("13", "35"), ("35", "35")], 6 => &[("13", "13"), ("35", "13"), ("13", "24"), ("35", "24"), ("13", "35"), ("35", "35")], _ => &[], } } /// A single die face rendered as SVG. /// `value` 1–6 shows dots; 0 shows an empty face (not-yet-rolled). /// `used` dims the die. /// `is_double` applies a golden glow (both dice same value). #[component] pub fn Die( value: u8, used: bool, #[prop(default = false)] is_double: bool, ) -> impl IntoView { let mut cls = if used { "die-face die-used".to_string() } else { "die-face".to_string() }; if is_double && !used { cls.push_str(" die-double"); } let dots: Vec = dot_positions(value) .iter() .map(|&(cx, cy)| view! { }.into_any()) .collect(); view! { {dots} } }