diff --git a/SerpentRace_Frontend/package-lock.json b/SerpentRace_Frontend/package-lock.json index caa2c59d..81a25a59 100644 --- a/SerpentRace_Frontend/package-lock.json +++ b/SerpentRace_Frontend/package-lock.json @@ -9,9 +9,10 @@ "version": "0.0.0", "dependencies": { "@tailwindcss/vite": "^4.1.7", - "framer-motion": "^12.12.1", + "framer-motion": "^12.19.1", "react": "^19.1.0", "react-dom": "^19.1.0", + "react-icons": "^5.5.0", "react-router-dom": "^7.6.0", "tailwindcss": "^4.1.7" }, @@ -2587,13 +2588,13 @@ } }, "node_modules/framer-motion": { - "version": "12.12.1", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.12.1.tgz", - "integrity": "sha512-PFw4/GCREHI2suK/NlPSUxd+x6Rkp80uQsfCRFSOQNrm5pZif7eGtmG1VaD/UF1fW9tRBy5AaS77StatB3OJDg==", + "version": "12.19.1", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.19.1.tgz", + "integrity": "sha512-nq9hwWAEKf4gzprbOZzKugLV5OVKF7zrNDY6UOVu+4D3ZgIkg8L9Jy6AMrpBM06fhbKJ6LEG6UY5+t7Eq6wNlg==", "license": "MIT", "dependencies": { - "motion-dom": "^12.12.1", - "motion-utils": "^12.12.1", + "motion-dom": "^12.19.0", + "motion-utils": "^12.19.0", "tslib": "^2.4.0" }, "peerDependencies": { @@ -3374,18 +3375,18 @@ } }, "node_modules/motion-dom": { - "version": "12.12.1", - "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.12.1.tgz", - "integrity": "sha512-GXq/uUbZBEiFFE+K1Z/sxdPdadMdfJ/jmBALDfIuHGi0NmtealLOfH9FqT+6aNPgVx8ilq0DtYmyQlo6Uj9LKQ==", + "version": "12.19.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.19.0.tgz", + "integrity": "sha512-m96uqq8VbwxFLU0mtmlsIVe8NGGSdpBvBSHbnnOJQxniPaabvVdGgxSamhuDwBsRhwX7xPxdICgVJlOpzn/5bw==", "license": "MIT", "dependencies": { - "motion-utils": "^12.12.1" + "motion-utils": "^12.19.0" } }, "node_modules/motion-utils": { - "version": "12.12.1", - "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.12.1.tgz", - "integrity": "sha512-f9qiqUHm7hWSLlNW8gS9pisnsN7CRFRD58vNjptKdsqFLpkVnX00TNeD6Q0d27V9KzT7ySFyK1TZ/DShfVOv6w==", + "version": "12.19.0", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.19.0.tgz", + "integrity": "sha512-BuFTHINYmV07pdWs6lj6aI63vr2N4dg0vR+td0rtrdpWOhBzIkEklZyLcvKBoEtwSqx8Jg06vUB5RS0xDiUybw==", "license": "MIT" }, "node_modules/ms": { @@ -3739,6 +3740,15 @@ "react": "^19.1.0" } }, + "node_modules/react-icons": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz", + "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, "node_modules/react-refresh": { "version": "0.17.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", diff --git a/SerpentRace_Frontend/package.json b/SerpentRace_Frontend/package.json index 913ca42c..9efa2b81 100644 --- a/SerpentRace_Frontend/package.json +++ b/SerpentRace_Frontend/package.json @@ -11,9 +11,10 @@ }, "dependencies": { "@tailwindcss/vite": "^4.1.7", - "framer-motion": "^12.12.1", + "framer-motion": "^12.19.1", "react": "^19.1.0", "react-dom": "^19.1.0", + "react-icons": "^5.5.0", "react-router-dom": "^7.6.0", "tailwindcss": "^4.1.7" }, diff --git a/SerpentRace_Frontend/src/App.jsx b/SerpentRace_Frontend/src/App.jsx index a09adb1f..5ff35f64 100644 --- a/SerpentRace_Frontend/src/App.jsx +++ b/SerpentRace_Frontend/src/App.jsx @@ -1,26 +1,27 @@ -import { useState, useEffect } from "react"; -import { BrowserRouter as Router, Route, Routes } from "react-router-dom"; -import AuthRegister from "./pages/Auth/AuthRegister"; -import AuthLogin from "./pages/Auth/AuthLogin"; -import EmailVerification from "./pages/Auth/EmailVerification"; -import Test from "./pages/Testing/Test"; -import ForgotPassword from "./pages/Auth/ForgotPassword"; -import ResetPassword from "./pages/Auth/ResetPassword"; - +import { useState, useEffect } from "react" +import { BrowserRouter as Router, Route, Routes } from "react-router-dom" +import AuthRegister from "./pages/Auth/AuthRegister" +import AuthLogin from "./pages/Auth/AuthLogin" +import EmailVerification from "./pages/Auth/EmailVerification" +import Test from "./pages/Testing/Test" +import ForgotPassword from "./pages/Auth/ForgotPassword" +import ResetPassword from "./pages/Auth/ResetPassword" +import Landingpage from "./pages/Landing/Landingpage" +import Home from "./pages/Landing/Home" function App() { - const [isMobile, setIsMobile] = useState(false); + const [isMobile, setIsMobile] = useState(false) useEffect(() => { const handleResize = () => { - setIsMobile(window.innerWidth <= 1280); - }; + setIsMobile(window.innerWidth <= 1280) + } - handleResize(); - window.addEventListener("resize", handleResize); + handleResize() + window.addEventListener("resize", handleResize) - return () => window.removeEventListener("resize", handleResize); - }, []); + return () => window.removeEventListener("resize", handleResize) + }, []) // if (isMobile) { // return ( @@ -43,10 +44,12 @@ function App() { } /> } /> } /> - + } /> + } /> + {/* Add more routes as needed */} - ); + ) } -export default App; \ No newline at end of file +export default App diff --git a/SerpentRace_Frontend/src/assets/backgrounds/Background.jsx b/SerpentRace_Frontend/src/assets/backgrounds/Background.jsx index ef038df0..19eef3bb 100755 --- a/SerpentRace_Frontend/src/assets/backgrounds/Background.jsx +++ b/SerpentRace_Frontend/src/assets/backgrounds/Background.jsx @@ -1,65 +1,68 @@ // src/assets/backgrounds/Background.jsx // Kockás háttér, ami a mousemovera reagál -import React, { useEffect, useState } from "react"; -import { motion } from "framer-motion"; +import React, { useEffect, useState } from "react" +import { motion } from "framer-motion" const Background = () => { - const [gridSize, setGridSize] = useState({ cols: 12, rows: 6 }); - const [mousePos, setMousePos] = useState({ x: 0, y: 0 }); - const [path, setPath] = useState([]); + const [gridSize, setGridSize] = useState({ cols: 12, rows: 6 }) + const [mousePos, setMousePos] = useState({ x: 0, y: 0 }) + const [path, setPath] = useState([]) useEffect(() => { const updateGrid = () => { - const width = window.innerWidth; - const height = window.innerHeight; - const cols = Math.max(8, Math.floor(width / 100)); // 100px-es cellák - const rows = Math.max(5, Math.floor(height / 100)); // 100px-es cellák - setGridSize({ cols, rows }); - }; + const width = window.innerWidth + const height = window.innerHeight + const cols = Math.max(8, Math.floor(width / 100)) // 100px-es cellák + const rows = Math.max(5, Math.floor(height / 100)) // 100px-es cellák + setGridSize({ cols, rows }) + } const handleMouseMove = (e) => { - setMousePos({ x: e.clientX, y: e.clientY }); - }; + setMousePos({ x: e.clientX, y: e.clientY }) + } - updateGrid(); - window.addEventListener("resize", updateGrid); - window.addEventListener("mousemove", handleMouseMove); + updateGrid() + window.addEventListener("resize", updateGrid) + window.addEventListener("mousemove", handleMouseMove) return () => { - window.removeEventListener("resize", updateGrid); - window.removeEventListener("mousemove", handleMouseMove); - }; - }, []); + window.removeEventListener("resize", updateGrid) + window.removeEventListener("mousemove", handleMouseMove) + } + }, []) useEffect(() => { const interval = setInterval(() => { - const newCol = Math.floor(Math.random() * gridSize.cols); - const newRow = Math.floor(Math.random() * gridSize.rows); + const newCol = Math.floor(Math.random() * gridSize.cols) + const newRow = Math.floor(Math.random() * gridSize.rows) setPath((prevPath) => { - const newPath = [...prevPath, { col: newCol, row: newRow, opacity: 1 }]; // Új pont hozzáadása + const newPath = [...prevPath, { col: newCol, row: newRow, opacity: 1 }] // Új pont hozzáadása if (newPath.length > 10) { - newPath.shift(); // Max 10 pont az útvonalon + newPath.shift() // Max 10 pont az útvonalon } - return newPath; - }); - }, 500); // Új pont hozzáadása minden 500ms-ben + return newPath + }) + }, 500) // Új pont hozzáadása minden 500ms-ben // Az útvonal pontjainak fokozatos eltűnése const fadeInterval = setInterval(() => { - setPath((prevPath) => - prevPath.map((point) => ({ - ...point, - opacity: Math.max(0, point.opacity - 0.05), // Fokozatosan csökkentjük az opacity-t - })).filter((point) => point.opacity > 0) // Eltávolítjuk a teljesen eltűnt pontokat - ); - }, 100); // Opacity frissítése minden 100ms-ben + setPath( + (prevPath) => + prevPath + .map((point) => ({ + ...point, + opacity: Math.max(0, point.opacity - 0.05), // Fokozatosan csökkentjük az opacity-t + })) + .filter((point) => point.opacity > 0) // Eltávolítjuk a teljesen eltűnt pontokat + ) + }, 100) // Opacity frissítése minden 100ms-ben return () => { - clearInterval(interval); - clearInterval(fadeInterval); - }; - }, [gridSize]); + clearInterval(interval) + clearInterval(fadeInterval) + } + }, [gridSize]) return (
@@ -71,19 +74,19 @@ const Background = () => { }} > {[...Array(gridSize.cols * gridSize.rows)].map((_, i) => { - const col = i % gridSize.cols; - const row = Math.floor(i / gridSize.cols); - const cellX = (col + 0.5) * (window.innerWidth / gridSize.cols); - const cellY = (row + 0.5) * (window.innerHeight / gridSize.rows); + const col = i % gridSize.cols + const row = Math.floor(i / gridSize.cols) + const cellX = (col + 0.5) * (window.innerWidth / gridSize.cols) + const cellY = (row + 0.5) * (window.innerHeight / gridSize.rows) - const dx = cellX - mousePos.x; - const dy = cellY - mousePos.y; - const distance = Math.sqrt(dx * dx + dy * dy); - const distanceFactor = Math.max(0, 1 - distance / 300); // Egér hatótávolsága + const dx = cellX - mousePos.x + const dy = cellY - mousePos.y + const distance = Math.sqrt(dx * dx + dy * dy) + const distanceFactor = Math.max(0, 1 - distance / 300) // Egér hatótávolsága // Az útvonalban lévő pontok opacitása - const pathPoint = path.find((p) => p.col === col && p.row === row); - const pathOpacity = pathPoint ? pathPoint.opacity : 0; + const pathPoint = path.find((p) => p.col === col && p.row === row) + const pathOpacity = pathPoint ? pathPoint.opacity : 0 return ( { }} transition={{ duration: 0.5, ease: "easeOut" }} // Lassú és sima átmenet /> - ); + ) })}
- ); -}; + ) +} -export default Background; \ No newline at end of file +export default Background diff --git a/SerpentRace_Frontend/src/assets/pictures/LogoCard.jsx b/SerpentRace_Frontend/src/assets/pictures/LogoCard.jsx new file mode 100644 index 00000000..a356f976 --- /dev/null +++ b/SerpentRace_Frontend/src/assets/pictures/LogoCard.jsx @@ -0,0 +1,134 @@ +import { useRef, useState } from "react" +import { motion, useMotionValue, useSpring } from "framer-motion" + +const springValues = { + damping: 30, + stiffness: 100, + mass: 2, +} + +export default function LogoCard({ + imageSrc, + altText = "Tilted card image", + captionText = "", + containerHeight = "300px", + containerWidth = "100%", + imageHeight = "300px", + imageWidth = "300px", + scaleOnHover = 1.1, + rotateAmplitude = 14, + showMobileWarning = true, + showTooltip = true, + overlayContent = null, + displayOverlayContent = false, +}) { + const ref = useRef(null) + const x = useMotionValue(0) + const y = useMotionValue(0) + const rotateX = useSpring(useMotionValue(0), springValues) + const rotateY = useSpring(useMotionValue(0), springValues) + const scale = useSpring(1, springValues) + const opacity = useSpring(0) + const rotateFigcaption = useSpring(0, { + stiffness: 350, + damping: 30, + mass: 1, + }) + + const [lastY, setLastY] = useState(0) + + function handleMouse(e) { + if (!ref.current) return + + const rect = ref.current.getBoundingClientRect() + const offsetX = e.clientX - rect.left - rect.width / 2 + const offsetY = e.clientY - rect.top - rect.height / 2 + + const rotationX = (offsetY / (rect.height / 2)) * -rotateAmplitude + const rotationY = (offsetX / (rect.width / 2)) * rotateAmplitude + + rotateX.set(rotationX) + rotateY.set(rotationY) + + x.set(e.clientX - rect.left) + y.set(e.clientY - rect.top) + + const velocityY = offsetY - lastY + rotateFigcaption.set(-velocityY * 0.6) + setLastY(offsetY) + } + + function handleMouseEnter() { + scale.set(scaleOnHover) + opacity.set(1) + } + + function handleMouseLeave() { + opacity.set(0) + scale.set(1) + rotateX.set(0) + rotateY.set(0) + rotateFigcaption.set(0) + } + + return ( +
+ {showMobileWarning && ( +
+ This effect is not optimized for mobile. Check on desktop. +
+ )} + + + + + {displayOverlayContent && overlayContent && ( + + {overlayContent} + + )} + + + {showTooltip && ( + + {captionText} + + )} +
+ ) +} diff --git a/SerpentRace_Frontend/src/components/Buttons/Button.jsx b/SerpentRace_Frontend/src/components/Buttons/Button.jsx index 76fa3029..f5f98836 100755 --- a/SerpentRace_Frontend/src/components/Buttons/Button.jsx +++ b/SerpentRace_Frontend/src/components/Buttons/Button.jsx @@ -1,10 +1,10 @@ // src/components/Inputs/InputBox.jsx // Gomb komponens -import { motion } from "framer-motion"; +import { motion } from "framer-motion" -export default function Button({ text, type, onClick, width }) { - const widthClass = width ? width : "w-full"; +export default function Button({ text, type, onClick, width, className }) { + const widthClass = width ? width : "w-full" return ( {text} - ); + ) } diff --git a/SerpentRace_Frontend/src/components/Buttons/ButtonDark.jsx b/SerpentRace_Frontend/src/components/Buttons/ButtonDark.jsx new file mode 100644 index 00000000..896e75d5 --- /dev/null +++ b/SerpentRace_Frontend/src/components/Buttons/ButtonDark.jsx @@ -0,0 +1,20 @@ +// src/components/Inputs/InputBox.jsx +// Gomb komponens + +import { motion } from "framer-motion" + +export default function Button({ text, type, onClick, width }) { + const widthClass = width ? width : "w-full" + + return ( + + {text} + + ) +} diff --git a/SerpentRace_Frontend/src/components/Buttons/ButtonGreen.jsx b/SerpentRace_Frontend/src/components/Buttons/ButtonGreen.jsx new file mode 100644 index 00000000..459348c6 --- /dev/null +++ b/SerpentRace_Frontend/src/components/Buttons/ButtonGreen.jsx @@ -0,0 +1,20 @@ +// src/components/Buttons/ButtonGreen.jsx +// Zöld gomb komponens (ButtonGreen) + +import { motion } from "framer-motion" + +export default function ButtonGreen({ text, type, onClick, width }) { + const widthClass = width ? width : "w-full" + + return ( + + {text} + + ) +} diff --git a/SerpentRace_Frontend/src/components/Footer/Footer.jsx b/SerpentRace_Frontend/src/components/Footer/Footer.jsx new file mode 100644 index 00000000..b4ae7533 --- /dev/null +++ b/SerpentRace_Frontend/src/components/Footer/Footer.jsx @@ -0,0 +1,54 @@ +import React from "react" +import Logo from "../../assets/pictures/Logo" + +const Footer = () => ( + +) + +export default Footer diff --git a/SerpentRace_Frontend/src/components/Inputs/InputBoxDark.jsx b/SerpentRace_Frontend/src/components/Inputs/InputBoxDark.jsx new file mode 100644 index 00000000..4aa564f3 --- /dev/null +++ b/SerpentRace_Frontend/src/components/Inputs/InputBoxDark.jsx @@ -0,0 +1,16 @@ +// src/components/Inputs/InputBox.jsx +// InputBox komponens + +export default function InputBox({ type, placeholder, value, onChange, width }) { + const widthClass = width ? width : "w-full" + + return ( + + ) +} diff --git a/SerpentRace_Frontend/src/components/Landingpage/LandingPage.jsx b/SerpentRace_Frontend/src/components/Landingpage/LandingPage.jsx new file mode 100644 index 00000000..5b42dcb2 --- /dev/null +++ b/SerpentRace_Frontend/src/components/Landingpage/LandingPage.jsx @@ -0,0 +1,178 @@ +import React from "react" +import SerpentRaceAnimation from "../../assets/SerpentRace_Animation/SerpentRace_Animation.jsx" +import LogoCard from "../../assets/pictures/LogoCard.jsx" +import logoImg from "../../assets/pictures/Logo.png" +import ButtonGreen from "../Buttons/ButtonGreen.jsx" +import { FaUsers, FaPaintBrush, FaHeadset } from "react-icons/fa" +import { motion } from "framer-motion" + +const LandingPage = ({ onNavigateToPlay, onNavigateToAuth }) => { + return ( +
+ {/* Hero Section */} + +
+ {/* Animált logo és cím */} +
+ +
+ + + A társasjáték, ami összeköt + + + + A SerpentRace egy társasjáték, ahol új barátokra lelhetsz, közösséget építhetsz és tanulhatsz – + mindezt szórakozva! + + + WE ARE READY, ARE YOU? + + + + + + +
+
+ + {/* Features Section */} + +
+ + Miért a SerpentRace a legjobb választás? + + +
+ {/* Feature 1 */} + +
+ +
+

