Todos os componentes

Scale Letter Text

Scale Letter Text é um componente de texto para React e Tailwind CSS, da biblioteca Eldora UI, com licença MIT. Copia e cola no teu projeto.

Eldora UI MIT text

O que é

Scale Letter Text é um componente de texto para React e Tailwind CSS, da biblioteca Eldora UI, com licença MIT. Copia e cola no teu projeto.

Como usar

Abre o componente no catálogo, carrega em copiar, e cola no teu projeto. O prompt copiado leva o código e as regras para o teu agente o reproduzir sem alterar nada.

Abrir no catálogo

Cinco cópias grátis por mês. Sem cartão.

Precisa de

npm i react

Licença

Este componente vem de Eldora UI e é redistribuído sob a licença MIT, que permite uso comercial. O aviso de copyright viaja com o código.

Scale Letter Text

registry/eldoraui/scale-letter-text.tsx
"use client"

import React, { useState } from "react"

interface ScaleLetterTextProps {
  text: string
  className?: string
}

export default function ScaleLetterText({
  text,
  className = "",
}: ScaleLetterTextProps) {
  const [hoveredIndex, setHoveredIndex] = useState<number>(-1)

  const getLetterStyle = (index: number) => {
    const isHovered = hoveredIndex === index
    const distance = hoveredIndex >= 0 ? Math.abs(index - hoveredIndex) : 0

    let scale = 1
    let translateY = 0
    let rotateX = 0
    let brightness = 1

    if (hoveredIndex >= 0) {
      if (isHovered) {
        scale = 1.4
        translateY = -20
        rotateX = -15
        brightness = 1.3
      } else if (distance === 1) {
        scale = 1.2
        translateY = -10
        rotateX = -8
        brightness = 1.15
      } else if (distance === 2) {
        scale = 1.1
        translateY = -5
        rotateX = -4
        brightness = 1.08
      }
    }

    return {
      transform: `
                perspective(1000px) 
                translateY(${translateY}px) 
                rotateX(${rotateX}deg) 
                scale(${scale})
                translateZ(${isHovered ? 30 : distance <= 2 ? 15 : 0}px)
            `,
      filter: `brightness(${brightness})`,
      textShadow:
        distance <= 2
          ? "0 2px 6px rgba(0,0,0,0.15)"
          : "0 1px 2px rgba(0,0,0,0.08)",
      transition: "all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275)",
      zIndex: isHovered ? 10 : distance <= 2 ? 5 : 1,
      marginRight: "0.1em",
    }
  }

  return (
    <div className={className}>
      {text.split("").map((letter, index) => (
        <span
          key={index}
          className="relative inline-block cursor-pointer"
          style={getLetterStyle(index)}
          onMouseEnter={() => setHoveredIndex(index)}
          onMouseLeave={() => setHoveredIndex(-1)}
        >
          <span className="font-bold">
            {letter === " " ? "\u00A0" : letter}
          </span>
        </span>
      ))}
    </div>
  )
}

Componentes parecidos