use leptos::prelude::*;
#[component]
pub fn AreaFill(
#[prop(into)]
d: Signal<String>,
#[prop(into)]
series_color: Signal<String>,
gradient_id: String,
#[prop(default = false)]
use_gradient: bool,
#[prop(default = 0.35)]
fill_opacity: f64,
) -> impl IntoView {
let gid = gradient_id.clone();
let fill = Signal::derive(move || {
if use_gradient {
format!("url(#{gid})")
} else {
series_color.get()
}
});
view! {
{use_gradient.then(|| {
let grad = gradient_id.clone();
view! {
<defs>
<linearGradient id=grad x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color=move || series_color.get() />
<stop offset="100%" stop-color=move || series_color.get() stop-opacity="0" />
</linearGradient>
</defs>
}
})}
<path
class="orb-area-fill"
d=move || d.get()
fill=move || fill.get()
fill-opacity=fill_opacity
/>
}
}
pub fn area_gradient_id(series_id: &str) -> String {
format!("orb-area-grad-{series_id}")
}