feat: add new nav
Vercel Production Deployment / Deploy-Production (push) Successful in 2m13s

feat: add copyright start years
chore: update dependencies
This commit is contained in:
2025-04-30 01:17:47 +08:00
parent 6d1294752b
commit c3d299cdc1
5 changed files with 284 additions and 159 deletions
+3 -2
View File
@@ -8,10 +8,11 @@ export default function Home() {
<div className="min-h-screen flex flex-col bg-gray-100 dark:bg-gray-900 transition-colors duration-300">
<Header />
<main className="container mx-auto p-4 grow">
<section className="text-center mb-12 max-w-2xl mt-8 mx-auto max-md:mt-4">
<section className="text-center mb-12 max-w-2xl mx-auto">
<h2 className="text-4xl font-extrabold text-gray-900 dark:text-gray-100">智能计算实验室简介</h2>
<p className="text-xl text-gray-600 dark:text-gray-300 mt-4 text-left indent-8">
在物理的世界里,粒子有形形色色的活法,有的粒子很轻,终生不为人所注意;有的粒子会一鸣惊人,在湮灭时释放出大量的光;有的粒子狡黠善变,一辈子不停地改变身份,时时刻刻要成为别的粒子;但有的粒子一生稳定,怀揣着出发时得到的巨大能量,一生孤独而平静地飞行,只活在自己的轨道里。(摘自《丁肇中 伟大的是物理》,作者:李斐然)
在物理的世界里,粒子有形形色色的活法,有的粒子很轻,终生不为人所注意;有的粒子会一鸣惊人,在湮灭时释放出大量的光;有的粒子狡黠善变,一辈子不停地改变身份,时时刻刻要成为别的粒子;但有的粒子一生稳定,怀揣着出发时得到的巨大能量,一生孤独而平静地飞行,只活在自己的轨道里。(摘自《丁肇中
伟大的是物理》,作者:李斐然)
</p>
</section>
<section className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8">
+1 -1
View File
@@ -5,7 +5,7 @@ export default function Footer() {
<footer className="w-full bg-white dark:bg-gray-950 shadow-sm p-4 text-left text-gray-500 dark:text-gray-400 flex flex-row gap-2">
<div className="container mx-auto">
<div>
© {new Date().getFullYear()} 智能计算实验室 · Designed by{" "}
© 2024 - {new Date().getFullYear()} 智能计算实验室 · Designed by{" "}
<Link href="https://isteed.cc" target="_blank" rel="noopener noreferrer">
LufsX
</Link>
+113 -11
View File
@@ -1,23 +1,125 @@
"use client";
import Link from "next/link";
import { usePathname } from "next/navigation";
import { useState, useCallback } from "react";
import { motion } from "framer-motion";
// 导航链接配置
const NAV_LINKS = [{ path: "/", label: "首页" }];
export default function Header() {
const pathname = usePathname();
const [isMenuOpen, setIsMenuOpen] = useState(false);
const toggleMenu = useCallback(() => {
setIsMenuOpen((prev) => !prev);
}, []);
const closeMenu = useCallback(() => {
setIsMenuOpen(false);
}, []);
// 导航链接组件
const NavLink = ({ href, children, className, onClick }: { href: string; children: React.ReactNode; className?: string; onClick?: () => void }) => (
<Link href={href} className={pathname === href ? "no-underline" : ""} onClick={onClick}>
<motion.div className={className} whileHover={{ scale: 1.05 }} whileTap={{ scale: 0.95 }} initial={false}>
{children}
</motion.div>
</Link>
);
// 按钮组件
const NavButton = ({ onClick, children, className }: { onClick: () => void; children: React.ReactNode; className?: string }) => (
<button onClick={onClick} className={className}>
<motion.div whileHover={{ scale: 1.05 }} whileTap={{ scale: 0.95 }} initial={false}>
{children}
</motion.div>
</button>
);
return (
<header className="home-header px-4 w-full bg-white dark:bg-gray-950 shadow-sm flex sm:px-8">
<nav className="container mx-auto flex justify-between items-center">
<>
<motion.header className="fixed top-0 left-0 right-0 bg-white/80 dark:bg-gray-950/80 py-3 px-5 z-40 backdrop-blur-sm shadow-sm">
<nav className="container max-w-7xl mx-auto flex justify-between items-center">
<div className="flex items-center">
<Link href="/">
<h1 className="text-2xl font-bold text-gray-900 dark:text-gray-100">智能计算实验室</h1>
<motion.h1 className="text-xl font-bold text-gray-900 dark:text-gray-100" whileHover={{ scale: 1.02 }} whileTap={{ scale: 0.98 }}>
智能计算实验室
</motion.h1>
</Link>
</div>
<div className="flex space-x-4">
<Link className="nav-link py-3 px-2 text-gray-700 dark:text-gray-200 hover:text-blue-600 dark:hover:text-blue-400 transition-colors" href="/">
首页
</Link>
{/* <Link className="nav-link py-3 px-2 text-gray-700 dark:text-gray-200 hover:text-blue-600 dark:hover:text-blue-400 transition-colors" href="/">
联系
</Link> */}
{/* 桌面端导航 */}
<div className="hidden md:flex space-x-6">
{NAV_LINKS.map((link) => (
<NavLink
key={link.path}
href={link.path}
className={`text-sm font-medium text-gray-700 dark:text-gray-200 hover:text-blue-600 dark:hover:text-blue-400 ${
pathname === link.path ? "border-b border-gray-600 dark:border-gray-400 hover:border-blue-600 dark:hover:border-blue-400" : "border-b border-transparent"
}`}
>
{link.label}
</NavLink>
))}
</div>
{/* 移动端菜单按钮 */}
<NavButton className="flex items-center md:hidden focus:outline-none" onClick={toggleMenu}>
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-label="打开导航菜单" className="text-gray-900 dark:text-gray-100">
<path d="M4 6h16M4 12h16M4 18h16" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
</svg>
</NavButton>
</nav>
</header>
</motion.header>
{/* 遮罩层 */}
<div
className={`md:hidden fixed inset-0 bg-black bg-opacity-50 z-40 transition-opacity duration-300 ${isMenuOpen ? "opacity-25" : "opacity-0 pointer-events-none"}`}
onClick={closeMenu}
aria-hidden="true"
/>
{/* 移动端侧边菜单 */}
<motion.div
className="md:hidden fixed top-0 right-0 h-full w-64 bg-white dark:bg-gray-900 shadow-lg z-50"
initial={{ x: "100%" }}
animate={{ x: isMenuOpen ? 0 : "100%" }}
transition={{
type: "tween",
ease: [0.05, 1, 0.5, 1],
duration: 0.3,
}}
role="dialog"
aria-modal="true"
aria-label="导航菜单"
>
<div className="flex justify-between items-center p-3 border-b border-gray-200 dark:border-gray-800">
<h2 className="text-lg font-bold text-gray-900 dark:text-gray-100">智能计算实验室</h2>
<NavButton onClick={closeMenu} className="focus:outline-none">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-label="关闭导航菜单" className="text-gray-900 dark:text-gray-100">
<path d="M18 6L6 18M6 6l12 12" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
</svg>
</NavButton>
</div>
<div className="px-5 py-4">
{NAV_LINKS.map((link) => (
<NavLink
key={link.path}
href={link.path}
className={`block py-3 text-gray-700 dark:text-gray-200 hover:text-blue-600 dark:hover:text-blue-400 ${
pathname === link.path ? "border-l-2 border-blue-600 dark:border-blue-400 pl-3 font-medium" : "pl-3"
}`}
onClick={closeMenu}
>
{link.label}
</NavLink>
))}
</div>
</motion.div>
{/* 避免被导航栏遮挡 */}
<div className="h-16"></div>
</>
);
}
+6 -5
View File
@@ -9,18 +9,19 @@
"lint": "next lint"
},
"dependencies": {
"next": "15.3.0",
"framer-motion": "12.9.2",
"next": "15.3.1",
"react": "19.1.0",
"react-dom": "19.1.0"
},
"devDependencies": {
"@eslint/eslintrc": "3.3.1",
"@tailwindcss/postcss": "^4.1.4",
"@types/node": "22.14.1",
"@tailwindcss/postcss": "4.1.4",
"@types/node": "22.15.3",
"@types/react": "19.1.2",
"@types/react-dom": "19.1.2",
"eslint": "9.24.0",
"eslint-config-next": "15.3.0",
"eslint": "9.25.1",
"eslint-config-next": "15.3.1",
"postcss": "8.5.3",
"tailwindcss": "4.1.4",
"typescript": "5.8.3"
+157 -136
View File
@@ -8,9 +8,12 @@ importers:
.:
dependencies:
framer-motion:
specifier: 12.9.2
version: 12.9.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
next:
specifier: 15.3.0
version: 15.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
specifier: 15.3.1
version: 15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
react:
specifier: 19.1.0
version: 19.1.0
@@ -22,11 +25,11 @@ importers:
specifier: 3.3.1
version: 3.3.1
'@tailwindcss/postcss':
specifier: ^4.1.4
specifier: 4.1.4
version: 4.1.4
'@types/node':
specifier: 22.14.1
version: 22.14.1
specifier: 22.15.3
version: 22.15.3
'@types/react':
specifier: 19.1.2
version: 19.1.2
@@ -34,11 +37,11 @@ importers:
specifier: 19.1.2
version: 19.1.2(@types/react@19.1.2)
eslint:
specifier: 9.24.0
version: 9.24.0(jiti@2.4.2)
specifier: 9.25.1
version: 9.25.1(jiti@2.4.2)
eslint-config-next:
specifier: 15.3.0
version: 15.3.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
specifier: 15.3.1
version: 15.3.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3)
postcss:
specifier: 8.5.3
version: 8.5.3
@@ -76,24 +79,24 @@ packages:
resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/core@0.12.0':
resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==}
'@eslint/core@0.13.0':
resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/eslintrc@3.3.1':
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/js@9.24.0':
resolution: {integrity: sha512-uIY/y3z0uvOGX8cp1C2fiC4+ZmBhp6yZWkojtHL1YEMnRt1Y63HB9TM17proGEmeG7HeUY+UP36F0aknKYTpYA==}
'@eslint/js@9.25.1':
resolution: {integrity: sha512-dEIwmjntEx8u3Uvv+kr3PDeeArL8Hw07H9kyYxCjnM9pBjfEhk6uLXSchxxzgiwtRhhzVzqmUSDFBOi1TuZ7qg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.6':
resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/plugin-kit@0.2.7':
resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==}
'@eslint/plugin-kit@0.2.8':
resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@humanfs/core@0.19.1':
@@ -226,56 +229,56 @@ packages:
cpu: [x64]
os: [win32]
'@next/env@15.3.0':
resolution: {integrity: sha512-6mDmHX24nWlHOlbwUiAOmMyY7KELimmi+ed8qWcJYjqXeC+G6JzPZ3QosOAfjNwgMIzwhXBiRiCgdh8axTTdTA==}
'@next/env@15.3.1':
resolution: {integrity: sha512-cwK27QdzrMblHSn9DZRV+DQscHXRuJv6MydlJRpFSqJWZrTYMLzKDeyueJNN9MGd8NNiUKzDQADAf+dMLXX7YQ==}
'@next/eslint-plugin-next@15.3.0':
resolution: {integrity: sha512-511UUcpWw5GWTyKfzW58U2F/bYJyjLE9e3SlnGK/zSXq7RqLlqFO8B9bitJjumLpj317fycC96KZ2RZsjGNfBw==}
'@next/eslint-plugin-next@15.3.1':
resolution: {integrity: sha512-oEs4dsfM6iyER3jTzMm4kDSbrQJq8wZw5fmT6fg2V3SMo+kgG+cShzLfEV20senZzv8VF+puNLheiGPlBGsv2A==}
'@next/swc-darwin-arm64@15.3.0':
resolution: {integrity: sha512-PDQcByT0ZfF2q7QR9d+PNj3wlNN4K6Q8JoHMwFyk252gWo4gKt7BF8Y2+KBgDjTFBETXZ/TkBEUY7NIIY7A/Kw==}
'@next/swc-darwin-arm64@15.3.1':
resolution: {integrity: sha512-hjDw4f4/nla+6wysBL07z52Gs55Gttp5Bsk5/8AncQLJoisvTBP0pRIBK/B16/KqQyH+uN4Ww8KkcAqJODYH3w==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
'@next/swc-darwin-x64@15.3.0':
resolution: {integrity: sha512-m+eO21yg80En8HJ5c49AOQpFDq+nP51nu88ZOMCorvw3g//8g1JSUsEiPSiFpJo1KCTQ+jm9H0hwXK49H/RmXg==}
'@next/swc-darwin-x64@15.3.1':
resolution: {integrity: sha512-q+aw+cJ2ooVYdCEqZVk+T4Ni10jF6Fo5DfpEV51OupMaV5XL6pf3GCzrk6kSSZBsMKZtVC1Zm/xaNBFpA6bJ2g==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
'@next/swc-linux-arm64-gnu@15.3.0':
resolution: {integrity: sha512-H0Kk04ZNzb6Aq/G6e0un4B3HekPnyy6D+eUBYPJv9Abx8KDYgNMWzKt4Qhj57HXV3sTTjsfc1Trc1SxuhQB+Tg==}
'@next/swc-linux-arm64-gnu@15.3.1':
resolution: {integrity: sha512-wBQ+jGUI3N0QZyWmmvRHjXjTWFy8o+zPFLSOyAyGFI94oJi+kK/LIZFJXeykvgXUk1NLDAEFDZw/NVINhdk9FQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
'@next/swc-linux-arm64-musl@15.3.0':
resolution: {integrity: sha512-k8GVkdMrh/+J9uIv/GpnHakzgDQhrprJ/FbGQvwWmstaeFG06nnAoZCJV+wO/bb603iKV1BXt4gHG+s2buJqZA==}
'@next/swc-linux-arm64-musl@15.3.1':
resolution: {integrity: sha512-IIxXEXRti/AulO9lWRHiCpUUR8AR/ZYLPALgiIg/9ENzMzLn3l0NSxVdva7R/VDcuSEBo0eGVCe3evSIHNz0Hg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
'@next/swc-linux-x64-gnu@15.3.0':
resolution: {integrity: sha512-ZMQ9yzDEts/vkpFLRAqfYO1wSpIJGlQNK9gZ09PgyjBJUmg8F/bb8fw2EXKgEaHbCc4gmqMpDfh+T07qUphp9A==}
'@next/swc-linux-x64-gnu@15.3.1':
resolution: {integrity: sha512-bfI4AMhySJbyXQIKH5rmLJ5/BP7bPwuxauTvVEiJ/ADoddaA9fgyNNCcsbu9SlqfHDoZmfI6g2EjzLwbsVTr5A==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
'@next/swc-linux-x64-musl@15.3.0':
resolution: {integrity: sha512-RFwq5VKYTw9TMr4T3e5HRP6T4RiAzfDJ6XsxH8j/ZeYq2aLsBqCkFzwMI0FmnSsLaUbOb46Uov0VvN3UciHX5A==}
'@next/swc-linux-x64-musl@15.3.1':
resolution: {integrity: sha512-FeAbR7FYMWR+Z+M5iSGytVryKHiAsc0x3Nc3J+FD5NVbD5Mqz7fTSy8CYliXinn7T26nDMbpExRUI/4ekTvoiA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
'@next/swc-win32-arm64-msvc@15.3.0':
resolution: {integrity: sha512-a7kUbqa/k09xPjfCl0RSVAvEjAkYBYxUzSVAzk2ptXiNEL+4bDBo9wNC43G/osLA/EOGzG4CuNRFnQyIHfkRgQ==}
'@next/swc-win32-arm64-msvc@15.3.1':
resolution: {integrity: sha512-yP7FueWjphQEPpJQ2oKmshk/ppOt+0/bB8JC8svPUZNy0Pi3KbPx2Llkzv1p8CoQa+D2wknINlJpHf3vtChVBw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
'@next/swc-win32-x64-msvc@15.3.0':
resolution: {integrity: sha512-vHUQS4YVGJPmpjn7r5lEZuMhK5UQBNBRSB+iGDvJjaNk649pTIcRluDWNb9siunyLLiu/LDPHfvxBtNamyuLTw==}
'@next/swc-win32-x64-msvc@15.3.1':
resolution: {integrity: sha512-3PMvF2zRJAifcRNni9uMk/gulWfWS+qVI/pagd+4yLF5bcXPZPPH2xlYRYOsUjmCJOXSTAC2PjRzbhsRzR2fDQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
@@ -405,8 +408,8 @@ packages:
'@types/json5@0.0.29':
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
'@types/node@22.14.1':
resolution: {integrity: sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==}
'@types/node@22.15.3':
resolution: {integrity: sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==}
'@types/react-dom@19.1.2':
resolution: {integrity: sha512-XGJkWF41Qq305SKWEILa1O8vzhb3aOo3ogBlSmiqNko/WmRb6QIaweuZCXjKygVDXpzXb5wyxKTSOsmkuqj+Qw==}
@@ -659,10 +662,6 @@ packages:
emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
enhanced-resolve@5.17.1:
resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==}
engines: {node: '>=10.13.0'}
enhanced-resolve@5.18.1:
resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==}
engines: {node: '>=10.13.0'}
@@ -702,8 +701,8 @@ packages:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
eslint-config-next@15.3.0:
resolution: {integrity: sha512-+Z3M1W9MnJjX3W4vI9CHfKlEyhTWOUHvc5dB89FyRnzPsUkJlLWZOi8+1pInuVcSztSM4MwBFB0hIHf4Rbwu4g==}
eslint-config-next@15.3.1:
resolution: {integrity: sha512-GnmyVd9TE/Ihe3RrvcafFhXErErtr2jS0JDeCSp3vWvy86AXwHsRBt0E3MqP/m8ACS1ivcsi5uaqjbhsG18qKw==}
peerDependencies:
eslint: ^7.23.0 || ^8.0.0 || ^9.0.0
typescript: '>=3.3.1'
@@ -788,8 +787,8 @@ packages:
resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint@9.24.0:
resolution: {integrity: sha512-eh/jxIEJyZrvbWRe4XuVclLPDYSYYYgLy5zXGGxD6j8zjSAxFEzI2fL/8xNq6O2yKqVt+eF2YhV+hxjV6UKXwQ==}
eslint@9.25.1:
resolution: {integrity: sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
@@ -860,6 +859,20 @@ packages:
for-each@0.3.3:
resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
framer-motion@12.9.2:
resolution: {integrity: sha512-R0O3Jdqbfwywpm45obP+8sTgafmdEcUoShQTAV+rB5pi+Y1Px/FYL5qLLRe5tPtBdN1J4jos7M+xN2VV2oEAbQ==}
peerDependencies:
'@emotion/is-prop-valid': '*'
react: ^18.0.0 || ^19.0.0
react-dom: ^18.0.0 || ^19.0.0
peerDependenciesMeta:
'@emotion/is-prop-valid':
optional: true
react:
optional: true
react-dom:
optional: true
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
@@ -1204,6 +1217,12 @@ packages:
minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
motion-dom@12.9.1:
resolution: {integrity: sha512-xqXEwRLDYDTzOgXobSoWtytRtGlf7zdkRfFbrrdP7eojaGQZ5Go4OOKtgnx7uF8sAkfr1ZjMvbCJSCIT2h6fkQ==}
motion-utils@12.8.3:
resolution: {integrity: sha512-GYVauZEbca8/zOhEiYOY9/uJeedYQld6co/GJFKOy//0c/4lDqk0zB549sBYqqV2iMuX+uHrY1E5zd8A2L+1Lw==}
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
@@ -1215,8 +1234,8 @@ packages:
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
next@15.3.0:
resolution: {integrity: sha512-k0MgP6BsK8cZ73wRjMazl2y2UcXj49ZXLDEgx6BikWuby/CN+nh81qFFI16edgd7xYpe/jj2OZEIwCoqnzz0bQ==}
next@15.3.1:
resolution: {integrity: sha512-8+dDV0xNLOgHlyBxP1GwHGVaNXsmp+2NhZEYrXr24GWLHtt27YrBPbPuHvzlhi7kZNYjeJNR93IF5zfFu5UL0g==}
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
hasBin: true
peerDependencies:
@@ -1385,11 +1404,6 @@ packages:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
semver@7.6.3:
resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
engines: {node: '>=10'}
hasBin: true
semver@7.7.1:
resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
engines: {node: '>=10'}
@@ -1593,9 +1607,9 @@ snapshots:
tslib: 2.8.1
optional: true
'@eslint-community/eslint-utils@4.4.1(eslint@9.24.0(jiti@2.4.2))':
'@eslint-community/eslint-utils@4.4.1(eslint@9.25.1(jiti@2.4.2))':
dependencies:
eslint: 9.24.0(jiti@2.4.2)
eslint: 9.25.1(jiti@2.4.2)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {}
@@ -1610,7 +1624,7 @@ snapshots:
'@eslint/config-helpers@0.2.1': {}
'@eslint/core@0.12.0':
'@eslint/core@0.13.0':
dependencies:
'@types/json-schema': 7.0.15
@@ -1628,13 +1642,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@eslint/js@9.24.0': {}
'@eslint/js@9.25.1': {}
'@eslint/object-schema@2.1.6': {}
'@eslint/plugin-kit@0.2.7':
'@eslint/plugin-kit@0.2.8':
dependencies:
'@eslint/core': 0.12.0
'@eslint/core': 0.13.0
levn: 0.4.1
'@humanfs/core@0.19.1': {}
@@ -1728,34 +1742,34 @@ snapshots:
'@img/sharp-win32-x64@0.34.1':
optional: true
'@next/env@15.3.0': {}
'@next/env@15.3.1': {}
'@next/eslint-plugin-next@15.3.0':
'@next/eslint-plugin-next@15.3.1':
dependencies:
fast-glob: 3.3.1
'@next/swc-darwin-arm64@15.3.0':
'@next/swc-darwin-arm64@15.3.1':
optional: true
'@next/swc-darwin-x64@15.3.0':
'@next/swc-darwin-x64@15.3.1':
optional: true
'@next/swc-linux-arm64-gnu@15.3.0':
'@next/swc-linux-arm64-gnu@15.3.1':
optional: true
'@next/swc-linux-arm64-musl@15.3.0':
'@next/swc-linux-arm64-musl@15.3.1':
optional: true
'@next/swc-linux-x64-gnu@15.3.0':
'@next/swc-linux-x64-gnu@15.3.1':
optional: true
'@next/swc-linux-x64-musl@15.3.0':
'@next/swc-linux-x64-musl@15.3.1':
optional: true
'@next/swc-win32-arm64-msvc@15.3.0':
'@next/swc-win32-arm64-msvc@15.3.1':
optional: true
'@next/swc-win32-x64-msvc@15.3.0':
'@next/swc-win32-x64-msvc@15.3.1':
optional: true
'@nodelib/fs.scandir@2.1.5':
@@ -1854,7 +1868,7 @@ snapshots:
'@types/json5@0.0.29': {}
'@types/node@22.14.1':
'@types/node@22.15.3':
dependencies:
undici-types: 6.21.0
@@ -1866,15 +1880,15 @@ snapshots:
dependencies:
csstype: 3.1.3
'@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)':
'@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3)':
dependencies:
'@eslint-community/regexpp': 4.12.1
'@typescript-eslint/parser': 8.18.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/parser': 8.18.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/scope-manager': 8.18.0
'@typescript-eslint/type-utils': 8.18.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/utils': 8.18.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/type-utils': 8.18.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/utils': 8.18.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/visitor-keys': 8.18.0
eslint: 9.24.0(jiti@2.4.2)
eslint: 9.25.1(jiti@2.4.2)
graphemer: 1.4.0
ignore: 5.3.2
natural-compare: 1.4.0
@@ -1883,14 +1897,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/parser@8.18.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)':
'@typescript-eslint/parser@8.18.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3)':
dependencies:
'@typescript-eslint/scope-manager': 8.18.0
'@typescript-eslint/types': 8.18.0
'@typescript-eslint/typescript-estree': 8.18.0(typescript@5.8.3)
'@typescript-eslint/visitor-keys': 8.18.0
debug: 4.4.0
eslint: 9.24.0(jiti@2.4.2)
eslint: 9.25.1(jiti@2.4.2)
typescript: 5.8.3
transitivePeerDependencies:
- supports-color
@@ -1900,12 +1914,12 @@ snapshots:
'@typescript-eslint/types': 8.18.0
'@typescript-eslint/visitor-keys': 8.18.0
'@typescript-eslint/type-utils@8.18.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)':
'@typescript-eslint/type-utils@8.18.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3)':
dependencies:
'@typescript-eslint/typescript-estree': 8.18.0(typescript@5.8.3)
'@typescript-eslint/utils': 8.18.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/utils': 8.18.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3)
debug: 4.4.0
eslint: 9.24.0(jiti@2.4.2)
eslint: 9.25.1(jiti@2.4.2)
ts-api-utils: 1.4.3(typescript@5.8.3)
typescript: 5.8.3
transitivePeerDependencies:
@@ -1921,19 +1935,19 @@ snapshots:
fast-glob: 3.3.2
is-glob: 4.0.3
minimatch: 9.0.5
semver: 7.6.3
semver: 7.7.1
ts-api-utils: 1.4.3(typescript@5.8.3)
typescript: 5.8.3
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@8.18.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)':
'@typescript-eslint/utils@8.18.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3)':
dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.24.0(jiti@2.4.2))
'@eslint-community/eslint-utils': 4.4.1(eslint@9.25.1(jiti@2.4.2))
'@typescript-eslint/scope-manager': 8.18.0
'@typescript-eslint/types': 8.18.0
'@typescript-eslint/typescript-estree': 8.18.0(typescript@5.8.3)
eslint: 9.24.0(jiti@2.4.2)
eslint: 9.25.1(jiti@2.4.2)
typescript: 5.8.3
transitivePeerDependencies:
- supports-color
@@ -2169,11 +2183,6 @@ snapshots:
emoji-regex@9.2.2: {}
enhanced-resolve@5.17.1:
dependencies:
graceful-fs: 4.2.11
tapable: 2.2.1
enhanced-resolve@5.18.1:
dependencies:
graceful-fs: 4.2.11
@@ -2274,19 +2283,19 @@ snapshots:
escape-string-regexp@4.0.0: {}
eslint-config-next@15.3.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3):
eslint-config-next@15.3.1(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3):
dependencies:
'@next/eslint-plugin-next': 15.3.0
'@next/eslint-plugin-next': 15.3.1
'@rushstack/eslint-patch': 1.10.4
'@typescript-eslint/eslint-plugin': 8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/parser': 8.18.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
eslint: 9.24.0(jiti@2.4.2)
'@typescript-eslint/eslint-plugin': 8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/parser': 8.18.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3)
eslint: 9.25.1(jiti@2.4.2)
eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.24.0(jiti@2.4.2))
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.18.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.24.0(jiti@2.4.2))
eslint-plugin-jsx-a11y: 6.10.2(eslint@9.24.0(jiti@2.4.2))
eslint-plugin-react: 7.37.2(eslint@9.24.0(jiti@2.4.2))
eslint-plugin-react-hooks: 5.1.0(eslint@9.24.0(jiti@2.4.2))
eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.25.1(jiti@2.4.2))
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.18.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.25.1(jiti@2.4.2))
eslint-plugin-jsx-a11y: 6.10.2(eslint@9.25.1(jiti@2.4.2))
eslint-plugin-react: 7.37.2(eslint@9.25.1(jiti@2.4.2))
eslint-plugin-react-hooks: 5.1.0(eslint@9.25.1(jiti@2.4.2))
optionalDependencies:
typescript: 5.8.3
transitivePeerDependencies:
@@ -2302,34 +2311,34 @@ snapshots:
transitivePeerDependencies:
- supports-color
eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.24.0(jiti@2.4.2)):
eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.25.1(jiti@2.4.2)):
dependencies:
'@nolyfill/is-core-module': 1.0.39
debug: 4.4.0
enhanced-resolve: 5.17.1
eslint: 9.24.0(jiti@2.4.2)
enhanced-resolve: 5.18.1
eslint: 9.25.1(jiti@2.4.2)
fast-glob: 3.3.2
get-tsconfig: 4.8.1
is-bun-module: 1.3.0
is-glob: 4.0.3
stable-hash: 0.0.4
optionalDependencies:
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.18.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.24.0(jiti@2.4.2))
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.18.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.25.1(jiti@2.4.2))
transitivePeerDependencies:
- supports-color
eslint-module-utils@2.12.0(@typescript-eslint/parser@8.18.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.24.0(jiti@2.4.2)):
eslint-module-utils@2.12.0(@typescript-eslint/parser@8.18.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.25.1(jiti@2.4.2)):
dependencies:
debug: 3.2.7
optionalDependencies:
'@typescript-eslint/parser': 8.18.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
eslint: 9.24.0(jiti@2.4.2)
'@typescript-eslint/parser': 8.18.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3)
eslint: 9.25.1(jiti@2.4.2)
eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.24.0(jiti@2.4.2))
eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.25.1(jiti@2.4.2))
transitivePeerDependencies:
- supports-color
eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.18.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.24.0(jiti@2.4.2)):
eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.18.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.25.1(jiti@2.4.2)):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.8
@@ -2338,9 +2347,9 @@ snapshots:
array.prototype.flatmap: 1.3.3
debug: 3.2.7
doctrine: 2.1.0
eslint: 9.24.0(jiti@2.4.2)
eslint: 9.25.1(jiti@2.4.2)
eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.18.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.24.0(jiti@2.4.2))
eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.18.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.25.1(jiti@2.4.2))
hasown: 2.0.2
is-core-module: 2.16.0
is-glob: 4.0.3
@@ -2352,13 +2361,13 @@ snapshots:
string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0
optionalDependencies:
'@typescript-eslint/parser': 8.18.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/parser': 8.18.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.8.3)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
eslint-plugin-jsx-a11y@6.10.2(eslint@9.24.0(jiti@2.4.2)):
eslint-plugin-jsx-a11y@6.10.2(eslint@9.25.1(jiti@2.4.2)):
dependencies:
aria-query: 5.3.2
array-includes: 3.1.8
@@ -2368,7 +2377,7 @@ snapshots:
axobject-query: 4.1.0
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
eslint: 9.24.0(jiti@2.4.2)
eslint: 9.25.1(jiti@2.4.2)
hasown: 2.0.2
jsx-ast-utils: 3.3.5
language-tags: 1.0.9
@@ -2377,11 +2386,11 @@ snapshots:
safe-regex-test: 1.1.0
string.prototype.includes: 2.0.1
eslint-plugin-react-hooks@5.1.0(eslint@9.24.0(jiti@2.4.2)):
eslint-plugin-react-hooks@5.1.0(eslint@9.25.1(jiti@2.4.2)):
dependencies:
eslint: 9.24.0(jiti@2.4.2)
eslint: 9.25.1(jiti@2.4.2)
eslint-plugin-react@7.37.2(eslint@9.24.0(jiti@2.4.2)):
eslint-plugin-react@7.37.2(eslint@9.25.1(jiti@2.4.2)):
dependencies:
array-includes: 3.1.8
array.prototype.findlast: 1.2.5
@@ -2389,7 +2398,7 @@ snapshots:
array.prototype.tosorted: 1.1.4
doctrine: 2.1.0
es-iterator-helpers: 1.2.0
eslint: 9.24.0(jiti@2.4.2)
eslint: 9.25.1(jiti@2.4.2)
estraverse: 5.3.0
hasown: 2.0.2
jsx-ast-utils: 3.3.5
@@ -2412,16 +2421,16 @@ snapshots:
eslint-visitor-keys@4.2.0: {}
eslint@9.24.0(jiti@2.4.2):
eslint@9.25.1(jiti@2.4.2):
dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.24.0(jiti@2.4.2))
'@eslint-community/eslint-utils': 4.4.1(eslint@9.25.1(jiti@2.4.2))
'@eslint-community/regexpp': 4.12.1
'@eslint/config-array': 0.20.0
'@eslint/config-helpers': 0.2.1
'@eslint/core': 0.12.0
'@eslint/core': 0.13.0
'@eslint/eslintrc': 3.3.1
'@eslint/js': 9.24.0
'@eslint/plugin-kit': 0.2.7
'@eslint/js': 9.25.1
'@eslint/plugin-kit': 0.2.8
'@humanfs/node': 0.16.6
'@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.4.2
@@ -2522,6 +2531,15 @@ snapshots:
dependencies:
is-callable: 1.2.7
framer-motion@12.9.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
motion-dom: 12.9.1
motion-utils: 12.8.3
tslib: 2.8.1
optionalDependencies:
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
function-bind@1.1.2: {}
function.prototype.name@1.1.7:
@@ -2639,7 +2657,7 @@ snapshots:
is-bun-module@1.3.0:
dependencies:
semver: 7.6.3
semver: 7.7.1
is-callable@1.2.7: {}
@@ -2849,15 +2867,21 @@ snapshots:
minimist@1.2.8: {}
motion-dom@12.9.1:
dependencies:
motion-utils: 12.8.3
motion-utils@12.8.3: {}
ms@2.1.3: {}
nanoid@3.3.8: {}
natural-compare@1.4.0: {}
next@15.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
next@15.3.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
'@next/env': 15.3.0
'@next/env': 15.3.1
'@swc/counter': 0.1.3
'@swc/helpers': 0.5.15
busboy: 1.6.0
@@ -2867,14 +2891,14 @@ snapshots:
react-dom: 19.1.0(react@19.1.0)
styled-jsx: 5.1.6(react@19.1.0)
optionalDependencies:
'@next/swc-darwin-arm64': 15.3.0
'@next/swc-darwin-x64': 15.3.0
'@next/swc-linux-arm64-gnu': 15.3.0
'@next/swc-linux-arm64-musl': 15.3.0
'@next/swc-linux-x64-gnu': 15.3.0
'@next/swc-linux-x64-musl': 15.3.0
'@next/swc-win32-arm64-msvc': 15.3.0
'@next/swc-win32-x64-msvc': 15.3.0
'@next/swc-darwin-arm64': 15.3.1
'@next/swc-darwin-x64': 15.3.1
'@next/swc-linux-arm64-gnu': 15.3.1
'@next/swc-linux-arm64-musl': 15.3.1
'@next/swc-linux-x64-gnu': 15.3.1
'@next/swc-linux-x64-musl': 15.3.1
'@next/swc-win32-arm64-msvc': 15.3.1
'@next/swc-win32-x64-msvc': 15.3.1
sharp: 0.34.1
transitivePeerDependencies:
- '@babel/core'
@@ -3042,10 +3066,7 @@ snapshots:
semver@6.3.1: {}
semver@7.6.3: {}
semver@7.7.1:
optional: true
semver@7.7.1: {}
set-function-length@1.2.2:
dependencies: