Keystroke Text
textProTippt eine rotierende Liste von Wendungen mit farbigem Präfix, blinkendem, anpassbarem Cursor, menschlichem Timing und eigener Löschgeschwindigkeit. Sie reserviert die Breite der längsten Wendung und gibt Screenreadern ein stabiles Label.
Pro kann noch nicht gekauft werden. Die Seite öffnet, sobald die Zahlung bereit ist.
Vorschau
Live-Demo. Das Theme schaltet die Demo selbst um.
Code
Der Code ist gesperrt
Keystroke Text gehört zu Manniche UI Pro. Ein Schlüssel öffnet den Quellcode aller 60 Effekte.
Bald verfügbar49 € · Einführungspreis bis einschließlich 31. Dezember 2026. Danach 79 €.
- Einmalzahlung
- Ein Entwickler
- Der Schlüssel kommt sofort per E-Mail
- Keine Umsatzsteuer (§ 19 UStG)
Hast du einen Schlüssel? Hol den Code mit der CLI oder per MCP.
Der Schlüssel liegt in MANNICHE_PRO_KEY, nie im Code oder in der Adresse. So richtest du ihn ein
npx shadcn@latest add @manniche-pro/keystroke-textclaude mcp add --transport http manniche-ui https://mikkelmanniche.dk/api/mcp --header "Authorization: Bearer $MANNICHE_PRO_KEY"Props
KeystrokeTextProps
| Prop | Typ | Standard | Was sie tut |
|---|---|---|---|
phrases erforderlich | 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
Screenreader
Screen readers get one stable, visually hidden label: by default the prefix followed by all phrases, or label when you set it. The typed characters and the caret are aria-hidden, so no keystroke is announced. as sets the element.
Reduzierte Bewegung
Typing holds while the pointer is over the text and carries on when it leaves. Under reduced motion no typing happens and the caret is not drawn; the first phrase shows (the last one when loop is false). Otherwise typing pauses off screen and in hidden tabs, and with loop false the last phrase stays typed.