Keystroke Text
textProTypes a rotating list of phrases with a coloured prefix, a blinking custom caret, human-like timing and its own delete speed. It reserves the longest phrase's width and gives screen readers one stable label.
Opening soon
Pro cannot be bought yet. The page opens when payment is ready.
Preview
The preview could not load.
Live demo. The theme switches the demo itself.
Code
keystroke-text.tsxPro
The code is locked
Keystroke Text is part of Manniche UI Pro. A key unlocks the source of all 60 effects.
Opening soon€49 · Introductory price until 31 December 2026. €79 after that.
- One-off payment
- One developer
- Your key arrives by email straight away
- No VAT (§ 19 UStG)
Have a key? Get the code with the CLI or MCP.
The key lives in MANNICHE_PRO_KEY, never in your code or a URL. How to set it up
CLI
npx shadcn@latest add @manniche-pro/keystroke-textMCP
claude mcp add --transport http manniche-ui https://mikkelmanniche.dk/api/mcp --header "Authorization: Bearer $MANNICHE_PRO_KEY"Props
KeystrokeTextProps
| Prop | Type | Default | What it does |
|---|---|---|---|
phrases required | string[] | – | The phrases to type, one after the other. |
prefix | string | – | Static text before the typed part, for example Built for . A space is added if you leave it out. |
typeSpeed | number | 78 | Time per typed character in milliseconds. |
deleteSpeed | number | 34 | Time per deleted character in milliseconds. Deleting is usually quicker than typing. |
holdDelay | number | 1700 | How long a finished phrase stays before it is deleted, in milliseconds. |
gapDelay | number | 380 | Pause between a deleted phrase and the next one starting, in milliseconds. |
startDelay | number | 400 | Wait before the very first keystroke, in milliseconds. |
jitter | number | 0.5 | Human-like timing, from 0 (a metronome) to 1 (very uneven). Pauses grow after spaces and punctuation and now and then there is a small hesitation. |
loop | boolean | true | Start over after the last phrase. When false the last phrase stays typed. |
caret | boolean | true | Shows the caret. |
caretChar | string | '|' | Character used for the caret, for example _, █ or |. |
caretBlink | number | 1050 | Blink period of the caret in milliseconds while nothing is being typed. |
hideCaretWhileTyping | boolean | false | Hides the caret while keys are being typed or deleted, and shows it again during pauses. |
label | string | – | Text announced to screen readers instead of the default, which is the prefix followed by all phrases. The keystrokes themselves are never announced. |
onPhraseChange | (index: number, phrase: string) => void | – | Called when a phrase starts being typed. |
as | ElementType | 'span' | Element to render. |
className | string | – | Classes for the root: font, size, weight, tracking and the base colour. |
prefixClassName | string | – | Classes for the prefix, for example a muted colour. |
textClassName | string | – | Classes for the typed text, for example an accent colour. |
caretClassName | string | – | Classes for the caret, for example its own colour. |
A11y
No accessibility notes written yet.
The notes come with the source when Pro opens.