Text Effect
motion-primitives/text-effectFreeComponent
A component that applies animated effects to text content.
Install it
npx shadcn@latest add https://raw.githubusercontent.com/ibelick/motion-primitives/HEAD/public/c/text-effect.jsonSource
1'use client';2import { cn } from '@/lib/utils';3import {4 AnimatePresence,5 motion6} from 'motion/react';7import type {8 TargetAndTransition,9 Transition,10 Variant,11 Variants,12} from 'motion/react'13import React from 'react';1415export type PresetType = 'blur' | 'fade-in-blur' | 'scale' | 'fade' | 'slide';1617export type PerType = 'word' | 'char' | 'line';1819export type TextEffectProps = {20 children: string;21 per?: PerType;22 as?: keyof React.JSX.IntrinsicElements;23 variants?: {24 container?: Variants;25 item?: Variants;26 };27 className?: string;28 preset?: PresetType;29 delay?: number;30 speedReveal?: number;31 speedSegment?: number;32 trigger?: boolean;33 onAnimationComplete?: () => void;34 onAnimationStart?: () => void;35 segmentWrapperClassName?: string;36 containerTransition?: Transition;37 segmentTransition?: Transition;38 style?: React.CSSProperties;39};4041const defaultStaggerTimes: Record<PerType, number> = {42 char: 0.03,43 word: 0.05,44 line: 0.1,45};4647const defaultContainerVariants: Variants = {48 hidden: { opacity: 0 },49 visible: {50 opacity: 1,51 transition: {52 staggerChildren: 0.05,53 },54 },55 exit: {56 transition: { staggerChildren: 0.05, staggerDirection: -1 },57 },58};5960const defaultItemVariants: Variants = {61 hidden: { opacity: 0 },62 visible: {63 opacity: 1,64 },65 exit: { opacity: 0 },66};6768const presetVariants: Record<69 PresetType,70 { container: Variants; item: Variants }71> = {72 blur: {73 container: defaultContainerVariants,74 item: {75 hidden: { opacity: 0, filter: 'blur(12px)' },76 visible: { opacity: 1, filter: 'blur(0px)' },77 exit: { opacity: 0, filter: 'blur(12px)' },78 },79 },80 'fade-in-blur': {81 container: defaultContainerVariants,82 item: {83 hidden: { opacity: 0, y: 20, filter: 'blur(12px)' },84 visible: { opacity: 1, y: 0, filter: 'blur(0px)' },85 exit: { opacity: 0, y: 20, filter: 'blur(12px)' },86 },87 },88 scale: {89 container: defaultContainerVariants,90 item: {91 hidden: { opacity: 0, scale: 0 },92 visible: { opacity: 1, scale: 1 },93 exit: { opacity: 0, scale: 0 },94 },95 },96 fade: {97 container: defaultContainerVariants,98 item: {99 hidden: { opacity: 0 },100 visible: { opacity: 1 },101 exit: { opacity: 0 },102 },103 },104 slide: {105 container: defaultContainerVariants,106 item: {107 hidden: { opacity: 0, y: 20 },108 visible: { opacity: 1, y: 0 },109 exit: { opacity: 0, y: 20 },110 },111 },112};113114// … truncated
What it pulls in
npm packages
Files it writes
More from motion-primitives
All 33 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Accordionaccordion | motion-primitives | Components | Free | 1 dep | |
| Animated Backgroundanimated-background | motion-primitives | Components | Free | 1 dep | |
| Animated Groupanimated-group | motion-primitives | Components | Free | 1 dep | |
| Animated Numberanimated-number | motion-primitives | Components | Free | 1 dep | |
| Border Trailborder-trail | motion-primitives | Components | Free | 1 dep | |
| Carouselcarousel | motion-primitives | Components | Free | 1 dep | |
| Cursorcursor | motion-primitives | Components | Free | 1 dep | |
| Dialogdialog | motion-primitives | Components | Free | 1 dep · 2 files |
