Delete Button
uselayouts/delete-buttonFreeComponent
A confirmation button with smooth icon transitions.
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/delete-button.jsonSource
1"use client";23import { Undo03Icon } from "@hugeicons/core-free-icons";4import { HugeiconsIcon } from "@hugeicons/react";5import { motion, AnimatePresence } from "motion/react";6import React, { useEffect, useState } from "react";78const DeleteButton = () => {9 const [isDeleting, setIsDeleting] = useState(false);10 const [count, setCount] = useState(10);11 const [isAnimating, setIsAnimating] = useState(false);1213 useEffect(() => {14 if (!isDeleting) return;1516 if (count === 0) return;1718 const timer = setTimeout(() => setCount((c) => c - 1), 1000);19 return () => clearTimeout(timer);20 }, [isDeleting, count]);2122 const handleClick = (newState: boolean) => {23 if (isAnimating) return;24 setIsAnimating(true);25 setIsDeleting(newState);26 if (newState) setCount(10);2728 // Release lock after animation completes29 setTimeout(() => setIsAnimating(false), 400);30 };3132 // Change Here33 const deleteText = "Delete Account";34 const cancelText = "Cancel Deletion";3536 return (37 <div className="flex items-center justify-center">38 <AnimatePresence mode="popLayout" initial={false}>39 {!isDeleting ? (40 // STATE A41 <motion.button42 key="delete"43 layoutId="deleteButton"44 onClick={() => handleClick(true)}45 whileTap={{ scale: 0.95 }}46 style={{ pointerEvents: isAnimating ? "none" : "auto" }}47 initial={{48 backgroundColor: "#FFEDF1",49 filter: "blur(1px)",50 opacity: 1,51 }}52 animate={{53 backgroundColor: "#FE322A",54 filter: "blur(0px)",55 opacity: 1,56 }}57 exit={{58 backgroundColor: "#FFEDF1",59 filter: "blur(1px)",60 opacity: 0,61 }}62 className="text-white px-5 py-3 rounded-full flex items-center justify-center overflow-hidden"63 transition={{64 layout: { duration: 0.4, ease: [0.77, 0, 0.175, 1] },65 backgroundColor: { duration: 0.4, ease: "easeInOut" },66 filter: { duration: 0.1, ease: "easeInOut" },67 opacity: { duration: 0.2, ease: "easeOut" },68 }}69 >70 <motion.span71 layoutId="buttonText"72 className="flex"73 initial={{ opacity: 0 }}74 animate={{ opacity: 1 }}75 exit={{ opacity: 0 }}76 transition={{ duration: 0.1 }}77 >78// … 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 | |
| Discover Buttondiscover-button | uselayouts | Components | Free | 5 deps | |
| Discrete Tabsdiscrete-tabs | uselayouts | Components | Free | 3 deps |
