5.2.2 • Published 2 years ago
nextjs-simple-typewriter v5.2.2
NextJs Simple Typewriter
a fork of react-simple-typewriter using 'use client' directive.
A simple react component for adding a nice typewriter effect to your project. In nextJS 13.4, an error is caused because hooks are not allowed on server-side code. this package fixes that and runs the code client-side. Enjoy
npm
npm i nextjs-simple-typewriterYarn
yarn add nextjs-simple-typewriterUsage
There are two ways to Typewriter:
1. Component
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 \| falseto run infinitely | 1 | 
| cursor | boolean | Optional | Show / Hide a cursor | false | 
| cursorStyle | ReactNode | Optional | Change the cursor style available if cursorisenabled | \| | 
| cursorBlinking | boolean | Optional | Enable cursor blinking animation | \| | 
| onLoopDone | function | Optional | Callback function that is triggered when loops are completed. available if loopis> 0 | - | 
| onType | function | Optional | Callback function that is triggered while typing with typed words countpassed | - | 
| onDelay | function | Optional | Callback function that is triggered on typing delay | - | 
| onDelete | function | Optional | Callback function that is triggered while deleting | - | 
Usage Example
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 | 
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 \| falseto run infinitely | 1 | 
| onLoopDone | function | Optional | Callback function that is triggered when loops are completed. available if loopis> 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
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
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
License
MIT © SoloReverse
- Thank you to Awran5
- Thank you for MidoAhmed for the updated rollup starter code rollup-react-library-starter