Közösségi élmény

+

+ Ismerkedj, nevess, tanulj! A SerpentRace összehozza a társaságot, legyen szó baráti + összejövetelről vagy csapatépítésről. +

+
+ + {/* Feature 2 */} + +
+ +
+

Személyre szabható

+

+ Kérdéskártyák, szabályok, design – minden a te igényeidhez igazítható, akár céges brandinggel + is! +

+
+ + {/* Feature 3 */} + +
+ +
+

Folyamatos támogatás

+

+ Gyors, segítőkész ügyfélszolgálat – ha bármilyen kérdésed vagy problémád van, mindig + számíthatsz ránk! +

+
+
+
+
+ + {/* Call to Action Section */} + +
+ +

+ Próbáld ki te is a SerpentRace-t! +

+ +

+ Legyél részese egy új közösségi élménynek, vagy rendeld meg saját, személyre szabott + társasjátékodat – mi mindenben segítünk! +

+ + +
+
+
+
+ ) +} + +export default LandingPage diff --git a/SerpentRace_Frontend/src/components/Landingpage/PlayMenu.jsx b/SerpentRace_Frontend/src/components/Landingpage/PlayMenu.jsx new file mode 100644 index 00000000..81e65632 --- /dev/null +++ b/SerpentRace_Frontend/src/components/Landingpage/PlayMenu.jsx @@ -0,0 +1,77 @@ +import React, { useState } from "react" +import LogoCard from "../../assets/pictures/LogoCard.jsx" +import logoImg from "../../assets/pictures/Logo.png" // <-- EZT ADD HOZZÁ +import ButtonDark from "../Buttons/ButtonDark.jsx" +import InputBoxDark from "../Inputs/InputBoxDark.jsx" + +const PlayMenu = ({ onJoinGame, onCreateGame, user }) => { + const [joinCode, setJoinCode] = useState("") + const [error, setError] = useState("") + + const handleJoin = () => { + if (!joinCode.trim()) { + setError("Add meg a játék kódját!") + return + } + setError("") + onJoinGame(joinCode) + } + + const handleCreate = () => { + onCreateGame() + } + + return ( +
+ {/* Bal oldali animáció/kép */} +
+ +
+ {/* Jobb oldali panel */} +
+
+
+

