diff --git a/package.json b/package.json
index cee61bf..ae8092a 100644
--- a/package.json
+++ b/package.json
@@ -16,45 +16,45 @@
},
"dependencies": {
"@libsql/client": "^0.15.15",
- "@paralleldrive/cuid2": "^2.2.2",
+ "@paralleldrive/cuid2": "^2.3.1",
"@radix-ui/react-alert-dialog": "^1.1.15",
"@radix-ui/react-dropdown-menu": "^2.1.16",
"@radix-ui/react-select": "^2.2.6",
- "@radix-ui/react-slot": "^1.2.3",
+ "@radix-ui/react-slot": "^1.2.4",
"@radix-ui/react-tooltip": "^1.2.8",
"@tanstack/react-table": "^8.21.3",
"@types/three": "^0.178.1",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
- "drizzle-orm": "^0.44.5",
+ "drizzle-orm": "^0.44.7",
"lucide-react": "^0.522.0",
"material-symbols": "^0.31.9",
"next": "15.3.0",
- "next-intl": "^4.3.9",
+ "next-intl": "^4.11.0",
"next-themes": "^0.4.6",
- "react": "^19.1.1",
- "react-dom": "^19.1.1",
- "react-icons": "^5.5.0",
+ "react": "^19.2.5",
+ "react-dom": "^19.2.5",
+ "react-icons": "^5.6.0",
"react-markdown": "^10.1.0",
- "tailwind-merge": "^3.3.1",
+ "tailwind-merge": "^3.5.0",
"three": "^0.178.0",
"tw-animate-css": "^1.4.0"
},
"devDependencies": {
- "@eslint/eslintrc": "^3.3.1",
- "@tailwindcss/postcss": "^4.1.13",
- "@types/bun": "^1.2.22",
- "@types/node": "^20.19.17",
- "@types/react": "^19.1.13",
- "@types/react-dom": "^19.1.9",
- "autoprefixer": "^10.4.21",
+ "@eslint/eslintrc": "^3.3.5",
+ "@tailwindcss/postcss": "^4.2.4",
+ "@types/bun": "^1.3.13",
+ "@types/node": "^20.19.39",
+ "@types/react": "^19.2.14",
+ "@types/react-dom": "^19.2.3",
+ "autoprefixer": "^10.5.0",
"dotenv": "^16.6.1",
- "drizzle-kit": "^0.31.4",
- "eslint": "^9.36.0",
+ "drizzle-kit": "^0.31.10",
+ "eslint": "^9.39.4",
"eslint-config-next": "15.3.0",
- "postcss": "^8.5.6",
- "tailwindcss": "^4.1.13",
+ "postcss": "^8.5.13",
+ "tailwindcss": "^4.2.4",
"ts-node": "^10.9.2",
- "typescript": "^5.9.2"
+ "typescript": "^5.9.3"
}
}
diff --git a/src/app/[locale]/layout.tsx b/src/app/[locale]/layout.tsx
index 386d0d5..dc3815b 100644
--- a/src/app/[locale]/layout.tsx
+++ b/src/app/[locale]/layout.tsx
@@ -28,9 +28,11 @@ export default async function LocaleLayout({
enableSystem
disableTransitionOnChange
>
-
- {children}
-
+
+
+ {children}
+
+
diff --git a/src/app/[locale]/page.tsx b/src/app/[locale]/page.tsx
index 99ad034..e354691 100644
--- a/src/app/[locale]/page.tsx
+++ b/src/app/[locale]/page.tsx
@@ -17,12 +17,12 @@ export default async function Home({
return (
{/* Hero */}
-
+
{/* Nav cards: Piletid + Turniirid */}
-
+
-
);
}
diff --git a/src/app/[locale]/piletid/page.tsx b/src/app/[locale]/piletid/page.tsx
index 2c3c596..65365a1 100644
--- a/src/app/[locale]/piletid/page.tsx
+++ b/src/app/[locale]/piletid/page.tsx
@@ -12,6 +12,7 @@ interface TicketCardProps {
buttonHref: string;
backgroundImage?: string;
backgroundOpacity?: number;
+ className?: string;
}
function TicketCard({
@@ -23,9 +24,12 @@ function TicketCard({
buttonHref,
backgroundImage,
backgroundOpacity = 40,
+ className = "",
}: TicketCardProps) {
return (
-
+
{backgroundImage && (
{price}
-
+
{features.map((feature, index) => (
-
-
+
{feature}
))}
@@ -84,53 +88,59 @@ export default async function Tickets({
const t = await getTranslations({ locale });
return (
-
+
{/* 2x2 Grid */}
-
- {/* KÜLASTAJA PILET */}
-
+
+ {/* KÜLASTAJA PILET */}
+
- {/* TOETAJA PILET */}
-
+ {/* TOETAJA PILET */}
+
- {/* LOL TURNIIRI PILET */}
-
+ {/* LOL TURNIIRI PILET */}
+
- {/* CS2 TURNIIRI PILET */}
-
+ {/* CS2 TURNIIRI PILET */}
+
);
diff --git a/src/app/[locale]/turniirid/cs2/page.tsx b/src/app/[locale]/turniirid/cs2/page.tsx
index 3ea7510..9bb9fd1 100644
--- a/src/app/[locale]/turniirid/cs2/page.tsx
+++ b/src/app/[locale]/turniirid/cs2/page.tsx
@@ -1,6 +1,6 @@
import { vipnagorgialla } from "@/components/Vipnagorgialla";
-import CS2Sidebar from "@/components/CS2Sidebar";
-import CS2Rules from "@/components/CS2Rules";
+import RuleNav from "@/components/RuleNav";
+import RulesContent from "@/components/RulesContent";
import Link from "next/link";
import { getTranslations, setRequestLocale } from "next-intl/server";
@@ -30,7 +30,7 @@ export default async function CS2Tournament({
return (
-
+
{/* Main content */}
@@ -60,7 +60,7 @@ export default async function CS2Tournament({
{/* SISSEJUHATUS */}
-
+
@@ -84,7 +84,7 @@ export default async function CS2Tournament({
{/* ÜLDINE INFO */}
-
+
@@ -96,7 +96,7 @@ export default async function CS2Tournament({
{/* AUHINNAFOND */}
-
+
@@ -109,9 +109,18 @@ export default async function CS2Tournament({
{t("cs2page.prizes.mainTitle")}
- - 1. koht - 3000€, 600€ inimese kohta, 50% ehk 1/2 auhinnafondist.
- - 2. koht - 2000€, 400€ inimese kohta, 33.3...(3)% ehk 1/3 auhinnafondist.
- - 3. koht - 1000€, 200€ inimese kohta, 16.6...(6)% ehk 1/6 auhinnafondist.
+ -
+ 1. koht - 3000€, 600€ inimese kohta, 50% ehk 1/2
+ auhinnafondist.
+
+ -
+ 2. koht - 2000€, 400€ inimese kohta, 33.3...(3)% ehk 1/3
+ auhinnafondist.
+
+ -
+ 3. koht - 1000€, 200€ inimese kohta, 16.6...(6)% ehk 1/6
+ auhinnafondist.
+
{t("cs2page.prizes.mainNote")}
@@ -123,8 +132,14 @@ export default async function CS2Tournament({
{t("cs2page.prizes.secondTitle")}
- - 1. koht - 500€, 100€ inimese kohta, 66.6...(6)% ehk 2/3 auhinnafondist.
- - 2. koht - 250€, 50€ inimese kohta, 33.3...(3)% ehk 1/3 auhinnafondist.
+ -
+ 1. koht - 500€, 100€ inimese kohta, 66.6...(6)% ehk 2/3
+ auhinnafondist.
+
+ -
+ 2. koht - 250€, 50€ inimese kohta, 33.3...(3)% ehk 1/3
+ auhinnafondist.
+
{t("cs2page.prizes.secondNote")}
@@ -132,7 +147,7 @@ export default async function CS2Tournament({
{/* TURNIIRI FORMAAT */}
-
diff --git a/src/app/[locale]/turniirid/lol/page.tsx b/src/app/[locale]/turniirid/lol/page.tsx
index f6296e5..f3bdaf5 100644
--- a/src/app/[locale]/turniirid/lol/page.tsx
+++ b/src/app/[locale]/turniirid/lol/page.tsx
@@ -1,6 +1,6 @@
import { vipnagorgialla } from "@/components/Vipnagorgialla";
-import CS2Sidebar from "@/components/CS2Sidebar";
-import CS2Rules from "@/components/CS2Rules";
+import RuleNav from "@/components/RuleNav";
+import RulesContent from "@/components/RulesContent";
import Link from "next/link";
import { getTranslations, setRequestLocale } from "next-intl/server";
@@ -52,7 +52,7 @@ export default async function LoLTournament({
{/* SISSEJUHATUS */}
-
+
@@ -76,7 +76,7 @@ export default async function LoLTournament({
{/* ÜLDINE INFO */}
-
+
@@ -88,7 +88,7 @@ export default async function LoLTournament({
{/* AUHINNAFOND */}
-
+
@@ -111,7 +111,7 @@ export default async function LoLTournament({
{/* TURNIIRI FORMAAT */}
-
diff --git a/src/app/[locale]/turniirid/page.tsx b/src/app/[locale]/turniirid/page.tsx
index b3f0a08..7475e0e 100644
--- a/src/app/[locale]/turniirid/page.tsx
+++ b/src/app/[locale]/turniirid/page.tsx
@@ -1,46 +1,44 @@
import { vipnagorgialla } from "@/components/Vipnagorgialla";
import Link from "next/link";
import Image from "next/image";
-import { getTranslations, setRequestLocale } from "next-intl/server";
+import { setRequestLocale } from "next-intl/server";
interface TournamentCardProps {
title: string;
- buttonText: string;
buttonHref: string;
backgroundImage: string;
objectPosition?: string;
+ className?: string;
}
function TournamentCard({
title,
- buttonText,
buttonHref,
backgroundImage,
objectPosition = "center",
+ className = "",
}: TournamentCardProps) {
return (
-
+
{title}
-
- {buttonText}
-
-
+
);
}
@@ -51,27 +49,25 @@ export default async function Tourney({
}) {
const { locale } = await params;
setRequestLocale(locale);
- const t = await getTranslations({ locale });
-
return (
-
+
{/* 1x2 Grid */}
-
+
{/* CS2 */}
{/* LoL */}
diff --git a/src/components/CS2Sidebar.tsx b/src/components/CS2Sidebar.tsx
deleted file mode 100644
index ffd49eb..0000000
--- a/src/components/CS2Sidebar.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-"use client";
-
-import { useEffect, useState } from "react";
-
-interface CS2SidebarProps {
- sections: { id: string; label: string }[];
-}
-
-export default function CS2Sidebar({ sections }: CS2SidebarProps) {
- const [activeSection, setActiveSection] = useState
(sections[0]?.id || "");
-
- useEffect(() => {
- const observer = new IntersectionObserver(
- (entries) => {
- entries.forEach((entry) => {
- if (entry.isIntersecting) {
- setActiveSection(entry.target.id);
- }
- });
- },
- {
- rootMargin: "-20% 0px -70% 0px",
- threshold: 0,
- }
- );
-
- sections.forEach((section) => {
- const element = document.getElementById(section.id);
- if (element) {
- observer.observe(element);
- }
- });
-
- return () => {
- sections.forEach((section) => {
- const element = document.getElementById(section.id);
- if (element) {
- observer.unobserve(element);
- }
- });
- };
- }, [sections]);
-
- return (
-
- );
-}
diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx
index 8ffad51..57ff6d1 100644
--- a/src/components/Footer.tsx
+++ b/src/components/Footer.tsx
@@ -15,11 +15,9 @@ const Footer = () => {
>
{t("footer.contact")}
-
-
-
- MTÜ Lapikud
-
+
+
+
MTÜ Lapikud
{t("footer.registrationCode")}:{" "}
@@ -30,12 +28,12 @@ const Footer = () => {
Swedbank EE842200221094704780
-
+
@@ -49,7 +47,7 @@ const Footer = () => {
{/* Social media */}
-