Initial commit

This commit is contained in:
Amanda Graven 2025-02-10 09:34:10 +01:00
commit 560f88949f
10 changed files with 5623 additions and 0 deletions

84
src/main.rs Normal file
View file

@ -0,0 +1,84 @@
use dioxus::prelude::*;
use rand::Rng;
const FAVICON: Asset = asset!("/assets/icon.svg");
const MAIN_CSS: Asset = asset!("/assets/main.css");
const SNOW_CSS: Asset = asset!("/assets/snow.css");
#[derive(Clone, Debug, Default)]
struct State {
pub rows: Vec<Vec<u8>>,
}
impl State {
pub fn roll(&mut self) {
if self.rows.is_empty() {
self.rows.push(Vec::new());
}
let row = match self.rows.last_mut() {
Some(row) if row.len() > 1 && row.last().copied() == Some(5) => {
self.rows.push(Vec::new());
self.rows.last_mut().unwrap()
}
Some(row) => row,
None => unreachable!(),
};
row.push(rand::thread_rng().gen_range(1..=6));
}
}
fn main() {
dioxus::launch(App);
}
#[component]
fn App() -> Element {
let mut rows = use_signal(State::default);
let snow = true;
rsx! {
document::Link { rel: "icon", href: FAVICON }
document::Link { rel: "stylesheet", href: MAIN_CSS }
main {
table {
thead {
for _ in 0..20 {
th {}
}
}
tbody {
tr {
th { colspan: 100, "Game 1" }
}
for row in &rows().rows {
tr {
for number in &row {
td { class: "number", "{number}" }
}
}
}
}
}
button { onclick: move |_| rows.write().roll(), "Roll" }
}
if snow {
Snow {}
}
}
}
#[component]
fn Snow() -> Element {
rsx! {
div {
"aria-hidden": "true",
class: "snowflakes",
document::Stylesheet { href: SNOW_CSS }
for _ in 0..12 {
div {
class: "snowflake",
div { class: "inner", "" }
}
}
}
}
}