diff --git a/gh-pages/src/pages/button/mod.rs b/gh-pages/src/pages/button/mod.rs
index 1a6bdac..6162124 100644
--- a/gh-pages/src/pages/button/mod.rs
+++ b/gh-pages/src/pages/button/mod.rs
@@ -113,24 +113,46 @@ pub fn ButtonPage() -> impl IntoView {
#[component]
pub fn LoadingButton() -> impl IntoView {
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! {
-
"loading"
+ "Loading"
-
- "ERROR Color Icon"
-
-
-
+
+
+ "Click Me"
+
+
+ "Click Me"
+
+
}
"#, "rust")>
""
diff --git a/src/button/button.css b/src/button/button.css
index f0691b3..7e3f764 100644
--- a/src/button/button.css
+++ b/src/button/button.css
@@ -5,7 +5,6 @@
color: var(--font-color);
border: 1px solid var(--border-color);
border-radius: 5px;
- cursor: pointer;
display: inline-flex;
align-items: center;
@@ -14,12 +13,14 @@
}
.melt-button:hover {
- transition: all 0.3s;
border-color: var(--border-color-hover);
background-color: var(--background-color-hover);
+ cursor: pointer;
+
+ transition: all 0.3s;
}
-.melt-button:active {
+.melt-button:active:not(.melt-button--disabled) {
transition: all 0.3s;
border-color: var(--border-color-hover);
background-color: var(--background-color-active);
diff --git a/src/button/mod.rs b/src/button/mod.rs
index c6f976e..83e265c 100644
--- a/src/button/mod.rs
+++ b/src/button/mod.rs
@@ -58,6 +58,8 @@ pub fn Button(
#[prop(optional, into)] round: MaybeSignal,
#[prop(optional, into)] icon: Option,
#[prop(optional, into)] loading: MaybeSignal,
+ #[prop(optional, into)] disabled: MaybeSignal,
+ #[prop(optional, into)] on_click: Option>,
#[prop(optional)] children: Option,
) -> impl IntoView {
let theme = use_theme(Theme::light);
@@ -90,13 +92,33 @@ pub fn Button(
""
};
+ let disabled = create_memo(move |_| {
+ if loading.get() {
+ return true;
+ }
+
+ disabled.get()
+ });
+
+ let on_click = move |event| {
+ if disabled.get() {
+ return;
+ }
+ let Some(callback) = on_click.as_ref() else {
+ return;
+ };
+ callback.call(event);
+ };
+
view! {class=class_name,
{
move || {