leptos_components/
card.rs1use components_core::{BASE_CLASS, concat};
2use leptos::prelude::*;
3
4#[derive(Default, Debug, PartialEq)]
5pub enum Variant {
6 #[default]
7 Normal,
8 Resource,
9}
10
11#[component]
12pub fn Card(
13 children: Children,
14 #[prop(into, optional, default = Variant::Normal)] variant: Variant,
15 #[prop(into, optional)] class: String,
16 #[prop(into, optional, default = false)] clickable: bool,
17 #[prop(into, optional, default = false)] disabled: bool,
18) -> impl IntoView {
19 let mut class = crate::tw!(
20 concat!(BASE_CLASS, "-card"),
21 clickable.then_some(concat!(BASE_CLASS, "-card--clickable")),
22 disabled.then_some(concat!("disabled ", BASE_CLASS, "-card--disabled")),
23 class
24 );
25
26 if variant == Variant::Resource {
27 class = format!("{}-card--resource relative", BASE_CLASS);
28
29 return view! {
30 <div class={class}>
31 <svg viewBox="0 0 334 444" fill="none" xmlns="http://www.w3.org/2000/svg" class="drop-shadow-resource-card">
32 <path d="M267.221 2C275.589 2 283.519 5.74306 288.838 12.2038L325.617 56.8794C329.744 61.892 332 68.1829 332 74.6756V414C332 429.464 319.464 442 304 442H30C14.536 442 2 429.464 2 414V30C2 14.536 14.536 2 30 2H267.221Z" fill="#3D3D3D" stroke="black" stroke-width="2"/>
33 </svg>
34 <div class="rustlanges-card--resource-body">
35 {children()}
36 </div>
37 </div>
38 }.into_any();
39 }
40
41 view! {
42 <div class={class}>
43 {children()}
44 </div>
45 }
46 .into_any()
47}