From 21506b2164111aeca742cdc7ff0ba79672077ee6 Mon Sep 17 00:00:00 2001 From: luoxiaozero <48741584+luoxiaozero@users.noreply.github.com> Date: Fri, 24 Nov 2023 10:04:54 +0800 Subject: [PATCH] Feat/ssr (#25) * feat: add ssr_axum template * feat: demo added the ssr mode * fix: demo ssr mode * feat(ssr): mount_style * pref: delete some useless fikes * fix(ssr): problems caused by using wasm_bindgen * feat: add hydrate * pref: Demo component * fix(hydrate): teleport component * fix(hydrate): hydrate feature * fix(hydrate): tabs component * feat: GlobalStyle component margin style * docs(ssr): static assets --- Cargo.toml | 12 +- demo/Cargo.toml | 17 +- demo/index.html | 1 - demo/src/app.rs | 5 +- demo/src/assets/css/index.css | 19 -- demo/src/components/demo.rs | 27 ++- demo/src/components/site_header.rs | 15 +- demo/src/lib.rs | 5 + demo/src/main.rs | 6 +- demo/src/pages/alert/mod.rs | 12 +- demo/src/pages/auto_complete/mod.rs | 14 +- demo/src/pages/avatar/mod.rs | 28 ++- demo/src/pages/badge/mod.rs | 58 +++--- demo/src/pages/breadcrumb/mod.rs | 78 ++++---- demo/src/pages/button/mod.rs | 174 +++++++++--------- demo/src/pages/card/mod.rs | 90 ++++----- demo/src/pages/checkbox/mod.rs | 40 ++-- demo/src/pages/color_picker/mod.rs | 22 +-- demo/src/pages/components.rs | 3 +- demo/src/pages/divider/mod.rs | 26 ++- demo/src/pages/grid/mod.rs | 102 +++++----- demo/src/pages/guide/installation.rs | 13 +- demo/src/pages/guide/mod.rs | 16 +- demo/src/pages/guide/usage.rs | 64 +++---- demo/src/pages/icon/mod.rs | 32 ++-- demo/src/pages/image/mod.rs | 32 ++-- demo/src/pages/input/mod.rs | 96 +++++----- demo/src/pages/input_number/mod.rs | 39 ++-- demo/src/pages/layout/mod.rs | 78 ++++---- demo/src/pages/loading_bar/mod.rs | 51 +++-- demo/src/pages/menu/mod.rs | 34 ++-- demo/src/pages/message/mod.rs | 70 +++---- demo/src/pages/mobile.rs | 5 +- demo/src/pages/modal/mod.rs | 30 ++- demo/src/pages/nav_bar/mod.rs | 60 +++--- demo/src/pages/progress/mod.rs | 60 +++--- demo/src/pages/radio/mod.rs | 26 ++- demo/src/pages/select/mod.rs | 26 ++- demo/src/pages/skeleton/mod.rs | 24 ++- demo/src/pages/slider/mod.rs | 22 +-- demo/src/pages/space/mod.rs | 88 +++++---- demo/src/pages/switch/mod.rs | 26 ++- demo/src/pages/tabbar/mod.rs | 46 +++-- demo/src/pages/table/mod.rs | 64 ++++--- demo/src/pages/tabs/mod.rs | 36 ++-- demo/src/pages/tag/mod.rs | 60 +++--- demo/src/pages/theme/mod.rs | 122 ++++++------ demo/src/pages/toast/mod.rs | 32 ++-- demo/src/pages/upload/mod.rs | 104 +++++------ examples/ssr_axum/.gitignore | 13 ++ examples/ssr_axum/Cargo.toml | 120 ++++++++++++ examples/ssr_axum/LICENSE | 21 +++ examples/ssr_axum/README.md | 86 +++++++++ examples/ssr_axum/end2end/package-lock.json | 74 ++++++++ examples/ssr_axum/end2end/package.json | 13 ++ .../ssr_axum/end2end/playwright.config.ts | 107 +++++++++++ .../ssr_axum/end2end/tests/example.spec.ts | 9 + examples/ssr_axum/public/favicon.ico | Bin 0 -> 23462 bytes examples/ssr_axum/public/thaw/grid_dot.svg | 4 + examples/ssr_axum/public/thaw/logo.svg | 11 ++ examples/ssr_axum/src/fileserv.rs | 40 ++++ examples/ssr_axum/src/lib.rs | 17 ++ examples/ssr_axum/src/main.rs | 43 +++++ src/color_picker/mod.rs | 43 +++-- src/components/binder/mod.rs | 25 +-- src/components/teleport/mod.rs | 48 +++-- src/global_style/mod.rs | 1 + src/select/mod.rs | 42 +++-- src/tabs/mod.rs | 134 ++++++++------ src/utils/event_listener.rs | 2 +- src/utils/mod.rs | 12 ++ src/utils/mount_style.rs | 46 +++-- 72 files changed, 1763 insertions(+), 1258 deletions(-) delete mode 100644 demo/src/assets/css/index.css create mode 100644 demo/src/lib.rs create mode 100644 examples/ssr_axum/.gitignore create mode 100644 examples/ssr_axum/Cargo.toml create mode 100644 examples/ssr_axum/LICENSE create mode 100644 examples/ssr_axum/README.md create mode 100644 examples/ssr_axum/end2end/package-lock.json create mode 100644 examples/ssr_axum/end2end/package.json create mode 100644 examples/ssr_axum/end2end/playwright.config.ts create mode 100644 examples/ssr_axum/end2end/tests/example.spec.ts create mode 100644 examples/ssr_axum/public/favicon.ico create mode 100644 examples/ssr_axum/public/thaw/grid_dot.svg create mode 100644 examples/ssr_axum/public/thaw/logo.svg create mode 100644 examples/ssr_axum/src/fileserv.rs create mode 100644 examples/ssr_axum/src/lib.rs create mode 100644 examples/ssr_axum/src/main.rs diff --git a/Cargo.toml b/Cargo.toml index 740f2b6..50742d0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,13 +13,15 @@ license = "MIT" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -leptos = { version = "0.5.2", features = ["csr"] } +leptos = { version = "0.5.2" } +leptos_meta = { version = "0.5.2", optional = true } web-sys = { version = "0.3.63", features = [ "DomRect", "File", "FileList", "DataTransfer", ] } +wasm-bindgen = "0.2.88" icondata = { version = "0.1.0", features = [ "AiCloseOutlined", "AiCheckOutlined", @@ -36,5 +38,11 @@ icondata_core = "0.0.2" uuid = { version = "1.5.0", features = ["v4"] } cfg-if = "1.0.0" +[features] +default = ["csr"] +csr = ["leptos/csr"] +ssr = ["leptos/ssr", "leptos_meta/ssr"] +hydrate = ["leptos/hydrate"] + [workspace] -members = ["demo"] +members = ["demo", "examples/*"] diff --git a/demo/Cargo.toml b/demo/Cargo.toml index 7f34678..630353f 100644 --- a/demo/Cargo.toml +++ b/demo/Cargo.toml @@ -7,11 +7,11 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -leptos = { version = "0.5.2", features = ["csr"] } -leptos_meta = { version = "0.5.2", features = ["csr"] } -leptos_router = { version = "0.5.2", features = ["csr"] } +leptos = { version = "0.5.2" } +leptos_meta = { version = "0.5.2" } +leptos_router = { version = "0.5.2" } leptos_devtools = "0.0.1" -thaw = { path = "../" } +thaw = { path = "../", default-features = false } icondata = { version = "0.1.0", features = [ "AiCloseOutlined", "AiCheckOutlined", @@ -21,4 +21,13 @@ icondata = { version = "0.1.0", features = [ prisms = { git = "https://github.com/luoxiaozero/prisms", rev = "16d4d34b93fc20578ebf03137d54ecc7eafa4d4b" } [features] +default = ["csr"] tracing = ["leptos/tracing"] +csr = ["leptos/csr", "leptos_meta/csr", "leptos_router/csr", "thaw/csr"] +ssr = ["leptos/ssr", "leptos_meta/ssr", "leptos_router/ssr", "thaw/ssr"] +hydrate = [ + "leptos/hydrate", + "leptos_meta/hydrate", + "leptos_router/hydrate", + "thaw/hydrate", +] diff --git a/demo/index.html b/demo/index.html index 76d19a2..d0b683e 100644 --- a/demo/index.html +++ b/demo/index.html @@ -10,7 +10,6 @@ href="/thaw/favicon.ico" type="image/x-icon" /> - diff --git a/demo/src/app.rs b/demo/src/app.rs index e731092..09d3e96 100644 --- a/demo/src/app.rs +++ b/demo/src/app.rs @@ -87,9 +87,8 @@ fn TheRouter(is_routing: RwSignal) -> impl IntoView { #[component] fn TheProvider(children: Children) -> impl IntoView { fn use_query_value(key: &str) -> Option { - let href = window().location().href().ok()?; - let url = Url::try_from(href.as_str()).ok()?; - url.search_params.get(key).cloned() + let query_map = use_query_map(); + query_map.with_untracked(|query| query.get(key).cloned()) } let theme = use_query_value("theme").map_or_else(Theme::light, |name| { if name == "light" { diff --git a/demo/src/assets/css/index.css b/demo/src/assets/css/index.css deleted file mode 100644 index 0e03a75..0000000 --- a/demo/src/assets/css/index.css +++ /dev/null @@ -1,19 +0,0 @@ -body { - margin: 0; -} - -.components-page-box { - display: flex; -} - -.components-page-box aside { - width: 260px; -} - -.components-page-box main { - flex: 1; -} - -.token.operator { - background: hsla(0, 0%, 100%, 0) !important; -} diff --git a/demo/src/components/demo.rs b/demo/src/components/demo.rs index 710db99..2c96d86 100644 --- a/demo/src/components/demo.rs +++ b/demo/src/components/demo.rs @@ -4,8 +4,6 @@ use thaw::*; #[slot] pub struct DemoCode { - #[prop(optional)] - html: &'static str, children: Children, } @@ -39,18 +37,27 @@ pub fn Demo(demo_code: DemoCode, children: Children) -> impl IntoView { }); style }); + + let frag = (demo_code.children)(); + let mut html = String::new(); + for node in frag.nodes { + match node { + View::Text(text) => html.push_str(&text.content), + _ => leptos::logging::warn!("Only text nodes are supported as children of ."), + } + } + view! { - + -
- {children()} -
+
{children()}
-
-                    {(demo_code.children)()}
-                
+

             
} diff --git a/demo/src/components/site_header.rs b/demo/src/components/site_header.rs index 1233539..b5b17f9 100644 --- a/demo/src/components/site_header.rs +++ b/demo/src/components/site_header.rs @@ -91,26 +91,25 @@ pub fn SiteHeader() -> impl IntoView { /> - + /> + diff --git a/demo/src/lib.rs b/demo/src/lib.rs new file mode 100644 index 0000000..ff2be2f --- /dev/null +++ b/demo/src/lib.rs @@ -0,0 +1,5 @@ +mod app; +mod components; +mod pages; + +pub use app::App; diff --git a/demo/src/main.rs b/demo/src/main.rs index c6cffba..36b75eb 100644 --- a/demo/src/main.rs +++ b/demo/src/main.rs @@ -1,8 +1,4 @@ -mod app; -mod components; -mod pages; - -use app::*; +use demo::App; use leptos::*; fn main() { diff --git a/demo/src/pages/alert/mod.rs b/demo/src/pages/alert/mod.rs index deed410..eef247f 100644 --- a/demo/src/pages/alert/mod.rs +++ b/demo/src/pages/alert/mod.rs @@ -20,19 +20,17 @@ pub fn AlertPage() -> impl IntoView { "error" - + + {highlight_str!( r#" "success" "warning" "error" "#, "rust" - ) - > + )} - ""

"Alert Props"

@@ -49,7 +47,7 @@ pub fn AlertPage() -> impl IntoView { "title" "MaybeSignal" - r#""""# + "Default::default()" "Title of the alert." diff --git a/demo/src/pages/auto_complete/mod.rs b/demo/src/pages/auto_complete/mod.rs index ae79132..4a5a70f 100644 --- a/demo/src/pages/auto_complete/mod.rs +++ b/demo/src/pages/auto_complete/mod.rs @@ -25,9 +25,9 @@ pub fn AutoCompletePage() -> impl IntoView {

"AutoComplete"

- + + {highlight_str!( r#" let value = create_rw_signal(String::new()); let options =create_memo(|_| { @@ -48,10 +48,8 @@ pub fn AutoCompletePage() -> impl IntoView { } "#, "rust" - ) - > + )} - ""

"AutoComplete Props"

@@ -68,13 +66,13 @@ pub fn AutoCompletePage() -> impl IntoView { "value" "RwSignal" - r#""""# + "Default::default()" "Input of autocomplete." "placeholder" "MaybeSignal" - r#""""# + "Default::default()" "Autocomplete's placeholder." diff --git a/demo/src/pages/avatar/mod.rs b/demo/src/pages/avatar/mod.rs index 9c7aa64..5d39d15 100644 --- a/demo/src/pages/avatar/mod.rs +++ b/demo/src/pages/avatar/mod.rs @@ -14,21 +14,19 @@ pub fn AvatarPage() -> impl IntoView { - - - - - - "#, - "rust" - ) - > + + + {highlight_str!( + r#" + + + + + + "#, + "rust" + )} - ""

"Avatar Props"

@@ -45,7 +43,7 @@ pub fn AvatarPage() -> impl IntoView { "src" "MaybeSignal" - r#""""# + "Default::default()" "Avatar's image source." diff --git a/demo/src/pages/badge/mod.rs b/demo/src/pages/badge/mod.rs index 6fb07ad..60b5924 100644 --- a/demo/src/pages/badge/mod.rs +++ b/demo/src/pages/badge/mod.rs @@ -35,37 +35,35 @@ pub fn BadgePage() -> impl IntoView { "value:" {move || value.get()} - - - - - - - - - - - - - - - - "value:" - {move || value.get()} - - } - "#, - "rust" - ) - > + + + {highlight_str!( + r#" + let value = create_rw_signal(0); + view! { + + + + + + + + + + + + + + + + "value:" + {move || value.get()} + + } + "#, + "rust" + )} - ""

"Badge Props"

diff --git a/demo/src/pages/breadcrumb/mod.rs b/demo/src/pages/breadcrumb/mod.rs index 56e5596..e347d8c 100644 --- a/demo/src/pages/breadcrumb/mod.rs +++ b/demo/src/pages/breadcrumb/mod.rs @@ -14,27 +14,25 @@ pub fn BreadcrumbPage() -> impl IntoView { "UI" "Thaw" - - - "Leptos" - - - "UI" - - - "Thaw" - - - "#, - "rust" - ) - > + + + {highlight_str!( + r#" + + + "Leptos" + + + "UI" + + + "Thaw" + + + "#, + "rust" + )} - ""

"Separator"

@@ -44,27 +42,25 @@ pub fn BreadcrumbPage() -> impl IntoView { "UI" "Thaw" - - - "Leptos" - - - "UI" - - - "Thaw" - - - "#, - "rust" - ) - > + + + {highlight_str!( + r#" + + + "Leptos" + + + "UI" + + + "Thaw" + + + "#, + "rust" + )} - ""

"Breadcrumb Props"

@@ -81,7 +77,7 @@ pub fn BreadcrumbPage() -> impl IntoView { "separator" "MaybeSignal" - r#""/""# + "/" "Breadcrumb separator." diff --git a/demo/src/pages/button/mod.rs b/demo/src/pages/button/mod.rs index ee3077c..675c374 100644 --- a/demo/src/pages/button/mod.rs +++ b/demo/src/pages/button/mod.rs @@ -15,28 +15,26 @@ pub fn ButtonPage() -> impl IntoView { - - "Primary" - - - - - "#, - "rust" - ) - > + + + {highlight_str!( + r#" + + + + + "#, + "rust" + )} - ""

"color"

@@ -47,28 +45,26 @@ pub fn ButtonPage() -> impl IntoView { - - "Primary Color" - - - - - "#, - "rust" - ) - > + + + {highlight_str!( + r#" + + + + + "#, + "rust" + )} - ""

"icon"

@@ -83,21 +79,19 @@ pub fn ButtonPage() -> impl IntoView { round=true /> - - "Error Color Icon" - - - "#, - "rust" - ) - > + + + {highlight_str!( + r#" + + + "#, + "rust" + )} - "" @@ -107,18 +101,16 @@ pub fn ButtonPage() -> impl IntoView { - + + {highlight_str!( r#" "#, "rust" - ) - > + )} - ""

"Button Props"

@@ -135,7 +127,7 @@ pub fn ButtonPage() -> impl IntoView { "style" "MaybeSignal" - r#""""# + "Default::default()" "Button's style." @@ -215,36 +207,34 @@ fn LoadingButton() -> impl IntoView { "Click Me" - - - - - } - "#, - "rust" - ) - > + + + {highlight_str!( + r#" + let loading = create_rw_signal(false); + let on_click = move |_| { + loading.set(true); + set_timeout( + move || { + loading.set(false); + }, + std::time::Duration::new(2, 0), + ); + }; + view! { + + + + + } + "#, + "rust" + )} - "" } diff --git a/demo/src/pages/card/mod.rs b/demo/src/pages/card/mod.rs index 083b60f..276fb3e 100644 --- a/demo/src/pages/card/mod.rs +++ b/demo/src/pages/card/mod.rs @@ -10,67 +10,55 @@ pub fn CardPage() -> impl IntoView {

"Card"

+ "content" + "header-extra" "content" - - "header-extra" - + "header" "content" - - "header" - + "header-extra" "content" - - - - "header-extra" - - "content" - - "footer" - + "footer" - - - "content" - - - - "header-extra" - - "content" - - - - "header" - - "content" - - - - "header-extra" - - "content" - - "footer" - - - - "#, - "rust" - ) - > + + + {highlight_str!( + r#" + + + "content" + + + + "header-extra" + + "content" + + + + "header" + + "content" + + + + "header-extra" + + "content" + + "footer" + + + + "#, + "rust" + )} - ""

"Card Props"

@@ -87,7 +75,7 @@ pub fn CardPage() -> impl IntoView { "title" "MaybeSignal" - r#""""# + "Default::default()" "Card title." diff --git a/demo/src/pages/checkbox/mod.rs b/demo/src/pages/checkbox/mod.rs index 71f3495..1fb699c 100644 --- a/demo/src/pages/checkbox/mod.rs +++ b/demo/src/pages/checkbox/mod.rs @@ -14,9 +14,9 @@ pub fn CheckboxPage() -> impl IntoView {

"Checkbox"

"Click" - + + {highlight_str!( r#" let value = create_rw_signal(false); @@ -27,10 +27,8 @@ pub fn CheckboxPage() -> impl IntoView { } "#, "rust" - ) - > + )} - ""

"group"

@@ -41,25 +39,23 @@ pub fn CheckboxPage() -> impl IntoView {
"value: " {move || format!("{:?}", value.get())}
- + + {highlight_str!( r#" - let value = create_rw_signal(HashSet::new()); - - view! { - - - - - - } - "#, + let value = create_rw_signal(HashSet::new()); + + view! { + + + + + + } + "#, "rust" - ) - > + )} - ""

"Checkbox Props"

diff --git a/demo/src/pages/color_picker/mod.rs b/demo/src/pages/color_picker/mod.rs index f5e3988..257bcd3 100644 --- a/demo/src/pages/color_picker/mod.rs +++ b/demo/src/pages/color_picker/mod.rs @@ -12,21 +12,19 @@ pub fn ColorPickerPage() -> impl IntoView {

"Color Picker"

- + + {highlight_str!( r#" - let value = RGBA::default(); - - view! { - - } - "#, + let value = RGBA::default(); + + view! { + + } + "#, "rust" - ) - > + )} - ""

"ColorPicker Props"

diff --git a/demo/src/pages/components.rs b/demo/src/pages/components.rs index 0cf8a8c..7a1db5b 100644 --- a/demo/src/pages/components.rs +++ b/demo/src/pages/components.rs @@ -54,8 +54,7 @@ impl IntoView for MenuGroupOption { let Self { label, children } = self; view! { {children.into_iter().map(|v| v.into_view()).collect_view()} diff --git a/demo/src/pages/divider/mod.rs b/demo/src/pages/divider/mod.rs index 80169de..f588e51 100644 --- a/demo/src/pages/divider/mod.rs +++ b/demo/src/pages/divider/mod.rs @@ -9,22 +9,18 @@ pub fn DividerPage() -> impl IntoView {

"Divider"

- "top" - - "bottom" - - "bottom" - "#, - "rust" - ) - > + "top" "bottom" + + + {highlight_str!( + r#" + "top" + + "bottom" + "#, + "rust" + )} - ""
diff --git a/demo/src/pages/grid/mod.rs b/demo/src/pages/grid/mod.rs index ba0ff13..da508f2 100644 --- a/demo/src/pages/grid/mod.rs +++ b/demo/src/pages/grid/mod.rs @@ -8,7 +8,7 @@ use thaw::*; pub fn GridPage() -> impl IntoView { view! {

"Grid"

@@ -36,27 +36,25 @@ pub fn GridPage() -> impl IntoView { "789" - + + {highlight_str!( r#" - - "123" - "456" - "789" - - - - "123" - "456" - "789" - - "#, + + "123" + "456" + "789" + + + + "123" + "456" + "789" + + "#, "rust" - ) - > + )} - ""

"gap"

@@ -73,28 +71,26 @@ pub fn GridPage() -> impl IntoView { "567" "567" - - "123" - "321" - "123" - "456" - "7" - "123" - "123" - "1234" - "567" - "567" - - "#, - "rust" - ) - > + + + {highlight_str!( + r#" + + "123" + "321" + "123" + "456" + "7" + "123" + "123" + "1234" + "567" + "567" + + "#, + "rust" + )} - ""

"gap"

@@ -103,20 +99,18 @@ pub fn GridPage() -> impl IntoView { "123" "456" - - "123" - "456" - - "#, - "rust" - ) - > + + + {highlight_str!( + r#" + + "123" + "456" + + "#, + "rust" + )} - ""

"Grid Props"

diff --git a/demo/src/pages/guide/installation.rs b/demo/src/pages/guide/installation.rs index d202b36..bd75d03 100644 --- a/demo/src/pages/guide/installation.rs +++ b/demo/src/pages/guide/installation.rs @@ -8,15 +8,12 @@ pub fn InstallationPage() -> impl IntoView {

"Installation"

"Installation thaw"

- "" - - "" - - + + + "cargo add thaw" + +
} } diff --git a/demo/src/pages/guide/mod.rs b/demo/src/pages/guide/mod.rs index a2b011d..edb8cab 100644 --- a/demo/src/pages/guide/mod.rs +++ b/demo/src/pages/guide/mod.rs @@ -35,9 +35,9 @@ pub fn GuidePage() -> impl IntoView { - { - gen_guide_menu_data().into_view() - } + + {gen_guide_menu_data().into_view()} + @@ -58,9 +58,9 @@ impl IntoView for MenuGroupOption { let Self { label, children } = self; view! { - { - children.into_iter().map(|v| v.into_view()).collect_view() - } + + {children.into_iter().map(|v| v.into_view()).collect_view()} + } } @@ -74,9 +74,7 @@ pub(crate) struct MenuItemOption { impl IntoView for MenuItemOption { fn into_view(self) -> View { let Self { label, value } = self; - view! { - - } + view! { } } } diff --git a/demo/src/pages/guide/usage.rs b/demo/src/pages/guide/usage.rs index 3b54ddf..7e93f51 100644 --- a/demo/src/pages/guide/usage.rs +++ b/demo/src/pages/guide/usage.rs @@ -10,47 +10,43 @@ pub fn UsagePage() -> impl IntoView {

"You just need to import thaw and use it."

"" - + + + {highlight_str!( + r#" + // Import all + use thaw::*; + // Import on Demand + use thaw::{Button, ButtonVariant}; + "#, + "rust" + )} - ""

"A small example:"

"" - impl IntoView { - view! { - - } - } - "#, - "rust" - ) - > + + + {highlight_str!( + r#" + use leptos::*; + use thaw::*; + + fn main() { + mount_to_body(App) + } + #[component] + pub fn App() -> impl IntoView { + view! { + + } + } + "#, + "rust" + )} - "" diff --git a/demo/src/pages/icon/mod.rs b/demo/src/pages/icon/mod.rs index 87acc19..865f99b 100644 --- a/demo/src/pages/icon/mod.rs +++ b/demo/src/pages/icon/mod.rs @@ -10,23 +10,21 @@ pub fn IconPage() -> impl IntoView {

"Icon"

- - + + - - - - - "#, - "rust" - ) - > + + + {highlight_str!( + r#" + + + + + "#, + "rust" + )} - ""

"Icon Props"

@@ -49,13 +47,13 @@ pub fn IconPage() -> impl IntoView { "width" "Option>" - r#""1em""# + "1em" "The width of the icon." "height" "Option>" - r#""1em""# + "1em" "The height of the icon." diff --git a/demo/src/pages/image/mod.rs b/demo/src/pages/image/mod.rs index 1069cbb..1b6e5a9 100644 --- a/demo/src/pages/image/mod.rs +++ b/demo/src/pages/image/mod.rs @@ -11,18 +11,16 @@ pub fn ImagePage() -> impl IntoView { - - - "#, - "rust" - ) - > + + + {highlight_str!( + r#" + + + "#, + "rust" + )} - ""

"Image Props"

@@ -39,37 +37,37 @@ pub fn ImagePage() -> impl IntoView { "src" "MaybeSignal" - r#""""# + "Default::default()" "Image source." "alt" "MaybeSignal" - r#""""# + "Default::default()" "Image alt information." "width" "MaybeSignal" - r#""""# + "Default::default()" "Image width." "height" "MaybeSignal" - r#""""# + "Default::default()" "Image height." "border_radius" "MaybeSignal" - r#""""# + "Default::default()" "Image border radius." "object_fit" "MaybeSignal" - r#""""# + "Default::default()" "Object-fit type of the image in the container." diff --git a/demo/src/pages/input/mod.rs b/demo/src/pages/input/mod.rs index cf2dfd9..0825f54 100644 --- a/demo/src/pages/input/mod.rs +++ b/demo/src/pages/input/mod.rs @@ -14,25 +14,22 @@ pub fn InputPage() -> impl IntoView { - + + {highlight_str!( r#" - let value = create_rw_signal(String::from("o")); - - view! { - - - - - } - "#, + let value = create_rw_signal(String::from("o")); + + view! { + + + + + } + "#, "rust" - ) - > + )} - "" - ""

"Prefix & Suffix"

@@ -44,9 +41,7 @@ pub fn InputPage() -> impl IntoView { - - "$" - + "$" @@ -54,38 +49,35 @@ pub fn InputPage() -> impl IntoView { - + + {highlight_str!( r#" - let value = create_rw_signal(String::from("o")); - - view! { - - - - - - - - - "$" - - - - - - - - - } - "#, + let value = create_rw_signal(String::from("o")); + + view! { + + + + + + + + + "$" + + + + + + + + + } + "#, "rust" - ) - > + )} - "" - ""

"Input Props"

@@ -102,7 +94,7 @@ pub fn InputPage() -> impl IntoView { "value" "RwSignal" - r#""""# + "Default::default()" "Set the input value" @@ -114,14 +106,16 @@ pub fn InputPage() -> impl IntoView { "placeholder" "MaybeSignal" - r#""""# + "Default::default()" "Placeholder of input." "allow_value" "Option>" "None" - "Check the incoming value, if it returns false, input will not be accepted." + + "Check the incoming value, if it returns false, input will not be accepted." + "on_focus" diff --git a/demo/src/pages/input_number/mod.rs b/demo/src/pages/input_number/mod.rs index c718057..695229d 100644 --- a/demo/src/pages/input_number/mod.rs +++ b/demo/src/pages/input_number/mod.rs @@ -15,25 +15,22 @@ pub fn InputNumberPage() -> impl IntoView { - - - - - } - "#, - "rust" - ) - > + + + {highlight_str!( + r#" + let value = create_rw_signal(0); + let value_f64 = create_rw_signal(0.0); + view! { + + + + + } + "#, + "rust" + )} - "" - ""

"InputNumber Props"

@@ -56,14 +53,16 @@ pub fn InputNumberPage() -> impl IntoView { "placeholder" "MaybeSignal" - r#""""# + "Default::default()" "Placeholder of input number." "step" "MaybeSignal" - "The number which the current value is increased or decreased on key or button press." + + "The number which the current value is increased or decreased on key or button press." + diff --git a/demo/src/pages/layout/mod.rs b/demo/src/pages/layout/mod.rs index 946a28b..b0bb3ba 100644 --- a/demo/src/pages/layout/mod.rs +++ b/demo/src/pages/layout/mod.rs @@ -10,51 +10,55 @@ pub fn LayoutPage() -> impl IntoView {

"Layout"

- "Header" + + "Header" + "Content" - - "Header" - "Content" -
- "#, - "rust" - ) - > + + + {highlight_str!( + r#" + + "Header" + "Content" + + "#, + "rust" + )} - ""

"sider"

- "Sider" + + "Sider" + - "Header" - "Content" - - - - "Sider" - - "Header" - "Content" + + "Header" + + + "Content" - "#, - "rust" - ) - > +
+ + + {highlight_str!( + r#" + + "Sider" + + "Header" + "Content" + + + "#, + "rust" + )} - ""

"Layout Props"

@@ -71,14 +75,16 @@ pub fn LayoutPage() -> impl IntoView { "style" "MaybeSignal" - r#""""# + "Default::default()" "Layout's style." "position" "LayoutPosition" "LayoutPosition::Static" - "static position will make it css position set to static. absolute position will make it css position set to absolute and left, right, top, bottom to 0. absolute position is very useful when you want to make content scroll in a fixed container or make the whole page's layout in a fixed position. You may need to change the style of the component to make it display as you expect." + + "static position will make it css position set to static. absolute position will make it css position set to absolute and left, right, top, bottom to 0. absolute position is very useful when you want to make content scroll in a fixed container or make the whole page's layout in a fixed position. You may need to change the style of the component to make it display as you expect." + "has_sider" @@ -108,7 +114,7 @@ pub fn LayoutPage() -> impl IntoView { "style" "MaybeSignal" - r#""""# + "Default::default()" "LayoutHeader's style." diff --git a/demo/src/pages/loading_bar/mod.rs b/demo/src/pages/loading_bar/mod.rs index 1b0d6d9..738163e 100644 --- a/demo/src/pages/loading_bar/mod.rs +++ b/demo/src/pages/loading_bar/mod.rs @@ -27,34 +27,31 @@ pub fn LoadingBarPage() -> impl IntoView { - - - - - - } - "#, - "rust" - ) - > + + + {highlight_str!( + r#" + let loading_bar = use_loading_bar(); + let start = move |_| { + loading_bar.start(); + }; + let finish = move |_| { + loading_bar.finish(); + }; + let error = move |_| { + loading_bar.error(); + }; + view! { + + + + + + } + "#, + "rust" + )} - "" - ""

"LoadingBar Injection Methods"

diff --git a/demo/src/pages/menu/mod.rs b/demo/src/pages/menu/mod.rs index d77ffa7..f05c041 100644 --- a/demo/src/pages/menu/mod.rs +++ b/demo/src/pages/menu/mod.rs @@ -14,22 +14,20 @@ pub fn MenuPage() -> impl IntoView { - - - - - "#, - "rust" - ) - > + + + {highlight_str!( + r#" + let value = create_rw_signal(String::from("o")); + + + + + + "#, + "rust" + )} - ""

"Menu Props"

@@ -46,7 +44,7 @@ pub fn MenuPage() -> impl IntoView { "value" "MaybeSignal" - r#""""# + "Default::default()" "The selected item key of the menu." @@ -96,13 +94,13 @@ pub fn MenuPage() -> impl IntoView { "label" "MaybeSignal" - r#""""# + "Default::default()" "The label of the menu item." "key" "MaybeSignal" - r#""""# + "Default::default()" "The indentifier of the menu item." diff --git a/demo/src/pages/message/mod.rs b/demo/src/pages/message/mod.rs index 149ca03..608f65a 100644 --- a/demo/src/pages/message/mod.rs +++ b/demo/src/pages/message/mod.rs @@ -35,41 +35,39 @@ pub fn MessagePage() -> impl IntoView { - - - - - - } - "#, - "rust" - ) - > + + + {highlight_str!( + r#" + let message = use_message(); + let success = move |_| { + message.create( + "Success".into(), + MessageVariant::Success, + Default::default(), + ); + }; + let warning = move |_| { + message.create( + "Warning".into(), + MessageVariant::Warning, + Default::default(), + ); + }; + let error = move |_| { + message.create("Error".into(), MessageVariant::Error, Default::default()); + }; + view! { + + + + + + } + "#, + "rust" + )} - ""

"MessageProvider Injection Methods"

@@ -84,7 +82,9 @@ pub fn MessagePage() -> impl IntoView { "create" - "fn(&self, content: String, variant: MessageVariant, options: MessageOptions)" + + "fn(&self, content: String, variant: MessageVariant, options: MessageOptions)" + "The label of the menu item." diff --git a/demo/src/pages/mobile.rs b/demo/src/pages/mobile.rs index 3699d0e..cce333b 100644 --- a/demo/src/pages/mobile.rs +++ b/demo/src/pages/mobile.rs @@ -14,10 +14,7 @@ pub fn MobilePage(path: &'static str) -> impl IntoView { }); view! {
- +
} } diff --git a/demo/src/pages/modal/mod.rs b/demo/src/pages/modal/mod.rs index 45a7e1b..3a3575a 100644 --- a/demo/src/pages/modal/mod.rs +++ b/demo/src/pages/modal/mod.rs @@ -14,24 +14,22 @@ pub fn ModalPage() -> impl IntoView { "hello" - + + {highlight_str!( r#" - let show = create_rw_signal(false); - - - - "hello" - - "#, + let show = create_rw_signal(false); + + + + "hello" + + "#, "rust" - ) - > + )} - ""

"Modal Props"

@@ -54,7 +52,7 @@ pub fn ModalPage() -> impl IntoView { "title" "MaybeSignal" - r#""""# + "Default::default()" "Modal title." diff --git a/demo/src/pages/nav_bar/mod.rs b/demo/src/pages/nav_bar/mod.rs index 01aaad1..cf1652f 100644 --- a/demo/src/pages/nav_bar/mod.rs +++ b/demo/src/pages/nav_bar/mod.rs @@ -15,33 +15,31 @@ pub fn NavBarPage() -> impl IntoView {

"Navbar"

"" - - -
{move || click_text.get()}
- - } - "#, - "rust" - ) - > + + + {highlight_str!( + r#" + let click_text = create_rw_signal(String::from("none")); + let on_click_left = move |_| click_text.set("left".to_string()); + let on_click_right = move |_| click_text.set("right".to_string()); + + view! { +
+ +
{move || click_text.get()}
+
+ } + "#, + "rust" + )} - ""

"NavBar Props"

@@ -58,7 +56,7 @@ pub fn NavBarPage() -> impl IntoView { "title" "MaybeSignal" - r#""""# + "Default::default()" "NavBar title." @@ -70,25 +68,25 @@ pub fn NavBarPage() -> impl IntoView { "left_text" "MaybeSignal" - r#""""# + "Default::default()" "NavBar left text." "on_click_left" "MaybeSignal" - r#""""# + "Default::default()" "NavBar left click." "right_text" "MaybeSignal" - r#""""# + "Default::default()" "NavBar right text." "on_click_right" "MaybeSignal" - r#""""# + "Default::default()" "NavBar right click." diff --git a/demo/src/pages/progress/mod.rs b/demo/src/pages/progress/mod.rs index 2437e1b..59a8e25 100644 --- a/demo/src/pages/progress/mod.rs +++ b/demo/src/pages/progress/mod.rs @@ -12,50 +12,44 @@ pub fn ProgressPage() -> impl IntoView { - + - - + + - + + {highlight_str!( r#" - let percentage = create_rw_signal(0.0f32); - - view! { - - - - - - - - - - + let percentage = create_rw_signal(0.0f32); + + view! { + + + + + + + + + + + - - } - "#, + } + "#, "rust" - ) - > + )} - ""

"Progress Props"

diff --git a/demo/src/pages/radio/mod.rs b/demo/src/pages/radio/mod.rs index 893a787..bd031ae 100644 --- a/demo/src/pages/radio/mod.rs +++ b/demo/src/pages/radio/mod.rs @@ -11,23 +11,21 @@ pub fn RadioPage() -> impl IntoView {

"Radio"

"Click" - + + {highlight_str!( r#" - let value = create_rw_signal(false); - - view! { - - "Click" - - } - "#, + let value = create_rw_signal(false); + + view! { + + "Click" + + } + "#, "rust" - ) - > + )} - ""

"Radio Props"

diff --git a/demo/src/pages/select/mod.rs b/demo/src/pages/select/mod.rs index 7f3215b..61b9845 100644 --- a/demo/src/pages/select/mod.rs +++ b/demo/src/pages/select/mod.rs @@ -16,23 +16,21 @@ pub fn SelectPage() -> impl IntoView {

"Select"

- "#, + let selected_value = create_rw_signal(Some(String::from("apple"))); + let options = vec![SelectOption { + label: String::from("apple"), + value: String::from("apple"), + }]; + +