Randomized Text Unveil
Randomized Text Unveil é um componente de texto para React e Tailwind CSS, da biblioteca UI Layouts, com licença MIT. Copia e cola no teu projeto.
UI Layouts
MIT
text
O que é
Randomized Text Unveil é um componente de texto para React e Tailwind CSS, da biblioteca UI Layouts, 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.
Cinco cópias grátis por mês. Sem cartão.
Precisa de
npm i motion @motionone/utils
Licença
Este componente vem de UI Layouts e é redistribuído sob a licença MIT, que permite uso comercial. O aviso de copyright viaja com o código.
Randomized Text Unveil
'use client';
import { RandomizedTextEffect } from '@/components/ui/text-randomized';
import React from 'react';
function TextRandomized() {
return (
<>
<div className=' py-10 rounded-md'>
<h1 className='font-departure text-4xl relative z-10 text-center h-[120px] md:h-auto leading-tight'>
<RandomizedTextEffect text='Production ready code' />
</h1>
</div>
</>
);
}
export default TextRandomized;
'use client';
import React, { useCallback, useEffect, useState } from 'react';
const lettersAndSymbols = 'abcdefghijklmnopqrstuvwxyz!@#$%^&*-_+=;:<>,';
interface AnimatedTextProps {
text: string;
}
export function RandomizedTextEffect({ text }: AnimatedTextProps) {
const [animatedText, setAnimatedText] = useState('');
const getRandomChar = useCallback(
() => lettersAndSymbols[Math.floor(Math.random() * lettersAndSymbols.length)],
[]
);
const animateText = useCallback(async () => {
const duration = 50;
const revealDuration = 80;
const initialRandomDuration = 300;
const generateRandomText = () =>
text
.split('')
.map(() => getRandomChar())
.join('');
setAnimatedText(generateRandomText());
const endTime = Date.now() + initialRandomDuration;
while (Date.now() < endTime) {
await new Promise((resolve) => setTimeout(resolve, duration));
setAnimatedText(generateRandomText());
}
for (let i = 0; i < text.length; i++) {
await new Promise((resolve) => setTimeout(resolve, revealDuration));
setAnimatedText(
(prevText) =>
text.slice(0, i + 1) +
prevText
.slice(i + 1)
.split('')
.map(() => getRandomChar())
.join('')
);
}
}, [text, getRandomChar]);
useEffect(() => {
animateText();
}, [text, animateText]);
return <div className='relative inline-block'>{animatedText}</div>;
}