"use client" import { Button } from "@/components/ui/button" import { Card } from "@/components/ui/card" import { Input } from "@/components/ui/input" import { cn } from "@/lib/utils" import { motion, useAnimation, useInView } from "framer-motion" import { Github, Heart, Search, Sparkles } from "lucide-react" import Link from "next/link" import { useEffect, useRef, useState } from "react" interface IconCardProps { name: string imageUrl: string } function IconCard({ name, imageUrl }: IconCardProps) { return (
{name}

{name}

) } function ElegantShape({ className, delay = 0, width = 400, height = 100, rotate = 0, gradient = "from-rose-500/[0.5]", mobileWidth, mobileHeight, }: { className?: string delay?: number width?: number height?: number rotate?: number gradient?: string mobileWidth?: number mobileHeight?: number }) { const controls = useAnimation() const [isMobile, setIsMobile] = useState(false) const ref = useRef(null) const isInView = useInView(ref, { once: true, amount: 0.1 }) useEffect(() => { const checkMobile = () => { setIsMobile(window.innerWidth < 768) } checkMobile() window.addEventListener("resize", checkMobile) return () => window.removeEventListener("resize", checkMobile) }, []) useEffect(() => { if (isInView) { controls.start({ opacity: 1, y: 0, rotate: rotate, transition: { type: "spring", stiffness: 50, damping: 20, duration: 1.8, delay, ease: [0.23, 0.86, 0.39, 0.96], opacity: { duration: 1.2 }, }, }) } }, [controls, delay, isInView, rotate]) return (
) } export function HeroSection({ totalIcons }: { totalIcons: number }) { const [searchQuery, setSearchQuery] = useState("") const fadeUpVariants = { hidden: { opacity: 0, y: 30 }, visible: (i: number) => ({ opacity: 1, y: 0, transition: { duration: 1, delay: 0.5 + i * 0.2, ease: [0.25, 0.4, 0.25, 1], }, }), } return (
Made with love by Homarr Labs

Your definitive source for
dashboard icons.

A collection of {totalIcons} curated icons for services, applications and tools, designed specifically for dashboards and app directories.

setSearchQuery(e.target.value)} />
) }