thaw/demo/src/components/demo.rs

55 lines
2 KiB
Rust
Raw Normal View History

2023-09-17 22:19:54 +08:00
use leptos::*;
2023-11-05 16:03:58 +08:00
use thaw::*;
2023-09-17 22:19:54 +08:00
#[slot]
pub struct DemoCode {
2023-10-04 00:11:38 +08:00
#[prop(optional)]
html: &'static str,
2023-09-17 22:19:54 +08:00
children: Children,
}
#[component]
pub fn Demo(demo_code: DemoCode, children: Children) -> impl IntoView {
2023-10-07 21:41:03 +08:00
mount_style("demo", prisms::prism_css!());
2023-10-26 16:53:51 +08:00
let theme = use_theme(Theme::light);
let style = create_memo(move |_| {
2023-11-05 16:03:58 +08:00
let mut style = String::from("background-image: url(/thaw/grid_dot.svg); background-repeat: repeat; background-size: 1.5rem; margin-top: 1rem; padding: 1rem; border-top-left-radius: 0.5rem; border-top-right-radius: 0.5rem;");
2023-10-26 16:53:51 +08:00
theme.with(|theme| {
if theme.common.color_scheme == "dark" {
style.push_str("border: 1px solid #383f52;");
} else {
style.push_str(&format!("border: 1px solid {};", theme.common.border_color));
}
});
style
});
let code_style = create_memo(move |_| {
let mut style = String::from("font-weight: 400; font-size: 0.875em; line-height: 1.7142857;margin-bottom: 1rem; padding: 1rem; border-bottom-left-radius: 0.5rem; border-bottom-right-radius: 0.5rem;");
theme.with(|theme| {
if theme.common.color_scheme == "dark" {
style.push_str("border: 1px solid #383f52; border-top-width: 0;");
style.push_str("background-color: #242832;");
} else {
style.push_str(&format!(
"border: 1px solid {}; border-top-width: 0;",
theme.common.border_color
));
style.push_str("background-color: #f9fafb;");
}
});
style
});
2023-09-17 22:19:54 +08:00
view! {
2023-10-26 16:53:51 +08:00
<div style=move || style.get()>
2023-10-08 09:28:13 +08:00
{children()}
</div>
2023-10-26 16:53:51 +08:00
<div style=move || code_style.get()>
2023-09-17 22:19:54 +08:00
<Code>
2023-10-04 00:11:38 +08:00
<pre style="margin: 0" inner_html=demo_code.html>
2023-10-08 09:28:13 +08:00
{(demo_code.children)()}
2023-09-17 22:19:54 +08:00
</pre>
</Code>
2023-10-08 09:28:13 +08:00
</div>
2023-09-17 22:19:54 +08:00
}
}