A fluid button with primary, secondary, tertiary, and ghost variants. Supports sizes, leading/trailing icons, icon-only mode, and animated loading state.
"use client"; import { useState } from "react"; import { Button } from "@/components/ui/button"; export function ButtonLoadingDemo() { const [loading, setLoading] = useState(false); const handleClick = () => { setLoading(true); setTimeout(() => setLoading(false), 2500); }; return ( <div className="flex items-center justify-center min-h-screen bg-background"> <div className="flex gap-3"> <Button loading={loading} onClick={handleClick}> {loading ? "Saving..." : "Save changes"} </Button> <Button loading variant="secondary">Loading</Button> <Button loading variant="tertiary">Loading</Button> </div> </div> ); } export default { ButtonLoadingDemo };
Part of Fluid Functionalism — browse the full library on 21st.dev.