diff --git a/package-lock.json b/package-lock.json index b06a26727..5b6042341 100644 --- a/package-lock.json +++ b/package-lock.json @@ -51,6 +51,7 @@ "react-dom": "^18.3.1", "react-hook-form": "^7.53.0", "react-resizable-panels": "^2.1.3", + "react-responsive-carousel": "^3.2.23", "react-router-dom": "^6.30.0", "recharts": "^2.12.7", "sonner": "^1.5.0", @@ -3507,6 +3508,12 @@ "url": "https://polar.sh/cva" } }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" + }, "node_modules/clsx": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", @@ -6044,6 +6051,18 @@ "react": "^18.3.1" } }, + "node_modules/react-easy-swipe": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/react-easy-swipe/-/react-easy-swipe-0.0.21.tgz", + "integrity": "sha512-OeR2jAxdoqUMHIn/nS9fgreI5hSpgGoL5ezdal4+oO7YSSgJR8ga+PkYGJrSrJ9MKlPcQjMQXnketrD7WNmNsg==", + "license": "MIT", + "dependencies": { + "prop-types": "^15.5.8" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/react-hook-form": { "version": "7.53.1", "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.53.1.tgz", @@ -6123,6 +6142,17 @@ "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, + "node_modules/react-responsive-carousel": { + "version": "3.2.23", + "resolved": "https://registry.npmjs.org/react-responsive-carousel/-/react-responsive-carousel-3.2.23.tgz", + "integrity": "sha512-pqJLsBaKHWJhw/ItODgbVoziR2z4lpcJg+YwmRlSk4rKH32VE633mAtZZ9kDXjy4wFO+pgUZmDKPsPe1fPmHCg==", + "license": "MIT", + "dependencies": { + "classnames": "^2.2.5", + "prop-types": "^15.5.8", + "react-easy-swipe": "^0.0.21" + } + }, "node_modules/react-router": { "version": "6.30.0", "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.0.tgz", diff --git a/package.json b/package.json index ffd85ea0c..0bd6bfe97 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,7 @@ "react-dom": "^18.3.1", "react-hook-form": "^7.53.0", "react-resizable-panels": "^2.1.3", + "react-responsive-carousel": "^3.2.23", "react-router-dom": "^6.30.0", "recharts": "^2.12.7", "sonner": "^1.5.0", diff --git a/public/images/players/herren1/carousel/carousel1.jpg b/public/images/players/herren1/carousel/carousel1.jpg new file mode 100644 index 000000000..6f6c4832e Binary files /dev/null and b/public/images/players/herren1/carousel/carousel1.jpg differ diff --git a/public/images/players/herren1/carousel/carousel2.jpg b/public/images/players/herren1/carousel/carousel2.jpg new file mode 100644 index 000000000..17084c5c0 Binary files /dev/null and b/public/images/players/herren1/carousel/carousel2.jpg differ diff --git a/public/images/players/herren1/carousel/carousel3.jpg b/public/images/players/herren1/carousel/carousel3.jpg new file mode 100644 index 000000000..d234715e0 Binary files /dev/null and b/public/images/players/herren1/carousel/carousel3.jpg differ diff --git a/public/images/players/herren1/carousel/carousel4.jpg b/public/images/players/herren1/carousel/carousel4.jpg new file mode 100644 index 000000000..0ab70eb34 Binary files /dev/null and b/public/images/players/herren1/carousel/carousel4.jpg differ diff --git a/public/images/players/herren1/carousel/carousel5.jpg b/public/images/players/herren1/carousel/carousel5.jpg new file mode 100644 index 000000000..44bed3b51 Binary files /dev/null and b/public/images/players/herren1/carousel/carousel5.jpg differ diff --git a/public/images/players/herren1/david.jpg b/public/images/players/herren1/david.jpg new file mode 100644 index 000000000..2a7e63760 Binary files /dev/null and b/public/images/players/herren1/david.jpg differ diff --git a/public/images/players/herren1/erik.jpg b/public/images/players/herren1/erik.jpg new file mode 100644 index 000000000..2de081b87 Binary files /dev/null and b/public/images/players/herren1/erik.jpg differ diff --git a/public/images/players/herren1/lasse.jpg b/public/images/players/herren1/lasse.jpg new file mode 100644 index 000000000..0edbc0adb Binary files /dev/null and b/public/images/players/herren1/lasse.jpg differ diff --git a/public/images/players/herren1/marc.jpg b/public/images/players/herren1/marc.jpg new file mode 100644 index 000000000..d1e8abccd Binary files /dev/null and b/public/images/players/herren1/marc.jpg differ diff --git a/public/images/players/herren1/peter.jpg b/public/images/players/herren1/peter.jpg new file mode 100644 index 000000000..86b4c5047 Binary files /dev/null and b/public/images/players/herren1/peter.jpg differ diff --git a/public/images/players/herren1/phillip.jpg b/public/images/players/herren1/phillip.jpg new file mode 100644 index 000000000..ea33f7247 Binary files /dev/null and b/public/images/players/herren1/phillip.jpg differ diff --git a/public/images/players/herren1/samuel.jpg b/public/images/players/herren1/samuel.jpg new file mode 100644 index 000000000..eabd00ccf Binary files /dev/null and b/public/images/players/herren1/samuel.jpg differ diff --git a/public/images/players/herren1/sten.jpg b/public/images/players/herren1/sten.jpg new file mode 100644 index 000000000..d05727fe3 Binary files /dev/null and b/public/images/players/herren1/sten.jpg differ diff --git a/public/images/players/herren1/tony.jpg b/public/images/players/herren1/tony.jpg new file mode 100644 index 000000000..e8273799f Binary files /dev/null and b/public/images/players/herren1/tony.jpg differ diff --git a/src/components/AboutSection.tsx b/src/components/AboutSection.tsx index 69b6e1411..bb8017cd7 100644 --- a/src/components/AboutSection.tsx +++ b/src/components/AboutSection.tsx @@ -10,7 +10,7 @@ const AboutSection = () => {

Über TG Laudenbach

- Der Volleyballverein TG Laudenbach wurde 1975 gegründet und blickt auf eine erfolgreiche Geschichte zurück. + Der Volleyballverein TG Laudenbach wurde 1974 gegründet und blickt auf eine erfolgreiche Geschichte zurück. Wir sind mehr als nur ein Sportverein – wir sind eine Gemeinschaft aus begeisterten Volleyballern jeden Alters und Spielniveaus.

diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx index 5c930106e..fd80b6157 100644 --- a/src/components/Navbar.tsx +++ b/src/components/Navbar.tsx @@ -1,11 +1,11 @@ - import { useState } from 'react'; import { Button } from "@/components/ui/button"; -import { Menu, X, Volleyball } from "lucide-react"; -import {Link} from "react-router-dom"; +import { Menu, X, Volleyball, ChevronDown } from "lucide-react"; +import { Link } from "react-router-dom"; const Navbar = () => { const [isMenuOpen, setIsMenuOpen] = useState(false); + const [isTeamsOpen, setIsTeamsOpen] = useState(false); const toggleMenu = () => { setIsMenuOpen(!isMenuOpen); @@ -24,7 +24,33 @@ const Navbar = () => {

Startseite Aktuelles - Teams + + {/* Gemeinsames Container-Div für Hover */} +
setIsTeamsOpen(true)} + onMouseLeave={() => setIsTeamsOpen(false)} + > + + + {/* Dropdown */} + {isTeamsOpen && ( +
+ Damen 1 + Damen 2 + Herren 1 + Herren 2 +
+ )} +
+ Galerie Über uns Kontakt @@ -34,7 +60,7 @@ const Navbar = () => {
- + {/* Mobile menu button */}
+ + +
)} diff --git a/src/pages/TeamDetailPage.tsx b/src/pages/TeamDetailPage.tsx index 93a5bede3..6886789be 100644 --- a/src/pages/TeamDetailPage.tsx +++ b/src/pages/TeamDetailPage.tsx @@ -1,21 +1,50 @@ import { useParams } from "react-router-dom"; +import { useEffect, useState } from "react"; +import { Carousel } from "react-responsive-carousel"; // Neue Library! +import "react-responsive-carousel/lib/styles/carousel.min.css"; // Wichtig! const teamData = [ { id: "1", name: "Damen I", league: "Landesliga Nord", - description: "Unsere erste Damenmannschaft ...", - trainingTimes: "Di & Do 19:00 - 21:00 Uhr", + description: "Unsere erste Damenmannschaft spielt auf hohem Niveau und liebt den Volleyballsport.", + trainingTimes: "Dienstag & Donnerstag 19:00 - 21:00 Uhr", + images: [ + "/images/damen1-1.jpg", + "/images/damen1-2.jpg", + "/images/damen1-3.jpg", + ], + players: [ + { name: "Anna", position: "Außenangriff", nickname: "Speedy", image: "/images/anna.jpg" }, + { name: "Lea", position: "Libera", nickname: "Wall-E", image: "/images/lea.jpg" }, + { name: "Sophie", position: "Zuspiel", nickname: "Magic", image: "/images/sophie.jpg" }, + ], }, { id: "2", name: "Herren I", - league: "Bezirksliga", - description: "Das Herrenteam kämpft ...", - trainingTimes: "Mo & Mi 20:00 - 22:00 Uhr", + league: "Landesliga", + description: "Das Team der Herren 1 ist tritt in der Saison 25/26 in der Landesliga beim NVV an.", + trainingTimes: "Montag & Freitag 20:00 - 22:00 Uhr", + images: [ + "/images/players/herren1/carousel/carousel2.jpg", + "/images/players/herren1/carousel/carousel2.jpg", + "/images/players/herren1/carousel/carousel2.jpg", + ], + players: [ + { name: "Samuel", position: "Mittelblock", nickname: "BeSamu", image: "/images/players/herren1/samuel.jpg" }, + { name: "Sten", position: "Außen/Annahme", nickname: "Stenislav", image: "/images/players/herren1/sten.jpg" }, + { name: "David", position: "Mittelblock", nickname: "Blocki", image: "/images/players/herren1/david.jpg" }, + { name: "Erik", position: "Libero", nickname: "Erika", image: "/images/players/herren1/erik.jpg" }, + { name: "Lasse", position: "Außen/Annahme", nickname: "Lass es!", image: "/images/players/herren1/lasse.jpg" }, + { name: "Peter", position: "Zuspieler", nickname: "-", image: "/images/players/herren1/peter.jpg" }, + { name: "Tony", position: "Zuspieler", nickname: "Tony Mahony", image: "/images/players/herren1/tony.jpg" }, + { name: "Marc", position: "Diagonal", nickname: "Marci", image: "/images/players/herren1/marc.jpg" }, + { name: "Phillip", position: "Libero", nickname: "Hifi", image: "/images/players/herren1/phillip.jpg" }, + { name: "Kathrin", position: "Trainerin", nickname: "Mutti", image: "/images/players/herren1/phillip.jpg" }, + ], }, - // usw... ]; const TeamDetailPage = () => { @@ -25,11 +54,53 @@ const TeamDetailPage = () => { if (!team) return

Team nicht gefunden 🐸

; return ( -
-

{team.name}

-

{team.league}

-

{team.description}

-

Training: {team.trainingTimes}

+
+ {/* Karussell */} +
+ + {team.images.map((src, index) => ( +
+ {`Team +
+ ))} +
+
+ + {/* Team Info */} +
+

{team.name}

+

{team.league}

+

{team.description}

+

Training: {team.trainingTimes}

+
+ + {/* Spielerübersicht */} +
+ {team.players.map((player, idx) => ( +
+ {player.name} +

{player.name}

+

{player.position}

+

„{player.nickname}“

+
+ ))} +
); };