[![Latest Version](https://img.shields.io/crates/v/leptos_twelements.svg)](https://crates.io/crates/leptos_twelements) [![docs.rs](https://docs.rs/leptos_twelements/badge.svg)](https://docs.rs/leptos_twelements) [![unsafe forbidden](https://img.shields.io/badge/unsafe-forbidden-success.svg)](https://github.com/rust-secure-code/safety-dance/) leptos-twelements ----------------- A UI component library for [Leptos](https://leptos.dev/), based on [Tailwind Elements](https://tailwind-elements.com/). Installation (for projects using [cargo leptos](https://github.com/leptos-rs/cargo-leptos)) ----------------- 1. Use the nightly rust compiler. This crate doesn't work with stable rust yet. 2. Add the following to the `Cargo.toml` of your Leptos project: ```toml [dependencies] leptos-twelements = "^0.1.0" [build-dependencies] leptos-twelements = "^0.1.0" [features] ssr = [ # ... leptos probably already has some other entries here "leptos-twelements/ssr", # ... ] ``` 3. Add the following to your `tailwind.config.js`: ```js /** @type {import('tailwindcss').Config} */ module.exports = { content: { relative: true, files: [ ... "./target/.leptos-twelements/rs/**/*.rs", "./target/.leptos-twelements/js/**/*.js", ], }, plugins: [require("./target/.leptos-twelements/plugin.cjs")] } ``` Note that `plugin.cjs` and the `js` directory aren't there just yet, but we'll add a build script generating them in the next step. 4. Add the following `build.rs` to your Leptos project to generate those files: ```rust use std::path::Path; fn main() { let target_dir = Path::new(&env!("CARGO_MANIFEST_DIR")).join("target"); leptos_twelements::install_files_to(&target_dir); } ``` 5. Add a call to `.setup_twelements()` to the axum router setup: ```rust use leptos_twelements::AxumRouterExt; let app = Router::new() // ... .setup_twelements() // ... ``` This function call will add the necessary routes to your axum app to serve the JavaScript required by Tailwind Elements. Note that this code, including the `use` statement, should be guarded by a `#[cfg(feature = "ssr")]` attribute. The default leptos setup should already do this correctly. 6. Add `` to your `App` component: ```rust use leptos_twelements::TwElementsSetup; #[component] pub fn App(cx: Scope) -> impl IntoView { // ... view! { cx, // ... // ... } } ```