# Typo Typewriter

> Types like a person: slips, notices, fixes.

Uneven rhythm, the odd wrong key next to the right one, a beat to notice, a backspace and the fix. For hero lines, chat intros and onboarding copy that should feel human.

- Family: Originals
- Plan: Creative. Included with Creative.
- Requires: React, Tailwind CSS v4 and the motion package
- Page with a live preview: https://galactrex.com/ui/typo-typewriter/
- Licence: https://galactrex.com/ui/license/

## Install

```sh
npx @galactrex/ui login   # once, with an API key from https://galactrex.com/account/
npx @galactrex/ui add typo-typewriter
```

It installs to `components/galactrex/typo-typewriter.tsx`, with the shared motion helpers beside it. First time in a project: `npx @galactrex/ui init` (setup guide: https://galactrex.com/docs/ui-components-setup/).

## Usage

```tsx
import { TypoTypewriter } from "@/components/galactrex/typo-typewriter";

<TypoTypewriter text={["Ship faster.", "Ship calmer."]} loop />
```

## Props

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `text` | `string \| string[]` | — | One line, or several in turn. |
| `as` | `ElementType` | `"span"` | Element to render. |
| `typoRate` | `number` | `0.08` | Chance of a slip per letter, 0 to 0.3. |
| `speed` | `number` | `14` | Average characters per second. |
| `loop` | `boolean` | `false` | Erase and start again after the last line. |
| `hold` | `number` | `1600` | Ms a finished line stays. |
| `seed` | `number` | `7` | Same seed, same typos. |
| `className` | `string` | — | Extra classes for the outer element. |

## Variants

- **Hero.** One line that types on arrival.
- **Rotating.** Several lines with `loop`.

## Accessibility

- The intended text is read once; the typing and its slips are aria-hidden.

## Motion

- Writes text only, no layout animation.
- Reduced motion: the final line shows at once.
