From c0778dc18c353e81bb6e6898943d20d4c4329885 Mon Sep 17 00:00:00 2001 From: Yuval Adam <_@yuv.al> Date: Wed, 5 Mar 2025 13:28:50 +0100 Subject: Fix h1 click --- src/base.css | 2 +- src/main.tsx | 1 - src/pages/HomePage.tsx | 147 +++++++++++++++++++++++++++++-------------------- src/styles.css | 42 +++++++++----- 4 files changed, 116 insertions(+), 76 deletions(-) diff --git a/src/base.css b/src/base.css index d5afb78..dc8d1f0 100644 --- a/src/base.css +++ b/src/base.css @@ -180,4 +180,4 @@ button:hover::after { .container { padding: 15px 10px; } -} +} \ No newline at end of file diff --git a/src/main.tsx b/src/main.tsx index bef5202..4aff025 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,6 +1,5 @@ import { StrictMode } from 'react' import { createRoot } from 'react-dom/client' -import './index.css' import App from './App.tsx' createRoot(document.getElementById('root')!).render( diff --git a/src/pages/HomePage.tsx b/src/pages/HomePage.tsx index 5892c8c..7b726a6 100644 --- a/src/pages/HomePage.tsx +++ b/src/pages/HomePage.tsx @@ -203,83 +203,110 @@ const HomePage = () => { return morseMap[char] || ''; }; + // Reset game to initial state + const resetGame = () => { + setGameStarted(false); + setScore(0); + setTotalPlayed(0); + setCurrentChar(''); + setOptions([]); + + // Clear score tracker + const scoreTracker = document.getElementById('scoreTracker'); + if (scoreTracker) { + scoreTracker.innerHTML = ''; + } + + // Stop any playing audio + if (actxRef.current) { + try { + actxRef.current.close(); + actxRef.current = null; + } catch (error) { + console.error('Error closing audio context:', error); + } + } + }; + return (
-

Morse Hero

- - {!gameStarted ? ( -
-

Learn Morse code the fun way!

- -
- View Morse Code Chart +

Morse Hero

+ + { + !gameStarted ? ( +
+

Learn Morse code the fun way!

+ +
+ View Morse Code Chart +
-
- ) : ( -
-
-
-
-
Score:
-
- {score} / {totalPlayed} + ) : ( +
+
+
+
+
Score:
+
+ {score} / {totalPlayed} +
+
-
-
-
-
- {options.map((option, index) => ( - - ))} -
+
+
+ {options.map((option, index) => ( + + ))} +
-
- - -
- setShowHints(e.target.checked)} - /> - +
+ + +
+ setShowHints(e.target.checked)} + /> + +
-
- )} + ) + } -
+
); }; diff --git a/src/styles.css b/src/styles.css index 377c0ca..d667025 100644 --- a/src/styles.css +++ b/src/styles.css @@ -8,6 +8,12 @@ h1 { text-shadow: 0 0 15px rgba(243, 156, 18, 0.4), 3px 3px 0px rgba(231, 76, 60, 0.6); + cursor: pointer; + transition: transform 0.2s ease; +} + +h1:hover { + transform: scale(1.03); } h1::after { @@ -522,22 +528,30 @@ h1::after { 0% { box-shadow: 0 8px 0 var(--success-dark), 0 0 20px rgba(46, 204, 113, 0.5); } + 50% { box-shadow: 0 8px 0 var(--success-dark), 0 0 40px rgba(46, 204, 113, 0.8); } + 100% { box-shadow: 0 8px 0 var(--success-dark), 0 0 20px rgba(46, 204, 113, 0.5); } } @keyframes shake { - 0%, 100% { + + 0%, + 100% { transform: translateX(0); } - 20%, 60% { + + 20%, + 60% { transform: translateX(-10px); } - 40%, 80% { + + 40%, + 80% { transform: translateX(10px); } } @@ -560,36 +574,36 @@ body.game-active #startScreen { .game-container { padding: 30px 20px; } - + .options { grid-template-columns: 1fr; gap: 20px; } - + .option-button { font-size: 30px; padding: 20px 15px; min-height: 110px; } - + h1 { font-size: 3.5em; } - + .start-button { font-size: 28px; padding: 15px 40px; } - + .score-container { flex-direction: column; align-items: center; } - + .score-widget { margin-bottom: 15px; } - + .settings-toggle { margin-left: 0; margin-top: 10px; @@ -600,22 +614,22 @@ body.game-active #startScreen { .game-container { padding: 25px 15px; } - + .option-button { font-size: 24px; padding: 15px 10px; min-height: 90px; } - + h1 { font-size: 2.8em; } - + .start-button { font-size: 24px; padding: 12px 30px; } - + .hint-setting { margin-left: 0; margin-top: 10px; -- cgit v1.3.1