From 8d60c7f93407988ee0232ea90980028f299cb0f3 Mon Sep 17 00:00:00 2001 From: srdusr Date: Fri, 26 Sep 2025 13:39:28 +0200 Subject: Initial Commit --- web/src/types.ts | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 web/src/types.ts (limited to 'web/src/types.ts') diff --git a/web/src/types.ts b/web/src/types.ts new file mode 100644 index 0000000..07871c2 --- /dev/null +++ b/web/src/types.ts @@ -0,0 +1,54 @@ +export type Screen = 'main-menu' | 'typing-game' | 'end-screen'; + +export interface Stats { + wpm: number; + rawWpm: number; + accuracy: number; + time: number; + correctChars: number; + incorrectChars: number; + totalChars: number; + currentStreak: number; + bestStreak: number; +} + +export interface GameState { + screen: Screen; + currentText: string; + currentAttribution?: string; + input: string; + startTime: number | null; + isRunning: boolean; + stats: Stats; +} + +export enum Theme { + Light = 'light', + Dark = 'dark' +} + +export interface ThemeColors { + primary: string; + secondary: string; + background: string; + text: string; + error: string; + success: string; +} + +export interface TyperPunkGame { + handle_input(input: string): void; + handle_backspace(ctrl: boolean): boolean; + get_stats(): [number, number]; + get_stats_and_input(): [string, number, number]; + is_finished(): boolean; + get_text(): string; + get_input(): string; + set_text(text: string): void; + start(): void; + get_wpm(): number; + get_time_elapsed(): number; + get_raw_wpm(): number; +} + +export type TyperPunk = TyperPunkGame; \ No newline at end of file -- cgit v1.2.3