feat: theme

This commit is contained in:
luoxiao 2023-10-26 18:03:24 +08:00
parent 5c3992c0e2
commit 6fff3b22c2
8 changed files with 65 additions and 31 deletions

View file

@ -8,10 +8,10 @@ pub fn GridPage() -> impl IntoView {
mount_style( mount_style(
"grid-demo", "grid-demo",
r#".melt-grid-item { r#".melt-grid-item {
height: 130px; height: 60px;
color: white; color: white;
text-align: center; text-align: center;
line-height: 130px; line-height: 60px;
} }
.melt-grid-item:nth-child(odd) { .melt-grid-item:nth-child(odd) {
background-color: #3d8ae5dd; background-color: #3d8ae5dd;

View file

@ -33,7 +33,6 @@
.melt-button--text:hover { .melt-button--text:hover {
color: var(--font-color-hover); color: var(--font-color-hover);
background-color: #f2f2f2;
} }
.melt-button--link { .melt-button--link {

View file

@ -65,22 +65,33 @@ pub fn Button(
let theme = use_theme(Theme::light); let theme = use_theme(Theme::light);
let css_vars = create_memo(move |_| { let css_vars = create_memo(move |_| {
let mut css_vars = String::new(); let mut css_vars = String::new();
let theme = theme.get(); theme.with(|theme| {
let bg_color = color.get().theme_color(&theme); let bg_color = color.get().theme_color(&theme);
if variant.get() == ButtonVariant::Primary {
let bg_color_hover = color.get().theme_color_hover(&theme); let bg_color_hover = color.get().theme_color_hover(&theme);
let bg_color_active = color.get().theme_color_active(&theme); let bg_color_active = color.get().theme_color_active(&theme);
if variant.get() == ButtonVariant::Primary {
css_vars.push_str(&format!("--background-color: {bg_color};")); css_vars.push_str(&format!("--background-color: {bg_color};"));
css_vars.push_str(&format!("--background-color-hover: {bg_color_hover};")); css_vars.push_str(&format!("--background-color-hover: {bg_color_hover};"));
css_vars.push_str(&format!("--background-color-active: {bg_color_active};")); css_vars.push_str(&format!("--background-color-active: {bg_color_active};"));
css_vars.push_str("--font-color: #fff;"); css_vars.push_str("--font-color: #fff;");
css_vars.push_str(&format!("--border-color: {bg_color};")); css_vars.push_str(&format!("--border-color: {bg_color};"));
css_vars.push_str(&format!("--border-color-hover: {bg_color};")); css_vars.push_str(&format!("--border-color-hover: {bg_color};"));
} else if variant.get() == ButtonVariant::Text {
css_vars.push_str(&format!("--font-color-hover: {bg_color};"));
css_vars.push_str(&format!(
"--background-color-hover: {};",
theme.button.color_text_hover
));
css_vars.push_str(&format!(
"--background-color-active: {};",
theme.button.color_text_active
));
} else { } else {
css_vars.push_str(&format!("--font-color-hover: {bg_color};")); css_vars.push_str(&format!("--font-color-hover: {bg_color};"));
css_vars.push_str("--border-color: #555a;"); css_vars.push_str("--border-color: #555a;");
css_vars.push_str("--border-color-hover: #555;"); css_vars.push_str("--border-color-hover: #555;");
} }
});
css_vars css_vars
}); });

View file

@ -1,14 +1,23 @@
use crate::theme::ThemeMethod; use crate::theme::ThemeMethod;
#[derive(Clone)] #[derive(Clone)]
pub struct ButtonTheme {} pub struct ButtonTheme {
pub color_text_hover: String,
pub color_text_active: String,
}
impl ThemeMethod for ButtonTheme { impl ThemeMethod for ButtonTheme {
fn light() -> Self { fn light() -> Self {
Self {} Self {
color_text_hover: "#f1f3f5".into(),
color_text_active: "#eceef0".into(),
}
} }
fn dark() -> Self { fn dark() -> Self {
Self {} Self {
color_text_hover: "#ffffff1a".into(),
color_text_active: "#ffffff26".into(),
}
} }
} }

View file

@ -1,7 +1,7 @@
.melt-card { .melt-card {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
border: 1px solid #efeff5; border: 1px solid var(--melt-border-color);
border-radius: 3px; border-radius: 3px;
overflow: hidden; overflow: hidden;
} }
@ -21,7 +21,7 @@
.melt-card__content, .melt-card__content,
.melt-card__footer { .melt-card__footer {
padding: 12px 28px; padding: 12px 28px;
background-color: #fff; background-color: var(--melt-background-color);
} }
.melt-card__header { .melt-card__header {
padding: 20px 28px; padding: 20px 28px;

View file

@ -1,4 +1,4 @@
use crate::{components::*, utils::mount_style::mount_style}; use crate::{components::*, use_theme, utils::mount_style::mount_style, Theme};
use leptos::*; use leptos::*;
#[derive(Clone)] #[derive(Clone)]
@ -29,6 +29,21 @@ pub fn Card(
#[prop(optional)] card_footer: Option<CardFooter>, #[prop(optional)] card_footer: Option<CardFooter>,
) -> impl IntoView { ) -> impl IntoView {
mount_style("card", include_str!("./card.css")); mount_style("card", include_str!("./card.css"));
let theme = use_theme(Theme::light);
let css_vars = create_memo(move |_| {
let mut css_vars = String::new();
theme.with(|theme| {
css_vars.push_str(&format!(
"--melt-background-color: {};",
theme.common.background_color
));
css_vars.push_str(&format!(
"--melt-border-color: {};",
theme.common.border_color
));
});
css_vars
});
let title = store_value(title); let title = store_value(title);
let is_header = card_header.is_some(); let is_header = card_header.is_some();
@ -37,7 +52,7 @@ pub fn Card(
let header_extra = store_value(card_header_extra); let header_extra = store_value(card_header_extra);
view! { view! {
<div class="melt-card"> <div class="melt-card" style=move || css_vars.get()>
<If cond=is_header> <If cond=is_header>
<Then slot> <Then slot>
<div class="melt-card__header"> <div class="melt-card__header">

View file

@ -1,5 +1,5 @@
.melt-layout-sider { .melt-layout-sider {
position: relative; position: relative;
min-width: 208px; min-width: 240px;
overflow: auto; overflow: auto;
} }

View file

@ -18,9 +18,9 @@ impl ThemeMethod for MenuTheme {
fn dark() -> Self { fn dark() -> Self {
Self { Self {
color: "#4b5263".into(), color: "#9ca5b0".into(),
item_color_hover: "#f3f5f6".into(), item_color_hover: "#383f5233".into(),
group_color: "#111727".into(), group_color: "#ffffffe6".into(),
} }
} }
} }