{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "status-button", "title": "Status Button", "description": "A button with animated states for idle, loading, and success.", "dependencies": [ "motion", "@hugeicons/core-free-icons", "@hugeicons/react", "clsx", "tailwind-merge" ], "registryDependencies": [ "button" ], "files": [ { "path": "registry/default/example/status-button.tsx", "content": "\"use client\";\r\n\r\nimport { Button } from \"@/components/ui/button\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { motion, AnimatePresence } from \"motion/react\";\r\nimport { Tick02Icon } from \"@hugeicons/core-free-icons\";\r\nimport { HugeiconsIcon } from \"@hugeicons/react\";\r\nimport { useMemo, useState } from \"react\";\r\n\r\nexport function SaveButton() {\r\n const [status, setStatus] = useState<\"idle\" | \"loading\" | \"success\">(\"idle\");\r\n\r\n const handleClick = () => {\r\n setStatus(\"loading\");\r\n setTimeout(() => {\r\n setStatus(\"success\");\r\n setTimeout(() => {\r\n setStatus(\"idle\");\r\n }, 2000);\r\n }, 2500);\r\n };\r\n\r\n const text = useMemo(() => {\r\n switch (status) {\r\n case \"idle\":\r\n return \"Save\";\r\n case \"loading\":\r\n return \"Saving\";\r\n case \"success\":\r\n return \"Saved\";\r\n }\r\n }, [status]);\r\n\r\n return (\r\n