diff --git a/package-lock.json b/package-lock.json index bc6fb15..387691a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9262,17 +9262,6 @@ } } }, - "node_modules/next-intl/node_modules/@swc/helpers": { - "version": "0.5.23", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.23.tgz", - "integrity": "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "tslib": "^2.8.0" - } - }, "node_modules/next-themes": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz", diff --git a/public/sponsors/2fast-trimmed.png b/public/sponsors/2fast-trimmed.png new file mode 100644 index 0000000..9e81f10 Binary files /dev/null and b/public/sponsors/2fast-trimmed.png differ diff --git a/public/sponsors/2fast.png b/public/sponsors/2fast.png deleted file mode 100644 index f07d4af..0000000 Binary files a/public/sponsors/2fast.png and /dev/null differ diff --git a/public/sponsors/Artis_logo_white_text.png b/public/sponsors/Artis_logo_white_text.png index ce86a6d..0163835 100644 Binary files a/public/sponsors/Artis_logo_white_text.png and b/public/sponsors/Artis_logo_white_text.png differ diff --git a/public/sponsors/EGDA.png b/public/sponsors/EGDA.png index e830749..b842f47 100644 Binary files a/public/sponsors/EGDA.png and b/public/sponsors/EGDA.png differ diff --git a/public/sponsors/Global-productions.svg b/public/sponsors/Global-productions.svg index 1297096..cd0e4a9 100644 --- a/public/sponsors/Global-productions.svg +++ b/public/sponsors/Global-productions.svg @@ -1,80 +1,216 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/sponsors/MANK.png b/public/sponsors/MANK.png deleted file mode 100644 index d01cff0..0000000 Binary files a/public/sponsors/MANK.png and /dev/null differ diff --git a/public/sponsors/Tallinna_Haridusamet_logo_RGB.svg b/public/sponsors/Tallinna_Haridusamet_logo_RGB.svg index ace2cde..b4ffbc3 100644 --- a/public/sponsors/Tallinna_Haridusamet_logo_RGB.svg +++ b/public/sponsors/Tallinna_Haridusamet_logo_RGB.svg @@ -1 +1,127 @@ -Tallinna_Haridusamet_logo_RGB \ No newline at end of file + + + + + + Tallinna_Haridusamet_logo_RGB + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/sponsors/academic-hostel.png b/public/sponsors/academic-hostel.png new file mode 100644 index 0000000..aec095d Binary files /dev/null and b/public/sponsors/academic-hostel.png differ diff --git a/public/sponsors/alecoq.svg b/public/sponsors/alecoq.svg index d40d5c6..2fe6e3d 100644 --- a/public/sponsors/alecoq.svg +++ b/public/sponsors/alecoq.svg @@ -1,17 +1,50 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/public/sponsors/arvutitark.svg b/public/sponsors/arvutitark.svg index 317f63c..ba5cd6c 100644 --- a/public/sponsors/arvutitark.svg +++ b/public/sponsors/arvutitark.svg @@ -1,11 +1,49 @@ - - - - - - - - - - + + + + + + + + + + + + diff --git a/public/sponsors/estonian-gamedev-guild-trimmed.png b/public/sponsors/estonian-gamedev-guild-trimmed.png new file mode 100644 index 0000000..346296c Binary files /dev/null and b/public/sponsors/estonian-gamedev-guild-trimmed.png differ diff --git a/public/sponsors/estonian_gamedev_guild.png b/public/sponsors/estonian_gamedev_guild.png deleted file mode 100644 index a79fb76..0000000 Binary files a/public/sponsors/estonian_gamedev_guild.png and /dev/null differ diff --git a/public/sponsors/istar.jpg b/public/sponsors/istar.jpg new file mode 100644 index 0000000..1622b04 Binary files /dev/null and b/public/sponsors/istar.jpg differ diff --git a/public/sponsors/k-space_ee-white.png b/public/sponsors/k-space_ee-white.png index 402ff78..19a4f9e 100644 Binary files a/public/sponsors/k-space_ee-white.png and b/public/sponsors/k-space_ee-white.png differ diff --git a/public/sponsors/lvlup_logo_export.svg b/public/sponsors/lvlup_logo_export.svg index 0afd727..cec23fd 100644 --- a/public/sponsors/lvlup_logo_export.svg +++ b/public/sponsors/lvlup_logo_export.svg @@ -1,114 +1,24 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/sponsors/mank-trimmed.png b/public/sponsors/mank-trimmed.png new file mode 100644 index 0000000..4e48b14 Binary files /dev/null and b/public/sponsors/mank-trimmed.png differ diff --git a/public/sponsors/nt.png b/public/sponsors/nt.png index 31c04da..18e2de9 100644 Binary files a/public/sponsors/nt.png and b/public/sponsors/nt.png differ diff --git a/public/sponsors/park_minigolf.png b/public/sponsors/park_minigolf.png index 9a0420e..229ee52 100644 Binary files a/public/sponsors/park_minigolf.png and b/public/sponsors/park_minigolf.png differ diff --git a/public/sponsors/poke-bowl.png b/public/sponsors/poke-bowl.png new file mode 100644 index 0000000..ba70190 Binary files /dev/null and b/public/sponsors/poke-bowl.png differ diff --git a/public/sponsors/redbull-wordmark-trimmed.png b/public/sponsors/redbull-wordmark-trimmed.png new file mode 100644 index 0000000..cea5694 Binary files /dev/null and b/public/sponsors/redbull-wordmark-trimmed.png differ diff --git a/public/sponsors/redbull.png b/public/sponsors/redbull.png deleted file mode 100644 index 2c7daeb..0000000 Binary files a/public/sponsors/redbull.png and /dev/null differ diff --git a/public/sponsors/retro-burger.png b/public/sponsors/retro-burger.png new file mode 100644 index 0000000..f85a6c4 Binary files /dev/null and b/public/sponsors/retro-burger.png differ diff --git a/public/sponsors/still-frame-trimmed.png b/public/sponsors/still-frame-trimmed.png new file mode 100644 index 0000000..507721c Binary files /dev/null and b/public/sponsors/still-frame-trimmed.png differ diff --git a/public/sponsors/taltech-color.png b/public/sponsors/taltech-color.png index 4c21ce5..0b8bc2c 100644 Binary files a/public/sponsors/taltech-color.png and b/public/sponsors/taltech-color.png differ diff --git a/src/components/Sponsors.tsx b/src/components/Sponsors.tsx index e3593d0..5e39704 100644 --- a/src/components/Sponsors.tsx +++ b/src/components/Sponsors.tsx @@ -4,6 +4,7 @@ import { vipnagorgialla } from "@/components/Vipnagorgialla"; import { useTranslations } from "next-intl"; import Image from "next/image"; import NextLink from "next/link"; +import { useEffect, useRef } from "react"; interface Sponsor { href: string; @@ -14,7 +15,7 @@ interface Sponsor { className?: string; } -const sponsors: Sponsor[] = [ +const highlightedSponsors: Sponsor[] = [ { href: "https://taltech.ee", src: "/sponsors/taltech-color.png", @@ -24,39 +25,17 @@ const sponsors: Sponsor[] = [ }, { href: "https://www.redbull.com/ee-et/", - src: "/sponsors/redbull.png", - alt: "Redbull", - width: 80, - height: 80, + src: "/sponsors/redbull-wordmark-trimmed.png", + alt: "Red Bull", + width: 3509, + height: 2480, }, { - href: "https://www.simracing.ee/", - src: "/sponsors/EVAL.png", - alt: "EVAL", - width: 200, - height: 200, - }, - { - href: "https://www.instagram.com/baltic_fighting_game_league/", - src: "/sponsors/BFGL.png", - alt: "BFGL", - width: 192, - height: 192, - }, - { - href: "https://www.tomorrow.ee/", - src: "/sponsors/nt.png", - alt: "Network Tomorrow", - width: 300, - height: 200, - }, - { - href: "https://k-space.ee/", - src: "/sponsors/k-space_ee-white.png", - alt: "K-Space", - width: 244, - height: 244, - className: "not-dark:invert", + href: "https://www.stillframe.ee/", + src: "/sponsors/still-frame-trimmed.png", + alt: "Still Frame", + width: 1335, + height: 1617, }, { href: "https://globalproductions.ee/", @@ -65,14 +44,96 @@ const sponsors: Sponsor[] = [ width: 244, height: 244, }, + { + href: "https://www.tomorrow.ee/", + src: "/sponsors/nt.png", + alt: "Network Tomorrow", + width: 300, + height: 200, + }, + { + href: "https://arvutitark.ee/", + src: "/sponsors/arvutitark.svg", + alt: "Arvutitark", + width: 344, + height: 344, + }, + { + href: "https://www.alecoq.ee/", + src: "/sponsors/alecoq.svg", + alt: "A. Le Coq", + width: 842, + height: 595, + }, + { + href: "https://www.tallinn.ee/et/haridusamet", + src: "/sponsors/Tallinna_Haridusamet_logo_RGB.svg", + alt: "Tallinna Haridusamet", + width: 244, + height: 244, + }, + { + href: "https://balsnack.ee/", + src: "/sponsors/balsnack.svg", + alt: "Balsnack", + width: 123, + height: 48, + }, + { + href: "https://www.teamspeak.com/", + src: "/sponsors/TS_InLine_BlueLight.svg", + alt: "TeamSpeak", + width: 344, + height: 344, + }, +]; + +const sponsors: Sponsor[] = [ + // Gaming and technology + { + href: "https://k-space.ee/", + src: "/sponsors/k-space_ee-white.png", + alt: "K-Space", + width: 244, + height: 244, + className: "not-dark:invert", + }, + { + href: "https://www.instagram.com/baltic_fighting_game_league/", + src: "/sponsors/BFGL.png", + alt: "BFGL", + width: 192, + height: 192, + }, + { + href: "https://www.simracing.ee/", + src: "/sponsors/EVAL.png", + alt: "EVAL", + width: 200, + height: 200, + }, { href: "https://www.linkedin.com/company/gamedev-guild/", - src: "/sponsors/estonian_gamedev_guild.png", + src: "/sponsors/estonian-gamedev-guild-trimmed.png", alt: "Estonian Gamedev Guild", width: 244, height: 244, className: "not-dark:invert", }, + { + href: "https://www.egda.ee/", + src: "/sponsors/EGDA.png", + alt: "Estonian Game Developers Association", + width: 344, + height: 344, + }, + { + href: "https://www.rara.ee/en/events/interactive-video-game-museum-lvlup/", + src: "/sponsors/lvlup_logo_export.svg", + alt: "LVLup! video games museum", + width: 148, + height: 90, + }, { href: "https://alzgamer.ee/", src: "/sponsors/alzgamer.png", @@ -88,12 +149,21 @@ const sponsors: Sponsor[] = [ height: 164, }, { - href: "https://www.tallinn.ee/et/haridusamet", - src: "/sponsors/Tallinna_Haridusamet_logo_RGB.svg", - alt: "Tallinna Haridusamet", + href: "https://2fast.ee/", + src: "/sponsors/2fast-trimmed.png", + alt: "2FAST", width: 244, height: 244, }, + + // Activities and culture + { + href: "https://www.elamusgolf.eu/", + src: "/sponsors/elamusgolf.png", + alt: "Elamusgolf", + width: 164, + height: 164, + }, { href: "https://parkminigolf.ee/", src: "/sponsors/park_minigolf.png", @@ -108,54 +178,51 @@ const sponsors: Sponsor[] = [ width: 144, height: 144, }, - { - href: "https://www.elamusgolf.eu/", - src: "/sponsors/elamusgolf.png", - alt: "Elamusgolf", - width: 164, - height: 164, - }, - { - href: "https://www.egda.ee/", - src: "/sponsors/EGDA.png", - alt: "Estonian Game Developers Association", - width: 344, - height: 344, - }, - { - href: "https://www.teamspeak.com/", - src: "/sponsors/TS_InLine_BlueLight.svg", - alt: "TeamSpeak", - width: 344, - height: 344, - }, - { - href: "https://arvutitark.ee/", - src: "/sponsors/arvutitark.svg", - alt: "Arvutitark", - width: 344, - height: 344, - }, { href: "https://www.kino.ee/", src: "/sponsors/Artis_logo_white_text.png", alt: "Artis Kino", width: 344, - height: 344, + height: 344, }, { href: "https://www.tallinn.ee/et/mank", - src: "/sponsors/MANK.png", + src: "/sponsors/mank-trimmed.png", alt: "Mustamäe Avatud Noortekeskus", width: 200, - height: 244, + height: 244, + }, + + // Accommodation + { + href: "https://www.academichostel.com/en/", + src: "/sponsors/academic-hostel.png", + alt: "Academic Hostel", + width: 524, + height: 338, + }, + + // Food and drink + { + href: "https://retroburger.ee/", + src: "/sponsors/retro-burger.png", + alt: "Retro Burger", + width: 1024, + height: 1024, }, { - href: "https://2fast.ee/", - src: "/sponsors/2fast.png", - alt: "2FAST", + href: "https://pokebowl.ee/", + src: "/sponsors/poke-bowl.png", + alt: "Poké Bowl", + width: 685, + height: 432, + }, + { + href: "", + src: "/sponsors/istar.jpg", + alt: "iStar Kebab", width: 244, - height: 244, + height: 244, }, ]; @@ -165,40 +232,128 @@ interface SponsorsProps { } const tickerSponsors = [...sponsors, ...sponsors, ...sponsors, ...sponsors]; +const tickerEaseDuration = 100; + +interface FeaturedSponsorProps { + sponsor: Sponsor; +} + +function FeaturedSponsor({ sponsor }: FeaturedSponsorProps) { + return ( + + + + ); +} export default function Sponsors({ showTitle = true, className = "", }: SponsorsProps) { const t = useTranslations(); + const tickerTrackRef = useRef(null); + const tickerEaseFrameRef = useRef(null); + + const easeTickerTo = (targetPlaybackRate: number) => { + if (tickerEaseFrameRef.current !== null) { + cancelAnimationFrame(tickerEaseFrameRef.current); + } + + const animation = tickerTrackRef.current?.getAnimations()[0]; + if (!animation) return; + + const initialPlaybackRate = animation.playbackRate; + const startTime = performance.now(); + + const updatePlaybackRate = (currentTime: number) => { + const progress = Math.min( + (currentTime - startTime) / tickerEaseDuration, + 1, + ); + const easedProgress = (1 - Math.cos(Math.PI * progress)) / 2; + const playbackRate = + initialPlaybackRate + + (targetPlaybackRate - initialPlaybackRate) * easedProgress; + + animation.updatePlaybackRate(playbackRate); + + if (progress < 1) { + tickerEaseFrameRef.current = requestAnimationFrame(updatePlaybackRate); + } else { + tickerEaseFrameRef.current = null; + } + }; + + tickerEaseFrameRef.current = requestAnimationFrame(updatePlaybackRate); + }; + + const handleTickerMouseEnter = () => easeTickerTo(0); + const handleTickerMouseLeave = () => easeTickerTo(1); + + useEffect(() => { + return () => { + if (tickerEaseFrameRef.current !== null) { + cancelAnimationFrame(tickerEaseFrameRef.current); + } + }; + }, []); return ( -
{showTitle && ( -

+

{t("home.sections.poweredBy")} -

+ )} -
-
+
+ {highlightedSponsors.map((sponsor) => ( + + ))} +
+ + {showTitle && ( +

+ {t("home.sections.ourSponsors")} +

+ )} + +
+
{tickerSponsors.map((sponsor, index) => ( = sponsors.length} tabIndex={index >= sponsors.length ? -1 : undefined} > {sponsor.alt} ))} @@ -206,8 +361,25 @@ export default function Sponsors({
-
+ ); } diff --git a/translations/en.json b/translations/en.json index 6f5be1a..2c478d1 100644 --- a/translations/en.json +++ b/translations/en.json @@ -78,7 +78,8 @@ "description": "The TipiLAN expo area hosts companies, additional activities and lectures." }, "reserveSpot": "Reserve your spot today!", - "poweredBy": "TipiLAN is powered by...", + "poweredBy": "TipiLAN is powered by", + "ourSponsors": "Our sponsors", "dateAndLocation": "11th–13th Sep. 2026 @ TalTech" } }, diff --git a/translations/et.json b/translations/et.json index 416640b..0243e5f 100644 --- a/translations/et.json +++ b/translations/et.json @@ -78,7 +78,8 @@ "description": "TipiLANi messialal paiknevad ettevõtted, lisategevused ja toimuvad loengud." }, "reserveSpot": "Broneeri oma koht juba täna!", - "poweredBy": "Toetajad", + "poweredBy": "TipiLANile annavad hoogu", + "ourSponsors": "Meie toetajad", "dateAndLocation": "11.–13. sept. 2026 TalTechis" } },