Motion & GSAP UI for React. Built for shadcn/ui.
Sora UI

Text Effect

Preset-driven staggered text reveals with blur, fade, slide, and scale animations.

Made by Axyl
Loading...

Installation

Usage

Scroll-triggered headline — set scrollTrigger (built-in useInView):

import { TextEffect } from '@/components/sora-ui/texts/text-effect';

export default function HeroTitle() {
  return (
    <TextEffect
      as="h1"
      className="font-bold text-4xl tracking-tight"
      preset="fade-in-blur"
      per="word"
      scrollTrigger
    >
      Animation should not be a black box.
    </TextEffect>
  );
}

Animate immediately on mount (default) or toggle with trigger:

'use client';

import { useState } from 'react';
import { TextEffect } from '@/components/sora-ui/texts/text-effect';

export default function LiveLabel() {
  const [visible, setVisible] = useState(true);

  return (
    <button onClick={() => setVisible((current) => !current)} type="button">
      <TextEffect preset="slide" per="char" trigger={visible}>
        {visible ? 'Hide me' : 'Show me'}
      </TextEffect>
    </button>
  );
}

Use blurRevealItemVariants() when you need the old blur-reveal tuning (blur, yOffset):

import {
  blurRevealItemVariants,
  TextEffect,
} from '@/components/sora-ui/texts/text-effect';

<TextEffect
  scrollTrigger
  per="word"
  variants={{ item: blurRevealItemVariants({ blur: 4, yOffset: 12 }) }}
>
  Hello world
</TextEffect>

Props

PropTypeDefault
children?
string
-
as?
keyof JSX.IntrinsicElements
"p"
preset?
"blur" | "fade-in-blur" | "fade" | "slide" | "scale"
"fade"
per?
"word" | "char" | "line"
"word"
scrollTrigger?
boolean
false
once?
boolean
true
viewportMargin?
string
"0px 0px -10% 0px"
trigger?
boolean
true
delay?
number
0
speedReveal?
number
1
speedSegment?
number
1
variants?
{ container?: Variants; item?: Variants }
-
containerTransition?
Transition
-
segmentTransition?
Transition
-
className?
string
-
segmentWrapperClassName?
string
-

Credits

Inspired by motion-primitives.

Built by Axyl. A motion-first component registry for React.

Last updated: 6/27/2026