diff --git a/package-lock.json b/package-lock.json index ddf3bd2..80eedac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,8 @@ "dependencies": { "next": "15.3.5", "react": "^19.0.0", - "react-dom": "^19.0.0" + "react-dom": "^19.0.0", + "swiper": "^11.2.10" }, "devDependencies": { "@eslint/eslintrc": "^3", @@ -5732,6 +5733,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/swiper": { + "version": "11.2.10", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.2.10.tgz", + "integrity": "sha512-RMeVUUjTQH+6N3ckimK93oxz6Sn5la4aDlgPzB+rBrG/smPdCTicXyhxa+woIpopz+jewEloiEE3lKo1h9w2YQ==", + "funding": [ + { + "type": "patreon", + "url": "https://www.patreon.com/swiperjs" + }, + { + "type": "open_collective", + "url": "http://opencollective.com/swiper" + } + ], + "license": "MIT", + "engines": { + "node": ">= 4.7.0" + } + }, "node_modules/tailwindcss": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.11.tgz", diff --git a/package.json b/package.json index 8e6b6da..e874700 100644 --- a/package.json +++ b/package.json @@ -9,19 +9,20 @@ "lint": "next lint" }, "dependencies": { + "next": "15.3.5", "react": "^19.0.0", "react-dom": "^19.0.0", - "next": "15.3.5" + "swiper": "^11.2.10" }, "devDependencies": { - "typescript": "^5", + "@eslint/eslintrc": "^3", + "@tailwindcss/postcss": "^4", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", - "@tailwindcss/postcss": "^4", - "tailwindcss": "^4", "eslint": "^9", "eslint-config-next": "15.3.5", - "@eslint/eslintrc": "^3" + "tailwindcss": "^4", + "typescript": "^5" } } diff --git a/public/icons/swiper.svg b/public/icons/swiper.svg new file mode 100644 index 0000000..92c1e2a --- /dev/null +++ b/public/icons/swiper.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/images/activities/car1.png b/public/images/activities/car1.png new file mode 100644 index 0000000..b39ac5f Binary files /dev/null and b/public/images/activities/car1.png differ diff --git a/public/images/activities/paper_tear.png b/public/images/activities/paper_tear.png new file mode 100644 index 0000000..6c7ecd2 Binary files /dev/null and b/public/images/activities/paper_tear.png differ diff --git a/src/components/Activities.tsx b/src/components/Activities.tsx new file mode 100644 index 0000000..e35305d --- /dev/null +++ b/src/components/Activities.tsx @@ -0,0 +1,168 @@ +/* eslint-disable @next/next/no-img-element */ +import { fluxgore } from "@/utils/fonts"; +import { useRef, useState } from "react"; +import { Swiper, SwiperSlide } from "swiper/react"; +import type { Swiper as SwiperType } from "swiper"; + +import "swiper/css"; + +const iconPath = "/icons/swiper.svg"; + +function SwiperButton({ + onClick, + direction = "next", + disabled = false, +}: { + onClick: () => void; + direction?: "next" | "prev"; + disabled?: boolean; +}) { + return ( + + ); +} + +function Slide({ title, imageSrc }: { title: string; imageSrc: string }) { + return ( +
+

+ {title} +

+ Slide Image + + Background Tear +
+ ); +} + +function Activities() { + const swiperRef = useRef(null); + const [isBeginning, setIsBeginning] = useState(true); + const [isEnd, setIsEnd] = useState(false); + + const handlePrevious = () => { + swiperRef.current?.slidePrev(); + }; + + const handleNext = () => { + swiperRef.current?.slideNext(); + }; + + const handleSwiperInit = (swiper: SwiperType) => { + swiperRef.current = swiper; + setIsBeginning(swiper.isBeginning); + setIsEnd(swiper.isEnd); + }; + + const handleSlideChange = (swiper: SwiperType) => { + setIsBeginning(swiper.isBeginning); + setIsEnd(swiper.isEnd); + }; + + return ( +
+
+
+

+ Активности фестиваля +

+ +
+ + +
+
+
+ +
+
+ + + + + + + + + + + + + + + + + +
+
+
+ ); +} + +export default Activities; diff --git a/src/components/Button.tsx b/src/components/Button.tsx index 9875762..2968111 100644 --- a/src/components/Button.tsx +++ b/src/components/Button.tsx @@ -23,101 +23,99 @@ export default function Button(props: ButtonProps) { }; return ( -
-
- {/* Shadow element */} - {shadowEnabled && ( -
- )} - {/* Button */} - -
+ } + : undefined + } + > + {props.children} +
); } diff --git a/src/components/Cover.tsx b/src/components/Cover.tsx index 9c5946c..b0d9adc 100644 --- a/src/components/Cover.tsx +++ b/src/components/Cover.tsx @@ -10,83 +10,79 @@ function CoverHeading({ children, textPosition }: CoverHeadingProps) { const textAlign = textPosition || "left"; return ( -
-

- {/* Shadow layer */} - {textAlign === "left" && ( - - )} - - {textAlign === "right" && ( - - )} - - {/* Main text */} +

+ {/* Shadow layer */} + {textAlign === "left" && ( -

-
+ )} + + {textAlign === "right" && ( + + )} + + {/* Main text */} + + {children} + + ); } function DateBox() { return ( -
-
-
- 5-7 СЕНТЯБРЯ -
- МОСКВА 2025 -
+ border: "4px solid black", + }} + > +
+ 5-7 СЕНТЯБРЯ +
+ МОСКВА 2025
); diff --git a/src/components/Events.tsx b/src/components/Events.tsx index 9213335..8572bc6 100644 --- a/src/components/Events.tsx +++ b/src/components/Events.tsx @@ -59,9 +59,9 @@ function Events() {
-
-

что вас ждет

-
+

+ что вас ждет +

+ + +

diff --git a/src/components/Partners.tsx b/src/components/Partners.tsx new file mode 100644 index 0000000..0f9bfce --- /dev/null +++ b/src/components/Partners.tsx @@ -0,0 +1,5 @@ +function Partners() { + return
Partners
; +} + +export default Partners; diff --git a/src/components/Scheme.tsx b/src/components/Scheme.tsx index fafdcbc..e093638 100644 --- a/src/components/Scheme.tsx +++ b/src/components/Scheme.tsx @@ -97,7 +97,7 @@ function Scheme() {
-
+
{venues.map((venue) => (
-
-

как это Было

-
+

+ как это Было +

-
-

- Прошлый фестиваль технических видов спорта стал незабываемым - праздником скорости и мастерства, собрав рекордное количество - участников и зрителей. -

-
+

+ Прошлый фестиваль технических видов спорта стал незабываемым + праздником скорости и мастерства, собрав рекордное количество + участников и зрителей. +

diff --git a/src/pages/index.tsx b/src/pages/index.tsx index c8d6394..fdaa57b 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,3 +1,4 @@ +import Activities from "@/components/Activities"; import Cover from "@/components/Cover"; import Events from "@/components/Events"; import Info from "@/components/Info"; @@ -15,6 +16,7 @@ export default function Home() {