# react-simple-typewriter

> A simple react component for adding a nice typewriter effect to your project.

Latest version **5.0.1** (published 2022-11-19) · MIT license · 0 weekly downloads

## Install

```sh
npm install react-simple-typewriter
pnpm add react-simple-typewriter
yarn add react-simple-typewriter
bun add react-simple-typewriter
```

## Health

**Score 20/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 5.0.1 |
| Published | 2022-11-19 |
| First published | 2020-10-23 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >=14 |
| Dependencies | 0 |
| Unpacked size | 30.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 138 |
| Author | awran5 |
| Maintainers | awran5 |
| Keywords | typewriter, typewriter effect, react, react typewriter, react typewriter effect, react-component |

## Links

- npm: https://www.npmjs.com/package/react-simple-typewriter
- Repository: https://github.com/awran5/react-simple-typewriter
- Homepage: https://react-simple-typewriter.vercel.app/
- Issues: https://github.com/awran5/react-simple-typewriter/issues
- npm.io page: https://npm.io/package/react-simple-typewriter

## Alternatives

- [mobx-react](https://npm.io/package/mobx-react.md) — 2.8M weekly downloads
- [rc-tree](https://npm.io/package/rc-tree.md) — 2.6M weekly downloads
- [@react-oauth/google](https://npm.io/package/@react-oauth/google.md) — 1.3M weekly downloads
- [@wagmi/connectors](https://npm.io/package/@wagmi/connectors.md) — 877.0K weekly downloads
- [vee-validate](https://npm.io/package/vee-validate.md) — 836.4K weekly downloads

## Recent versions

- 5.0.1 (latest) — 2022-11-19
- 5.0.0 — 2022-11-19
- 4.0.5 — 2022-10-05
- 4.0.4 — 2022-10-04
- 4.0.3 — 2022-10-04
- 4.0.2 — 2022-09-08
- 4.0.1 — 2022-09-08
- 3.0.1 — 2021-08-27
- 3.0.0 — 2021-07-06
- 2.0.5 — 2021-07-06
- 2.0.4 — 2021-07-04
- 2.0.0 — 2021-07-04
- 1.0.13 — 2020-10-25
- 1.0.12 — 2020-10-25
- 1.0.11 — 2020-10-23
- … 6 more at https://npm.io/package/react-simple-typewriter/versions

## README

# React Simple Typewriter

> A simple react component for adding a nice typewriter effect to your project.

[![NPM](https://img.shields.io/npm/v/react-simple-typewriter.svg)](https://www.npmjs.com/package/react-simple-typewriter) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)![npm bundle size](https://img.shields.io/bundlephobia/min/react-simple-typewriter)![GitHub](https://img.shields.io/github/license/awran5/react-simple-typewriter)

<p align="center">
  <img src="./screenshot.gif" alt="screenshot" />
</p>
 
## Install

#### npm

```sh
npm i react-simple-typewriter
```

#### Yarn

```sh
yarn add react-simple-typewriter
```

---

## Usage

There are two ways to `Typewriter`:

## 1. Component

```jsx
import React from 'react'
import { Typewriter } from 'react-simple-typewriter'

const MyComponent = () => {
  return (
    <div className='App'>
      <Typewriter {/* Props */} />
    </div>
  )
}
```

### Component Props

| Prop             |       Type        | Options  | Description                                                                                |      Default       |
| ---------------- | :---------------: | -------- | ------------------------------------------------------------------------------------------ | :----------------: |
| `words`          |       array       | Required | Array of strings holding the words                                                         | `['Hello', '...']` |
| `typeSpeed`      |      number       | Optional | Character typing speed in Milliseconds                                                     |        `80`        |
| `deleteSpeed`    |      number       | Optional | Character deleting speed in Milliseconds                                                   |        `50`        |
| `delaySpeed`     |      number       | Optional | Delay time between the words in Milliseconds                                               |       `1500`       |
| `loop`           | number \| boolean | Optional | Control how many times to run. `0 \| false` to run infinitely                              |        `1`         |
| `cursor`         |      boolean      | Optional | Show / Hide a cursor                                                                       |      `false`       |
| `cursorStyle`    |     ReactNode     | Optional | Change the cursor style available if `cursor` is `enabled`                                 |        `\|`        |
| `cursorBlinking` |      boolean      | Optional | Enable cursor blinking animation                                                           |        `\|`        |
| `onLoopDone`     |     function      | Optional | Callback function that is triggered when loops are completed. available if `loop` is `> 0` |        `-`         |
| `onType`         |     function      | Optional | Callback function that is triggered while typing with typed words `count` passed           |        `-`         |
| `onDelay`        |     function      | Optional | Callback function that is triggered on typing delay                                        |        `-`         |
| `onDelete`       |     function      | Optional | Callback function that is triggered while deleting                                         |        `-`         |

---

### Usage Example

```jsx
import React from 'react'
import { Typewriter } from 'react-simple-typewriter'

const MyComponent = () => {

  const handleType = (count: number) => {
    // access word count number
    console.log(count)}
  }

  const handleDone = () => {
    console.log(`Done after 5 loops!`)
  }

  return (
    <div className='App'>
      <h1 style={{ paddingTop: '5rem', margin: 'auto 0', fontWeight: 'normal' }}>
        Life is simple{' '}
        <span style={{ color: 'red', fontWeight: 'bold' }}>
          {/* Style will be inherited from the parent element */}
          <Typewriter
            words={['Eat', 'Sleep', 'Code', 'Repeat!']}
            loop={5}
            cursor
            cursorStyle='_'
            typeSpeed={70}
            deleteSpeed={50}
            delaySpeed={1000}
            onLoopDone={handleDone}
            onType={handleType}
          />
        </span>
      </h1>
    </div>
  )
}
```

## 2. Hook

**BREAKING CHANGES v5.0.0** Hook now returns `text` along with some useful `flags`:

| Prop       |  Type   | Description                         |
| ---------- | :-----: | ----------------------------------- |
| `isType`   | boolean | Check if currently typing           |
| `isDelete` | boolean | Check if currently deleting         |
| `isDelay`  | boolean | Check if currently on delay         |
| `isDone`   | boolean | Check if all running loops are done |

```jsx
import { useTypewriter } from 'react-simple-typewriter'

const MyComponent = () => {
  /**
   * @returns
   * text: [string] typed text
   * NEW helper: {} helper flags
   */
  const [text, helper] = useTypewriter({
    /* Config */
  })

  /* Hook helper */
  const { isType, isDelete, isDelay, isDone } = helper

  return (
    <div className='App'>
      <span>{text}</span>
    </div>
  )
}
```

### Hook Config

| Prop          |       Type        | Options  | Description                                                                                |      Default       |
| ------------- | :---------------: | -------- | ------------------------------------------------------------------------------------------ | :----------------: |
| `words`       |       array       | Required | Array of strings holding the words                                                         | `['Hello', '...']` |
| `typeSpeed`   |      number       | Optional | Character typing speed in Milliseconds                                                     |        `80`        |
| `deleteSpeed` |      number       | Optional | Character deleting speed in Milliseconds                                                   |        `50`        |
| `delaySpeed`  |      number       | Optional | Delay time between the words in Milliseconds                                               |       `1500`       |
| `loop`        | number \| boolean | Optional | Control how many times to run. `0 \| false` to run infinitely                              |        `1`         |
| `onLoopDone`  |     function      | Optional | Callback function that is triggered when loops are completed. available if `loop` is `> 0` |        `-`         |
| `onType`      |     function      | Optional | Callback function that is triggered while typing                                           |        `-`         |
| `onDelete`    |     function      | Optional | Callback function that is triggered while deleting                                         |        `-`         |
| `onDelay`     |     function      | Optional | Callback function that is triggered on typing delay                                        |        `-`         |

### Hook Usage Example

```jsx
import React from 'react'
import { useTypewriter } from 'react-simple-typewriter'

const MyComponent = () => {
  const [text] = useTypewriter({
    words: ['Hello', 'From', 'Typewriter', 'Hook!'],
    loop: 0
  })

  return (
    <div className='App'>
      <span>{text}</span>
    </div>
  )
}
```

### Hook with Cursor

If you like to have the **Cursor** effect, you can `import` it as a separate `Component`

```jsx
import React from 'react'
import { useTypewriter, Cursor } from 'react-simple-typewriter'

const MyComponent = () => {
  const [text] = useTypewriter({
    words: ['Hello', 'From', 'Typewriter', 'Hook!'],
    loop: 3,
    onLoopDone: () => console.log(`loop completed after 3 runs.`)
  })

  return (
    <div className='App'>
      <span>{text}</span>
      <Cursor cursorColor='red' />
    </div>
  )
}
```

### Cursor Component Props

| Prop             |   Type    | Options  | Description                       |  Default  |
| ---------------- | :-------: | -------- | --------------------------------- | :-------: |
| `cursorStyle`    | ReactNode | Optional | Change cursor style               |   `\|`    |
| `cursorColor`    |  String   | Optional | Change cursor color               | `inherit` |
| `cursorBlinking` |  Boolean  | Optional | disable cursor blinking animation |  `true`   |

---

### [Demo](https://react-simple-typewriter.vercel.app/)

<br />

[![Edit react-simple-typewriter](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/react-simple-typewriter-uj8ix)

### License

MIT © [awran5](https://github.com/awran5/)

---
_Source: https://npm.io/package/react-simple-typewriter · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
