Logo Cloud 4
smoothui-registry/logo-cloud-4FreeBlock
Interactive logo grid with hover effects
Install it
npx shadcn@latest add https://www.smoothui.dev/r/logo-cloud-4.jsonSource
1"use client";23import { AnimatePresence, motion, useReducedMotion } from "motion/react";4import type React from "react";5import { useEffect, useState } from "react";6import {7 Canpoy,8 Canva,9 Casetext,10 Clearbit,11 Descript,12 Duolingo,13 Faire,14 Strava,15} from "@/components/smoothui/shared";1617export interface LogoGridProps {18 columns?: 3 | 4 | 5 | 6;19 description?: string;20 logos?: Array<{21 name: string;22 logo: React.ReactNode;23 href?: string;24 }>;25 title?: string;26}2728const DEFAULT_LOGOS = [29 { logo: <Canpoy />, name: "Canpoy" },30 { logo: <Canva />, name: "Canva" },31 { logo: <Casetext />, name: "Casetext" },32 { logo: <Strava />, name: "Strava" },33 { logo: <Descript />, name: "Descript" },34 { logo: <Duolingo />, name: "Duolingo" },35 { logo: <Faire />, name: "Faire" },36 { logo: <Clearbit />, name: "Clearbit" },37];3839const COLUMN_CLASSES = {40 3: "grid-cols-2 sm:grid-cols-3",41 4: "grid-cols-2 sm:grid-cols-4",42 5: "grid-cols-2 sm:grid-cols-3 lg:grid-cols-5",43 6: "grid-cols-2 sm:grid-cols-3 lg:grid-cols-6",44};4546// Animation constants47const HOVER_LIFT_OFFSET = -4;48const INACTIVE_OPACITY = 0.6;4950interface LogoItemProps {51 isHoverDevice: boolean;52 logo: {53 name: string;54 logo: React.ReactNode;55 href?: string;56 };57 shouldReduceMotion: boolean | null;58}5960function LogoItem({ logo, isHoverDevice, shouldReduceMotion }: LogoItemProps) {61 const [isHovered, setIsHovered] = useState(false);6263 const content = (64 <motion.div65 animate={66 shouldReduceMotion67 ? {}68 : {69 y: isHovered ? HOVER_LIFT_OFFSET : 0,70 }71 }72 className="group relative flex items-center justify-center p-6"73 onMouseEnter={() => isHoverDevice && setIsHovered(true)}74 onMouseLeave={() => isHoverDevice && setIsHovered(false)}75 transition={76 shouldReduceMotion77 ? { duration: 0 }78 : {79 bounce: 0.05,80 duration: 0.25,81 type: "spring" as const,82 }83 }84 >85 {/* Logo with grayscale effect */}86 <div87 className="transition-all duration-200 *:fill-foreground"88 style={{89 filter: isHovered ? "grayscale(0)" : "grayscale(1)",90 opacity: isHovered ? 1 : INACTIVE_OPACITY,91 }}92 >93 {logo.logo}94 </div>9596 {/* Tooltip */}97 <AnimatePresence>98 {isHovered ? (99 <motion.div100 animate={{ opacity: 1, scale: 1, x: "-50%", y: 0 }}101// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from SmoothUI Registry
All 178 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Chat Templatechat-template | SmoothUI Registry | Blocks | Free | 2 deps · 4 files | |
| Cta 1cta-1 | SmoothUI Registry | Blocks | Free | 1 dep | |
| Cta 2cta-2 | SmoothUI Registry | Blocks | Free | 1 dep | |
| Cta 3cta-3 | SmoothUI Registry | Blocks | Free | 1 dep | |
| Faq 1faq-1 | SmoothUI Registry | Blocks | Free | 2 deps | |
| Faq 2faq-2 | SmoothUI Registry | Blocks | Free | 1 dep | |
| Faq 3faq-3 | SmoothUI Registry | Blocks | Free | 2 deps | |
| Faq 4faq-4 | SmoothUI Registry | Blocks | Free | 2 deps |
