Empty Testimonial
uselayouts/empty-testimonialFreeComponent
An interactive empty state for testimonials with a playful folder animation.
Live preview
live · rendered by the registry
Rendered by uselayouts on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://uselayouts.com/r/empty-testimonial.jsonSource
1"use client";2import { motion } from "motion/react";3import { useState } from "react";4import { HugeiconsIcon } from "@hugeicons/react";5import { Add01Icon } from "@hugeicons/core-free-icons";67export default function EmptyTestimonial() {8 const [isOpen, setIsOpen] = useState(false);9 const [isHovered, setIsHovered] = useState(false);1011 const pageVariants = {12 spring: { type: "spring" as const, duration: 0.6 },13 };1415 return (16 <div className="w-full flex flex-col items-center justify-center py-24 px-4">17 <div className="mb-20 text-center">18 <h2 className="text-3xl font-medium tracking-tight text-foreground md:text-4xl lg:text-5xl">19 Wall of{" "}20 <motion.span21 onHoverStart={() => setIsHovered(true)}22 onHoverEnd={() => setIsHovered(false)}23 className="relative cursor-default inline-flex items-center gap-2 px-4 py-1 rounded-2xl bg-primary/5 border border-primary/10 text-primary hover:bg-primary/10 hover:border-primary/20 transition-colors duration-300"24 >25 Love26 <motion.span27 animate={28 isHovered29 ? {30 scale: [1, 1.1, 1],31 }32 : { scale: 1 }33 }34 transition={{35 duration: 0.7,36 repeat: isHovered ? Infinity : 0,37 ease: "easeInOut",38 }}39 className="inline-block"40 >41 💖42 </motion.span>43 </motion.span>44 </h2>45 </div>4647 <div48 onClick={() => setIsOpen(!isOpen)}49 className="w-80 h-52 relative group cursor-pointer mb-12"50 >51 <div52 className="folder-back relative w-[87.5%] mx-auto h-full flex justify-center rounded-xl overflow-visible"53 style={{54 background: "#EBEBEB",55 border: "1px solid #D1D1D1",56 }}57 >58 {[59 {60 initial: { rotate: -3, x: -38, y: 2 },61 open: { rotate: -8, x: -70, y: -75 },62 transition: {63 type: "spring" as const,64 bounce: 0.15,65 stiffness: 160,66 damping: 22,67 },68 className: "z-10",69 },70 {71 initial: { rotate: 0, x: 0, y: 0 },72 open: { rotate: 1, x: 2, y: -95 },73 transition: {74// … truncated
What it pulls in
npm packages
Files it writes
More from uselayouts
All 26 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| 3D Book3d-book | uselayouts | Components | Free | 3 deps | |
| Animated Collectionanimated-collection | uselayouts | Components | Free | 5 deps | |
| Bento Cardbento-card | uselayouts | Components | Free | 5 deps | |
| Bottom Menubottom-menu | uselayouts | Components | Free | 6 deps | |
| Bucketbucket | uselayouts | Components | Free | 5 deps · 2 files | |
| Day Pickerday-picker | uselayouts | Components | Free | 5 deps | |
| Delete Buttondelete-button | uselayouts | Components | Free | 5 deps | |
| Discover Buttondiscover-button | uselayouts | Components | Free | 5 deps |
