Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@rusyar/react-typewriter

ruslanyar96MIT1.1.0TypeScript support: included

A React component with simple typewriting animation

react, text, typewriter, react-typewriter

readme

@rusyar/react-typewriter

NPM Version License

A simple and highly customizable React component that creates a typewriter animation for your text. Built with TypeScript, minimal dependencies, and designed for modern React applications.

Features

  • Lightweight: Minimal dependencies and optimized for performance.
  • Easy to Use: Get started with just a single line of code.
  • Highly Customizable: Control the speed, delay, cursor style, HTML tags, and more.
  • Synchronization: Easily sync multiple Typewriter components to create sequential animations.
  • TypeScript: Written in TypeScript with strict type safety.
  • SSR/Next.js Friendly: Fully compatible with Server-Side Rendering thanks to the 'use client' directive.

Installation

npm install @rusyar/react-typewriter

or

yarn add @rusyar/react-typewriter

Usage

Basic Usage

This is all you need to get started.

import { Typewriter } from '@rusyar/react-typewriter';

const App = () => {
  return <Typewriter text="Hello, World! This is a simple typewriter." />;
};

Advanced Customization

Customize the appearance, speed, and cursor style.

import { Typewriter } from '@rusyar/react-typewriter';

const App = () => {
  return (
    <Typewriter
      text="This is a customized typewriter..."
      tagName="h2"
      speed={150}
      delay={500}
      size="2rem"
      color="#2c3e50"
      cursorColor="#3498db"
      cursorType="line"
      cursorAnimation="expand"
    />
  );
};

Syncing Multiple Typewriters

Use the useSyncState hook to create sequential animations. This is perfect for dialogues or step-by-step instructions.

import { Typewriter, useSyncState } from '@rusyar/react-typewriter';

const App = () => {
  // 1. Initialize the hook with the total number of steps.
  const syncState = useSyncState(3);

  return (
    <div>
      {/* 2. Pass the state and order to each component. */}
      <Typewriter
        text="First, this sentence will type out."
        sync={{ order: 1, syncState }}
      />
      <br />
      <Typewriter
        text="Second, this one will appear after a short delay."
        delay={500}
        sync={{ order: 2, syncState }}
      />
      <br />
      <Typewriter
        text="Finally, the sequence is complete."
        delay={500}
        sync={{ order: 3, syncState }}
      />
    </div>
  );
};

API Reference (Props)

Prop Type Default Description
text string (required) The text to be typed out.
tagName 'h1' │ 'h2' │ 'h3' │ 'p' │ 'span' 'span' The HTML tag to render the component with.
speed number 100 Typing speed in milliseconds.
delay number 0 Delay before the animation starts, in ms.
size string '1rem' Font size (any valid CSS value).
fontFamily string 'inherit' Font family.
weight number (100-900) 400 Font weight.
color string 'inherit' Text color.
cursorAnimation 'blink' │ 'expand' 'blink' The animation style for the cursor.
cursorColor string 'black' The color of the cursor.
cursorType 'line' │ 'block' 'block' The style of the cursor.
sync { order: number; syncState: ReturnType<typeof useSyncState> } undefined The object used to sync animations.

Contributing

Contributions are welcome! If you find a bug or have a feature request, please open an issue.

License

This project is licensed under the MIT License.