diff --git a/examples/basic/src/main.rs b/examples/basic/src/main.rs index 3e2c781..6202280 100644 --- a/examples/basic/src/main.rs +++ b/examples/basic/src/main.rs @@ -7,15 +7,16 @@ fn main() { #[component] pub fn App(cx: Scope) -> impl IntoView { - let (count, set_count) = create_signal(cx, 0); + let (count, set_count) = create_signal(cx, 0.0); let (open, set_open) = create_signal(cx, true); view! { cx,
- + {move || count.get()} "sd" {move || count.get()} +
} } diff --git a/src/lib.rs b/src/lib.rs index 9d0a56b..2c944f6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,10 +1,12 @@ mod button; mod card; mod modal; +mod progress; mod table; mod teleport; mod utils; pub use button::*; pub use modal::*; +pub use progress::*; pub use table::*; diff --git a/src/progress/mod.rs b/src/progress/mod.rs new file mode 100644 index 0000000..5145449 --- /dev/null +++ b/src/progress/mod.rs @@ -0,0 +1,46 @@ +use crate::utils::mount_style::mount_style; +use leptos::*; +use stylers::style_sheet_str; + +#[component] +pub fn Progress( + cx: Scope, + #[prop(optional)] left_tip: Option>, + #[prop(optional)] right_tip: Option>, + percentage: ReadSignal, +) -> impl IntoView { + let class_name = mount_style("progress", || style_sheet_str!("./src/progress/progress.css")); + let style = move || format!("width: {}%", percentage.get()); + view! { + cx, class=class_name, +
+ + { + move || { + if let Some(left_tip) = left_tip { + left_tip.get() + } else { + "".into() + } + } + } + + + + + + + + { + move || { + if let Some(right_tip) = right_tip { + right_tip.get() + } else { + "".into() + } + } + } + +
+ } +} diff --git a/src/progress/progress.css b/src/progress/progress.css new file mode 100644 index 0000000..5cdb12a --- /dev/null +++ b/src/progress/progress.css @@ -0,0 +1,47 @@ +.melt-progress { + width: 100%; + display: flex; + justify-content: center; + align-items: center; + height: 24px; + padding: 0 8px; +} + +.melt-progress__tip-right, +.melt-progress__tip-left { + display: inline-block; + margin: 0 10px; + width: 48px; + text-align: center; + font-size: 12px; + color: #777; +} + +.melt-progress__progress { + flex: 1; + height: 3px; + background: #f2f2f2; + border-radius: 2px; + /* cursor: pointer; */ +} + +.melt-progress__progress-inner { + position: relative; + top: -14px; + display: inline-block; + background: red; + height: 100%; + transition: width 0.1s; +} + +.melt-progress__progress-circle { + display: inline-block; + position: absolute; + right: -3px; + top: -4px; + width: 10px; + height: 10px; + border-radius: 50%; + background: #fff; + box-shadow: 0 0 3px 2px #4443; +}