diff --git a/package.json b/package.json index 1d2fc089..68ffa747 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "@tanstack/react-query": "^5.66.0", "@types/luxon": "^3.3.2", "@types/node": "^24.1.0", - "@types/react": "19.1.13", + "@types/react": "19.1.16", "@types/react-dom": "19.1.9", "@vercel/analytics": "^1.5.0", "@vercel/speed-insights": "^1.2.0", diff --git a/src/components/InfoSections.tsx b/src/components/InfoSections.tsx index 5e21965e..b812d024 100644 --- a/src/components/InfoSections.tsx +++ b/src/components/InfoSections.tsx @@ -1,7 +1,7 @@ "use client"; import React, { useState, useEffect } from "react"; -import { motion } from "framer-motion"; +import { m, motion } from "framer-motion"; import Image from "next/image"; import { useFlagState } from "@/lib/api/flag/hook"; @@ -51,6 +51,11 @@ const InfoSections: React.FC = () => { const [order, setOrder] = useState(SECTIONS); const { data: statsSectionFlag } = useFlagState("StatsSectionEnabled"); + // Easter egg; spinning the floaties + const [clicked1, setClicked1] = useState(false); + const [clicked2, setClicked2] = useState(false); + const [clicked3, setClicked3] = useState(false); + function rotateLeft(steps: number) { setOrder((prev) => { const k = steps % prev.length; @@ -70,6 +75,7 @@ const InfoSections: React.FC = () => { > {/* Animated Float Elements */} { + setClicked1(true) + setTimeout(() => setClicked1(false), 1000) + }} > { { right: "clamp(20px, 4vw, 80px)", top: "clamp(0px, 1vw, 100px)", }} - animate={{ - rotate: [0, 15, 0], - y: [0, -20, 0], - scale: [1, 0.8, 1], - }} + animate={ + clicked2 ? { + rotate: [0, 360, 0], y: [0, -20, 0], scale: [1, 0.8, 1], + transition: { + rotate: { duration: 1, ease: "easeInOut" }, // one-off spin + y: { duration: 5, repeat: Infinity, ease: "easeInOut", delay: 1 }, + scale: { duration: 5, repeat: Infinity, ease: "easeInOut", delay: 1 }, + } + } : { + rotate: [0, 15, 0], y: [0, -20, 0], scale: [1, 0.8, 1], + transition: { + rotate : { duration: 5, repeat: Infinity, ease: "easeInOut", delay: 1 }, + y: { duration: 5, repeat: Infinity, ease: "easeInOut", delay: 1 }, + scale: { duration: 5, repeat: Infinity, ease: "easeInOut", delay: 1 }, + } + } + } transition={{ duration: 5, repeat: Infinity, ease: "easeInOut", delay: 1, }} + onClick={() => { + setClicked2(true) + setTimeout(() => setClicked2(false), 1000) + }} > { { + setClicked3(true) + setTimeout(() => setClicked3(false), 1000) + }} > =12.12.47", "@types/node@>=13.7.0", "@types/node@^24.1.0": - version "24.5.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-24.5.2.tgz#52ceb83f50fe0fcfdfbd2a9fab6db2e9e7ef6446" - integrity sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ== + version "24.6.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.6.1.tgz#29cd365beb4419b3b8271c7464f1a563446d7481" + integrity sha512-ljvjjs3DNXummeIaooB4cLBKg2U6SPI6Hjra/9rRIy7CpM0HpLtG9HptkMKAb4HYWy5S7HUvJEuWgr/y0U8SHw== dependencies: - undici-types "~7.12.0" + undici-types "~7.13.0" "@types/parse-json@^4.0.0": version "4.0.2" @@ -2885,10 +2880,10 @@ resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044" integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== -"@types/react@19.1.13": - version "19.1.13" - resolved "https://registry.yarnpkg.com/@types/react/-/react-19.1.13.tgz#fc650ffa680d739a25a530f5d7ebe00cdd771883" - integrity sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ== +"@types/react@19.1.16": + version "19.1.16" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.1.16.tgz#6329b1c17a5de624439eae673f86a2c5569a42be" + integrity sha512-WBM/nDbEZmDUORKnh5i1bTnAz6vTohUf9b8esSMu+b24+srbaxa04UbJgWx78CVfNXA20sNu0odEIluZDFdCog== dependencies: csstype "^3.0.2" @@ -5680,9 +5675,9 @@ postcss@^8.4.47: source-map-js "^1.2.1" posthog-js@^1.257.0: - version "1.268.8" - resolved "https://registry.yarnpkg.com/posthog-js/-/posthog-js-1.268.8.tgz#2d2f77aa46a926fa43f93d14573a3087c0ecf956" - integrity sha512-BJiKK4MlUvs7ybnQcy1KkwAz+SZkE/wRLotetIoank5kbqZs8FLbeyozFvmmgx4aoMmaVymYBSmYphYjYQeidw== + version "1.268.9" + resolved "https://registry.yarnpkg.com/posthog-js/-/posthog-js-1.268.9.tgz#08cced88984b14353ca12f2a7313bdd40b3158f3" + integrity sha512-ejK5/i0TUQ8I1SzaIn7xWNf5TzOjWquawpgjKit8DyucD3Z1yf7LTMtgCYZN8oRx9VjiPcP34fSk8YsWQmmkTQ== dependencies: "@posthog/core" "1.2.2" core-js "^3.38.1" @@ -6646,9 +6641,9 @@ typed-array-length@^1.0.7: reflect.getprototypeof "^1.0.6" typescript@^5.9.2: - version "5.9.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.2.tgz#d93450cddec5154a2d5cabe3b8102b83316fb2a6" - integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A== + version "5.9.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" + integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== unbox-primitive@^1.1.0: version "1.1.0" @@ -6660,10 +6655,10 @@ unbox-primitive@^1.1.0: has-symbols "^1.1.0" which-boxed-primitive "^1.1.1" -undici-types@~7.12.0: - version "7.12.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.12.0.tgz#15c5c7475c2a3ba30659529f5cdb4674b622fafb" - integrity sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ== +undici-types@~7.13.0: + version "7.13.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.13.0.tgz#a20ba7c0a2be0c97bd55c308069d29d167466bff" + integrity sha512-Ov2Rr9Sx+fRgagJ5AX0qvItZG/JKKoBRAVITs1zk7IqZGTJUwgUr7qoYBpWwakpWilTZFM98rG/AFRocu10iIQ== unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.1"