leptos_ui 0.1.4

Build modular UI components in just 1 line. Tailored for the Leptos framework.
Documentation
pub use leptos::prelude::*;
pub use tw_merge::*;

/// A macro that creates a component with tailwind class merging
///
/// # Example
///
/// ```
/// use leptos::prelude::*;
/// use leptos_ui::clx;
///
/// // Define the component
/// clx! {Card, div, "rounded-lg p-4", "bg-sky-500"} // 🩵
///
/// #[component]
/// pub fn DemoCard() -> impl IntoView {
///     view! {
///         <Card>"Card bg-sky-500 🩵"</Card>
///         <Card class="bg-orange-500">"Card bg-orange-500 🧡"</Card>
///     }
/// }
/// ```
#[macro_export]
macro_rules! clx {
    ($name:ident, $element:ident, $($base_class:expr),+ $(,)?) => {
        #[component]
        pub fn $name(
            #[prop(into, optional)] class: Signal<String>,
            children: Children,
        ) -> impl IntoView {
            let merged_classes = Memo::new(move |_| {
                tw_merge::tw_merge!(tw_merge::tw_join!($($base_class),+), class())
            });

            view! {
                <$element class=merged_classes>
                    {children()}
                </$element>
            }
        }
    };
}