@ertekinno/human-like
Version:
A sophisticated React typewriter effect library with realistic human typing behavior, mobile/desktop keyboards, and comprehensive theming support
163 lines (162 loc) • 4.37 kB
TypeScript
import { KeyInfo, KeySequence, KeyboardMode } from '../keyboard/types';
export type { KeyInfo, KeySequence, KeyboardMode };
export interface HumanLikeConfig {
speed: number;
speedVariation: number;
mistakeFrequency: number;
mistakeTypes: {
adjacent: boolean;
random: boolean;
doubleChar: boolean;
commonTypos: boolean;
};
fatigueEffect: boolean;
concentrationLapses: boolean;
overcorrection: boolean;
debug: boolean;
sentencePause: number;
wordPause: number;
thinkingPause: number;
minCharDelay: number;
backspaceSpeed: number;
realizationDelay: number;
correctionPause: number;
keyboardMode?: 'mobile' | 'desktop';
onKey?: (keyInfo: KeyInfo) => void;
}
export interface HumanLikeProps {
text: string;
speed?: number;
mistakeFrequency?: number;
showCursor?: boolean;
cursorChar?: string;
cursorBlinkSpeed?: number;
autoStart?: boolean;
config?: Partial<HumanLikeConfig>;
id?: string;
onStart?: (id?: string) => void;
onComplete?: (id?: string) => void;
onChar?: (char: string, index: number, id?: string) => void;
onMistake?: (mistake: MistakeInfo, id?: string) => void;
onBackspace?: (id?: string) => void;
onPause?: (id?: string) => void;
onResume?: (id?: string) => void;
keyboardMode?: 'mobile' | 'desktop';
onKey?: (keyInfo: KeyInfo) => void;
className?: string;
style?: React.CSSProperties;
}
export type MistakeType = 'adjacent' | 'random' | 'doubleChar' | 'commonTypo';
export interface MistakeInfo {
type: MistakeType;
originalChar: string;
mistakeChar: string;
position: number;
corrected: boolean;
realizationTime: number;
}
export type TypingState = 'idle' | 'typing' | 'paused' | 'correcting' | 'thinking' | 'completed';
export interface TypingEvent {
type: 'char' | 'backspace' | 'mistake' | 'correction' | 'pause';
char?: string;
position: number;
timestamp: number;
mistake?: MistakeInfo;
}
export interface HumanLikeHookReturn {
displayText: string;
isTyping: boolean;
isPaused: boolean;
isCompleted: boolean;
isActive: boolean;
currentState: TypingState;
progress: number;
currentWPM: number;
mistakeCount: number;
totalDuration: number;
showCursor: boolean;
cursorChar: string;
cursorBlinkSpeed: number;
start: () => void;
stop: () => void;
pause: () => void;
resume: () => void;
skip: () => void;
rewind: () => void;
reset: () => void;
resetKeyboard: () => void;
setCursorVisible: (visible: boolean) => void;
setCursorChar: (char: string) => void;
setCursorBlinkSpeed: (speed: number) => void;
}
export interface TypingStats {
totalCharacters: number;
charactersTyped: number;
mistakesMade: number;
mistakesCorrected: number;
startTime: number;
endTime?: number;
currentWPM: number;
averageCharDelay: number;
totalDuration: number;
}
export interface CharacterTiming {
char: string;
delay: number;
isMistake: boolean;
isCorrection: boolean;
timestamp: number;
}
export interface WordInfo {
word: string;
isCommon: boolean;
difficulty: number;
startIndex: number;
endIndex: number;
}
export declare enum ShiftState {
Off = "off",
On = "on",
Locked = "locked"
}
export declare enum KeyboardView {
Letters = "letters",
Numbers = "numbers",
Symbols = "symbols"
}
export interface KeyPressEvent {
id: string;
key: string;
view: KeyboardView;
timestamp: number;
}
export interface StateChangeEvent {
previousState: TypingState;
currentState: TypingState;
timestamp: number;
}
export interface ViewChangeEvent {
previousView: KeyboardView;
currentView: KeyboardView;
timestamp: number;
}
export interface ShiftChangeEvent {
previousState: ShiftState;
currentState: ShiftState;
timestamp: number;
}
export interface ErrorEvent {
code: string;
message: string;
timestamp: number;
}
export interface KeyboardClasses {
root?: string;
row?: string;
key?: string;
keyActive?: string;
keyModifier?: string;
}
export type LabelOverrides = Record<string, string>;
export type IconOverrides = Record<string, React.ReactNode>;
//# sourceMappingURL=index.d.ts.map