use dioxus::prelude::*; use crate::i18n::{t, tw, Locale}; use crate::models::PricingPlan; /// Renders a pricing plan card with features list and call-to-action button. /// /// # Arguments /// /// * `plan` - The pricing plan data to render /// * `on_select` - Callback fired when the CTA button is clicked #[component] pub fn PricingCard(plan: PricingPlan, on_select: EventHandler) -> Element { let locale = use_context::>(); let l = *locale.read(); let card_class = if plan.highlighted { "pricing-card pricing-card--highlighted" } else { "pricing-card" }; let seats_label = match plan.max_seats { Some(n) => tw(l, "common.up_to_seats", &[("n", &n.to_string())]), None => t(l, "common.unlimited_seats"), }; rsx! { div { class: "{card_class}", h3 { class: "pricing-card-name", "{plan.name}" } div { class: "pricing-card-price", span { class: "pricing-card-amount", "{plan.price_eur}" } span { class: "pricing-card-period", " {t(l, \"common.eur_per_month\")}" } } p { class: "pricing-card-seats", "{seats_label}" } ul { class: "pricing-card-features", for feature in &plan.features { li { "{feature}" } } } button { class: "pricing-card-cta", onclick: { let id = plan.id.clone(); move |_| on_select.call(id.clone()) }, "{t(l, \"common.get_started\")}" } } } }