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. #[component] pub fn Die(value: u8, used: bool) -> impl IntoView { let cls = if used { "die-face die-used" } else { "die-face" }; let dots: Vec = dot_positions(value) .iter() .map(|&(cx, cy)| view! { }.into_any()) .collect(); view! { {dots} } }