feat: collapse add theme (#74)

This commit is contained in:
luoxiaozero 2024-01-09 22:56:38 +08:00 committed by GitHub
parent 99d61bc1f4
commit 1b1aed9aaa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 59 additions and 11 deletions

View file

@ -28,7 +28,10 @@ view! {
"Build fast web applications with Rust." "Build fast web applications with Rust."
</CollapseItem> </CollapseItem>
<CollapseItem title="Thaw" key="thaw"> <CollapseItem title="Thaw" key="thaw">
"An easy to use leptos component library" "An easy to use leptos component library."
</CollapseItem>
<CollapseItem title="Naive UI" key="naive-ui">
"A Vue 3 Component Library. Fairly Complete. Theme Customizable. Uses TypeScript. Fast."
</CollapseItem> </CollapseItem>
</Collapse> </Collapse>
} }

View file

@ -1,5 +1,6 @@
.thaw-collapse .thaw-collapse-item:not(:first-child) { .thaw-collapse .thaw-collapse-item:not(:first-child) {
margin-top: 16px; margin-top: 16px;
border-top: 1px solid var(--thaw-border-color);
} }
.thaw-collapse-item__header { .thaw-collapse-item__header {
@ -8,6 +9,12 @@
cursor: pointer; cursor: pointer;
} }
.thaw-collapse
.thaw-collapse-item:not(:first-child)
.thaw-collapse-item__header {
padding-top: 16px;
}
.thaw-collapse-item-arrow { .thaw-collapse-item-arrow {
margin-right: 4px; margin-right: 4px;
transition: transform 0.15s cubic-bezier(0.4, 0, 0.2, 1); transition: transform 0.15s cubic-bezier(0.4, 0, 0.2, 1);

View file

@ -44,10 +44,7 @@ pub fn CollapseItem(
"thaw-collapse-item", ("thaw-collapse-item--active", move || is_show_content.get()), "thaw-collapse-item", ("thaw-collapse-item--active", move || is_show_content.get()),
move || class.get() move || class.get()
]> ]>
<div <div class="thaw-collapse-item__header" on:click=on_click>
class="thaw-collapse-item__header"
on:click=on_click
>
<Icon icon=Icon::from(AiIcon::AiRightOutlined) class="thaw-collapse-item-arrow"/> <Icon icon=Icon::from(AiIcon::AiRightOutlined) class="thaw-collapse-item-arrow"/>
{move || title.get()} {move || title.get()}
</div> </div>

View file

@ -1,8 +1,14 @@
mod collapse_item; mod collapse_item;
mod theme;
pub use collapse_item::CollapseItem; pub use collapse_item::CollapseItem;
pub use theme::CollapseTheme;
use crate::utils::{class_list::class_list, mount_style}; use crate::{
use_theme,
utils::{class_list::class_list, mount_style},
Theme,
};
use leptos::*; use leptos::*;
use std::collections::HashSet; use std::collections::HashSet;
@ -14,10 +20,22 @@ pub fn Collapse(
children: Children, children: Children,
) -> impl IntoView { ) -> impl IntoView {
mount_style("collapser", include_str!("./collapse.css")); mount_style("collapser", include_str!("./collapse.css"));
let theme = use_theme(Theme::light);
let css_vars = create_memo(move |_| {
theme.with(|theme| format!("--thaw-border-color: {};", theme.collapse.border_color))
});
view! { view! {
<Provider value=CollapseInjection{ value, accordion }> <Provider value=CollapseInjection {
<div class=class_list!["thaw-collapse", move || class.get()]>{children()}</div> value,
accordion,
}>
<div
class=class_list!["thaw-collapse", move || class.get()]
style=move || css_vars.get()
>
{children()}
</div>
</Provider> </Provider>
} }
} }

View file

@ -0,0 +1,20 @@
use crate::theme::ThemeMethod;
#[derive(Clone)]
pub struct CollapseTheme {
pub border_color: String,
}
impl ThemeMethod for CollapseTheme {
fn light() -> Self {
Self {
border_color: "#efeff5".into(),
}
}
fn dark() -> Self {
Self {
border_color: "#ffffff17".into(),
}
}
}

View file

@ -4,9 +4,9 @@ use self::common::CommonTheme;
use crate::{ use crate::{
mobile::{NavBarTheme, TabbarTheme}, mobile::{NavBarTheme, TabbarTheme},
AlertTheme, AutoCompleteTheme, AvatarTheme, BreadcrumbTheme, ButtonTheme, CalendarTheme, AlertTheme, AutoCompleteTheme, AvatarTheme, BreadcrumbTheme, ButtonTheme, CalendarTheme,
ColorPickerTheme, DatePickerTheme, InputTheme, MenuTheme, MessageTheme, PopoverTheme, CollapseTheme, ColorPickerTheme, DatePickerTheme, InputTheme, MenuTheme, MessageTheme,
ProgressTheme, SelectTheme, SkeletionTheme, SliderTheme, SpinnerTheme, SwitchTheme, TableTheme, PopoverTheme, ProgressTheme, SelectTheme, SkeletionTheme, SliderTheme, SpinnerTheme,
TagTheme, TimePickerTheme, TypographyTheme, UploadTheme, SwitchTheme, TableTheme, TagTheme, TimePickerTheme, TypographyTheme, UploadTheme,
}; };
use leptos::*; use leptos::*;
@ -44,6 +44,7 @@ pub struct Theme {
pub time_picker: TimePickerTheme, pub time_picker: TimePickerTheme,
pub date_picker: DatePickerTheme, pub date_picker: DatePickerTheme,
pub popover: PopoverTheme, pub popover: PopoverTheme,
pub collapse: CollapseTheme,
} }
impl Theme { impl Theme {
@ -76,6 +77,7 @@ impl Theme {
time_picker: TimePickerTheme::light(), time_picker: TimePickerTheme::light(),
date_picker: DatePickerTheme::light(), date_picker: DatePickerTheme::light(),
popover: PopoverTheme::light(), popover: PopoverTheme::light(),
collapse: CollapseTheme::light(),
} }
} }
pub fn dark() -> Self { pub fn dark() -> Self {
@ -107,6 +109,7 @@ impl Theme {
time_picker: TimePickerTheme::dark(), time_picker: TimePickerTheme::dark(),
date_picker: DatePickerTheme::dark(), date_picker: DatePickerTheme::dark(),
popover: PopoverTheme::dark(), popover: PopoverTheme::dark(),
collapse: CollapseTheme::dark(),
} }
} }
} }