@rusyar/react-typewriter
Version:
A React component with simple typewriting animation
126 lines (97 loc) • 4.95 kB
Markdown
# @rusyar/react-typewriter
[](https://www.npmjs.com/package/@rusyar/react-typewriter)
[](https://github.com/ruslanyar/react-typewriter/blob/main/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
```bash
npm install @rusyar/react-typewriter
```
or
```bash
yarn add @rusyar/react-typewriter
```
## Usage
### Basic Usage
This is all you need to get started.
```jsx
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.
```jsx
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.
```jsx
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](https://github.com/ruslanyar/react-typewriter/issues).
## License
This project is licensed under the MIT License.