aboutsummaryrefslogtreecommitdiff
path: root/web/src/components/MainMenu.tsx
blob: b8daea02d3babf5c8dd08b536d91f03c3979934a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import React from 'react';
import { useTheme } from '../contexts/ThemeContext';
import { Theme } from '../types';

interface Props {
    onStartGame: () => void;
    categories?: string[];
    selectedCategory?: string;
    onSelectCategory?: (cat: string) => void;
}

const MainMenu: React.FC<Props> = ({ onStartGame, categories = [], selectedCategory = 'random', onSelectCategory }) => {
    const { theme, toggleTheme } = useTheme();

    return (
        <div className="main-menu">
            <h1>TyperPunk</h1>
            <div className="menu-options">
                <div style={{ marginBottom: '0.75rem' }}>
                    <label htmlFor="category" style={{ marginRight: 8 }}>Category:</label>
                    <select
                        id="category"
                        value={selectedCategory}
                        onChange={(e) => onSelectCategory && onSelectCategory(e.target.value)}
                        style={{ padding: '0.4rem 0.6rem' }}
                    >
                        <option value="random">Random</option>
                        {categories.map((c) => (
                            <option key={c} value={c}>{c}</option>
                        ))}
                    </select>
                </div>
                <button className="menu-button" onClick={onStartGame}>
                    Start Typing Test
                </button>
                <button className="menu-button" onClick={toggleTheme}>
                    Toggle {theme === Theme.Dark ? 'Light' : 'Dark'} Mode
                </button>
            </div>
            <button onClick={toggleTheme} className="theme-toggle">
                {theme === Theme.Dark ? (
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
                        <circle cx="12" cy="12" r="5"/>
                        <line x1="12" y1="1" x2="12" y2="3"/>
                        <line x1="12" y1="21" x2="12" y2="23"/>
                        <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/>
                        <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/>
                        <line x1="1" y1="12" x2="3" y2="12"/>
                        <line x1="21" y1="12" x2="23" y2="12"/>
                        <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/>
                        <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/>
                    </svg>
                ) : (
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
                        <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/>
                    </svg>
                )}
            </button>
        </div>
    );
};

export default MainMenu;