{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "back-to-top-button", "type": "registry:ui", "title": "Back to Top Button", "description": "A back to top button component that can be used to quickly scroll to the top of the page.", "registryDependencies": [ "@tra-kit/button" ], "files": [ { "path": "registry/tra-kit/components/back-to-top-button.tsx", "content": "import React, { useState, useEffect } from 'react';\r\nimport { CaretUpIcon } from '@phosphor-icons/react';\r\nimport { cva } from 'class-variance-authority';\r\nimport { cn } from '@/lib/utils';\r\nimport Button from '@/components/ui/button';\r\n\r\nconst buttonVariants = cva(\r\n `size-10 min-h-10 min-w-10 rounded-full border border-neutral-grey\r\n text-neutral-grey transition-opacity duration-300 group-hover:border-primary \r\n group-hover:text-primary!`,\r\n {\r\n variants: {\r\n isVisible: {\r\n true: 'opacity-100',\r\n false: 'pointer-events-none opacity-0',\r\n },\r\n },\r\n },\r\n);\r\n\r\ninterface IBackToTopButton {\r\n buttonClassName?: string;\r\n containerClassName?: string;\r\n icon?: React.ReactNode;\r\n iconClassName?: string;\r\n scrollThreshold?: number;\r\n}\r\n\r\nconst BackToTopButton: React.FC = ({\r\n buttonClassName,\r\n containerClassName,\r\n icon,\r\n iconClassName,\r\n scrollThreshold = 500,\r\n}) => {\r\n const [isVisible, setIsVisible] = useState(false);\r\n\r\n const toggleVisibility = () => {\r\n setIsVisible(window.scrollY > scrollThreshold);\r\n };\r\n\r\n const scrollToTop = () => {\r\n window.scrollTo({\r\n top: 0,\r\n behavior: 'smooth',\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n window.addEventListener('scroll', toggleVisibility);\r\n return () => window.removeEventListener('scroll', toggleVisibility);\r\n }, []);\r\n\r\n const IconComponent = icon ?? ;\r\n\r\n if (!isVisible) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n {IconComponent}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default BackToTopButton;\r\n", "type": "registry:ui" } ] }