From 80d190e15d02ac1764b1b2f2243831a20385fc14 Mon Sep 17 00:00:00 2001 From: luoxiaozero <48741584+luoxiaozero@users.noreply.github.com> Date: Wed, 31 Jan 2024 20:13:26 +0800 Subject: [PATCH] Feat/option (#93) * feat: alert, avatar, badge option * feat: some component option * feat: add OptionalProp * feat: some component option * feat: some component option --- thaw/src/alert/mod.rs | 24 +++--- thaw/src/auto_complete/mod.rs | 8 +- thaw/src/avatar/mod.rs | 20 +++-- thaw/src/badge/mod.rs | 7 +- thaw/src/breadcrumb/breadcrumb_item.rs | 6 +- thaw/src/breadcrumb/mod.rs | 6 +- thaw/src/button/mod.rs | 10 +-- thaw/src/calendar/mod.rs | 6 +- thaw/src/card/mod.rs | 55 ++++++------ thaw/src/checkbox/checkbox_item.rs | 3 +- thaw/src/checkbox/mod.rs | 7 +- thaw/src/collapse/collapse_item.rs | 6 +- thaw/src/collapse/mod.rs | 6 +- thaw/src/color_picker/mod.rs | 6 +- thaw/src/components/option_comp.rs | 2 +- thaw/src/date_picker/mod.rs | 4 +- thaw/src/divider/mod.rs | 7 +- thaw/src/drawer/mod.rs | 8 +- thaw/src/grid/grid_item.rs | 6 +- thaw/src/grid/mod.rs | 6 +- thaw/src/image/mod.rs | 17 ++-- thaw/src/input/mod.rs | 10 +-- thaw/src/input/text_area.rs | 10 +-- thaw/src/input_number/mod.rs | 6 +- thaw/src/layout/layout_header.rs | 8 +- thaw/src/layout/layout_sider.rs | 8 +- thaw/src/layout/mod.rs | 20 +++-- thaw/src/menu/menu_group.rs | 6 +- thaw/src/menu/menu_item.rs | 6 +- thaw/src/menu/mod.rs | 6 +- thaw/src/mobile/nav_bar/mod.rs | 73 ++++++++-------- thaw/src/mobile/toast/mod.rs | 2 +- thaw/src/modal/mod.rs | 3 +- thaw/src/popover/mod.rs | 10 +-- thaw/src/radio/mod.rs | 6 +- thaw/src/select/mod.rs | 6 +- thaw/src/slider/mod.rs | 6 +- thaw/src/space/mod.rs | 6 +- thaw/src/spinner/mod.rs | 6 +- thaw/src/switch/mod.rs | 6 +- thaw/src/table/mod.rs | 6 +- thaw/src/tabs/mod.rs | 10 +-- thaw/src/tabs/tab.rs | 10 +-- thaw/src/tag/mod.rs | 6 +- thaw/src/time_picker/mod.rs | 4 +- thaw/src/typography/text.rs | 10 +-- thaw/src/utils/class_list.rs | 16 ++++ thaw/src/utils/mod.rs | 2 + thaw/src/utils/optional_prop.rs | 113 +++++++++++++++++++++++++ 49 files changed, 371 insertions(+), 230 deletions(-) create mode 100644 thaw/src/utils/optional_prop.rs diff --git a/thaw/src/alert/mod.rs b/thaw/src/alert/mod.rs index 694f546..cf3bdf4 100644 --- a/thaw/src/alert/mod.rs +++ b/thaw/src/alert/mod.rs @@ -1,8 +1,9 @@ mod theme; use crate::{ + components::OptionComp, theme::use_theme, - utils::{class_list::class_list, mount_style}, + utils::{class_list::class_list, mount_style, OptionalProp}, Icon, Theme, }; use leptos::*; @@ -41,8 +42,8 @@ impl AlertVariant { #[component] pub fn Alert( - #[prop(optional, into)] class: MaybeSignal, - #[prop(optional, into)] title: MaybeSignal, + #[prop(optional, into)] class: OptionalProp>, + #[prop(optional, into)] title: Option>, #[prop(into)] variant: MaybeSignal, children: Children, ) -> impl IntoView { @@ -84,18 +85,15 @@ pub fn Alert( }); view! { -
+
- - {move || { - let title = title.get(); - if title.is_empty() { - None - } else { - view! {
{title}
}.into() - } - }} + +
{move || title.get()}
+
{children()}
diff --git a/thaw/src/auto_complete/mod.rs b/thaw/src/auto_complete/mod.rs index 47d5154..c006016 100644 --- a/thaw/src/auto_complete/mod.rs +++ b/thaw/src/auto_complete/mod.rs @@ -3,7 +3,7 @@ mod theme; use crate::{ components::{Binder, Follower, FollowerPlacement, FollowerWidth}, use_theme, - utils::{class_list::class_list, mount_style, Model, StoredMaybeSignal}, + utils::{class_list::class_list, mount_style, Model, OptionalProp, StoredMaybeSignal}, ComponentRef, Input, InputPrefix, InputRef, InputSuffix, Theme, }; use leptos::*; @@ -28,13 +28,13 @@ pub struct AutoCompleteSuffix { #[component] pub fn AutoComplete( #[prop(optional, into)] value: Model, - #[prop(optional, into)] placeholder: MaybeSignal, + #[prop(optional, into)] placeholder: OptionalProp>, #[prop(optional, into)] options: MaybeSignal>, #[prop(optional, into)] clear_after_select: MaybeSignal, #[prop(optional, into)] on_select: Option>, #[prop(optional, into)] disabled: MaybeSignal, #[prop(optional, into)] invalid: MaybeSignal, - #[prop(optional, into)] class: MaybeSignal, + #[prop(optional, into)] class: OptionalProp>, #[prop(optional)] auto_complete_prefix: Option, #[prop(optional)] auto_complete_suffix: Option, #[prop(optional)] comp_ref: ComponentRef, @@ -130,7 +130,7 @@ pub fn AutoComplete( view! {
diff --git a/thaw/src/avatar/mod.rs b/thaw/src/avatar/mod.rs index 1d3f19d..07fba1d 100644 --- a/thaw/src/avatar/mod.rs +++ b/thaw/src/avatar/mod.rs @@ -1,8 +1,9 @@ mod theme; use crate::{ + components::OptionComp, use_theme, - utils::{class_list::class_list, mount_style}, + utils::{class_list::class_list, mount_style, OptionalProp}, Theme, }; use leptos::*; @@ -10,10 +11,10 @@ pub use theme::AvatarTheme; #[component] pub fn Avatar( - #[prop(optional, into)] src: MaybeSignal, + #[prop(optional, into)] src: Option>, #[prop(optional, into)] round: MaybeSignal, #[prop(default = MaybeSignal::Static(30), into)] size: MaybeSignal, - #[prop(optional, into)] class: MaybeSignal, + #[prop(optional, into)] class: OptionalProp>, ) -> impl IntoView { let theme = use_theme(Theme::light); let css_vars = create_memo(move |_| { @@ -34,12 +35,13 @@ pub fn Avatar( mount_style("avatar", include_str!("./avatar.css")); view! { - - {move || { - let src = src.get(); - (!src.is_empty()).then(|| view! { }) - }} - + + + + } } diff --git a/thaw/src/badge/mod.rs b/thaw/src/badge/mod.rs index b9e1391..491fda0 100644 --- a/thaw/src/badge/mod.rs +++ b/thaw/src/badge/mod.rs @@ -1,6 +1,6 @@ use crate::{ theme::use_theme, - utils::{class_list::class_list, mount_style}, + utils::{class_list::class_list, mount_style, OptionalProp}, Theme, }; use leptos::*; @@ -29,7 +29,7 @@ pub fn Badge( #[prop(default = MaybeSignal::Static(u32::MAX), into)] max: MaybeSignal, #[prop(optional, into)] variant: MaybeSignal, #[prop(optional, into)] dot: MaybeSignal, - #[prop(optional, into)] class: MaybeSignal, + #[prop(optional, into)] class: OptionalProp>, children: Children, ) -> impl IntoView { let theme = use_theme(Theme::light); @@ -61,7 +61,8 @@ pub fn Badge(
{move || value.get()}
{children()}
diff --git a/thaw/src/breadcrumb/breadcrumb_item.rs b/thaw/src/breadcrumb/breadcrumb_item.rs index f3d16f0..bec75ee 100644 --- a/thaw/src/breadcrumb/breadcrumb_item.rs +++ b/thaw/src/breadcrumb/breadcrumb_item.rs @@ -1,10 +1,10 @@ use super::use_breadcrumb_separator; -use crate::utils::class_list::class_list; +use crate::utils::{class_list::class_list, OptionalProp}; use leptos::*; #[component] pub fn BreadcrumbItem( - #[prop(optional, into)] class: MaybeSignal, + #[prop(optional, into)] class: OptionalProp>, children: Children, ) -> impl IntoView { let breadcrumb_separator = use_breadcrumb_separator(); @@ -12,7 +12,7 @@ pub fn BreadcrumbItem( view! {
  • {children()} {move || breadcrumb_separator.0.get()} diff --git a/thaw/src/breadcrumb/mod.rs b/thaw/src/breadcrumb/mod.rs index e576700..60fa681 100644 --- a/thaw/src/breadcrumb/mod.rs +++ b/thaw/src/breadcrumb/mod.rs @@ -3,7 +3,7 @@ mod theme; use crate::{ use_theme, - utils::{class_list::class_list, mount_style}, + utils::{class_list::class_list, mount_style, OptionalProp}, Theme, }; pub use breadcrumb_item::BreadcrumbItem; @@ -13,7 +13,7 @@ pub use theme::BreadcrumbTheme; #[component] pub fn Breadcrumb( #[prop(default = MaybeSignal::Static("/".to_string()),into)] separator: MaybeSignal, - #[prop(optional, into)] class: MaybeSignal, + #[prop(optional, into)] class: OptionalProp>, children: Children, ) -> impl IntoView { mount_style("breadcrumb", include_str!("./breadcrumb.css")); @@ -40,7 +40,7 @@ pub fn Breadcrumb( view! {