Csatlakozás játékhoz

+
+ setJoinCode(e.target.value)} + width="w-full" + /> +
+ {error &&
{error}
} +
+ +
+
+ {user && ( +
+

Új játék létrehozása

+ +
+ )} +
+
+
+ ) +} + +export default PlayMenu diff --git a/SerpentRace_Frontend/src/components/Navbar/Navbar.jsx b/SerpentRace_Frontend/src/components/Navbar/Navbar.jsx new file mode 100644 index 00000000..8928e6b1 --- /dev/null +++ b/SerpentRace_Frontend/src/components/Navbar/Navbar.jsx @@ -0,0 +1,87 @@ +import React, { useState } from "react" +import Logo from "../../assets/pictures/Logo" + +const navLinkClass = "px-3 py-2 rounded-lg text-white transition-all duration-200 hover:bg-white/10" + +const Navbar = () => { + const [menuOpen, setMenuOpen] = useState(false) + + return ( + + ) +} + +export default Navbar diff --git a/SerpentRace_Frontend/src/index.css b/SerpentRace_Frontend/src/index.css index fbef2090..39b0929a 100644 --- a/SerpentRace_Frontend/src/index.css +++ b/SerpentRace_Frontend/src/index.css @@ -13,13 +13,17 @@ /* Gombok */ --color-button-primary: #5fa985; - --color-button-hover: #4b7e65; + --color-button-primary-hover: #529174; + --color-button-secondary: #181d23; + --color-button-secondary-hover: #0d0d0f; + --color-button-green: #178a5b; + --color-button-green-hover: #14784d; /* Funkcionális színek */ --color-primary: #5fa985; --color-secondary: #8d8e83; --color-accent: #0d0d0f; - + /* Háttérszínek */ --color-background: #181d23; --color-surface: #222d2f; diff --git a/SerpentRace_Frontend/src/pages/Cards/Cards.jsx b/SerpentRace_Frontend/src/pages/Cards/Cards.jsx new file mode 100644 index 00000000..e69de29b diff --git a/SerpentRace_Frontend/src/pages/Home/Home.jsx b/SerpentRace_Frontend/src/pages/Home/Home.jsx new file mode 100644 index 00000000..b3e0f001 --- /dev/null +++ b/SerpentRace_Frontend/src/pages/Home/Home.jsx @@ -0,0 +1,35 @@ +// src/pages/Home/Home.jsx +// Régi PlayMenu-s oldal, "Home" néven + +import { useState } from "react" +import Navbar from "../../components/Navbar/Navbar" +import Footer from "../../components/Footer/Footer.jsx" +import Background from "../../assets/backgrounds/Background.jsx" +import PlayMenu from "../../components/Landingpage/PlayMenu.jsx" + +export default function Home() { + // Dummy callbackok és user példa + const handleJoinGame = (code) => { + alert(`Csatlakozás játékhoz: ${code}`) + } + const handleCreateGame = () => { + alert("Új játék létrehozása") + } + const user = { name: "Teszt Elek" } + + return ( +
+
+ +
+
+ +
+
+ + {/* Ide jöhetnek további szekciók, ha szeretnél még tartalmat */} +
+
+
+ ) +} diff --git a/SerpentRace_Frontend/src/pages/Landing/Home.jsx b/SerpentRace_Frontend/src/pages/Landing/Home.jsx new file mode 100644 index 00000000..10afcc02 --- /dev/null +++ b/SerpentRace_Frontend/src/pages/Landing/Home.jsx @@ -0,0 +1,35 @@ +// src/pages/Home/Home.jsx +// Régi PlayMenu-s oldal, "Home" néven + +import { useState } from "react" +import Navbar from "../../components/Navbar/Navbar.jsx" +import Footer from "../../components/Footer/Footer.jsx" +import Background from "../../assets/backgrounds/Background.jsx" +import PlayMenu from "../../components/Landingpage/PlayMenu.jsx" + +export default function Home() { + // Dummy callbackok és user példa + const handleJoinGame = (code) => { + alert(`Csatlakozás játékhoz: ${code}`) + } + const handleCreateGame = () => { + alert("Új játék létrehozása") + } + const user = { name: "Teszt Elek" } + + return ( +
+
+ +
+
+ +
+
+ + {/* Ide jöhetnek további szekciók, ha szeretnél még tartalmat */} +
+
+
+ ) +} diff --git a/SerpentRace_Frontend/src/pages/Landing/Landingpage.jsx b/SerpentRace_Frontend/src/pages/Landing/Landingpage.jsx new file mode 100644 index 00000000..8488dbc2 --- /dev/null +++ b/SerpentRace_Frontend/src/pages/Landing/Landingpage.jsx @@ -0,0 +1,36 @@ +// src/pages/Landing/Landingpage.jsx +// Főoldal - Landing Page + +import { useState } from "react" +import Navbar from "../../components/Navbar/Navbar" +import Footer from "../../components/Footer/Footer.jsx" +import Background from "../../assets/backgrounds/Background.jsx" +import LandingPage from "../../components/Landingpage/LandingPage.jsx" + +export default function LandingPageMain() { + // Navigációs callbackok + const handleNavigateToPlay = () => { + // Itt lehet navigálni a játék oldalra + alert("Navigáció a játék oldalra") + } + + const handleNavigateToAuth = () => { + // Itt lehet navigálni a bejelentkezés oldalra + alert("Navigáció a bejelentkezés oldalra") + } + + return ( +
+
+ +
+
+ +
+
+ +
+
+
+ ) +} diff --git a/SerpentRace_Frontend/src/pages/Testing/Test.jsx b/SerpentRace_Frontend/src/pages/Testing/Test.jsx index 8c8312f0..6ee3b4d4 100644 --- a/SerpentRace_Frontend/src/pages/Testing/Test.jsx +++ b/SerpentRace_Frontend/src/pages/Testing/Test.jsx @@ -1,55 +1,50 @@ // src/pages/Testing/Test.jsx // itt tesztelhetjük a komponenseket illetve bármit -import { useState } from "react"; -import Button from "../../components/Buttons/Button"; -import InputBox from "../../components/Inputs/InputBox"; -import PopUp from "../../components/PopUp/PopUp"; -import Logo from "../../assets/pictures/Logo.jsx"; +import { useState } from "react" +import Button from "../../components/Buttons/Button" +import InputBox from "../../components/Inputs/InputBox" +import PopUp from "../../components/PopUp/PopUp" +import Logo from "../../assets/pictures/Logo.jsx" +import Navbar from "../../components/Navbar/Navbar" +import Footer from "../../components/Footer/Footer.jsx" export default function Test() { - const [showPopup, setShowPopup] = useState(false); - const [inputValue, setInputValue] = useState(""); // input értékének tárolása + const [showPopup, setShowPopup] = useState(false) + const [inputValue, setInputValue] = useState("") // input értékének tárolása return ( -
- setInputValue(e.target.value)} - /> -
- - )} +
+ +
+ setInputValue(e.target.value)} + /> +
+ + )} +
+