Ai still sucks

This commit is contained in:
Anushlinux
2025-07-05 00:01:05 +05:30
parent efbdd43780
commit 8582493faf
4 changed files with 490 additions and 22 deletions

View File

@@ -1,38 +1,289 @@
'use client';
import Link from 'next/link'; import Link from 'next/link';
import { usePathname } from 'next/navigation';
import { useState, useEffect } from 'react';
import { Button } from '@workspace/ui/components/button';
import { Badge } from '@workspace/ui/components/badge';
import {
LayoutDashboard,
Users,
Briefcase,
Menu,
X,
LogOut,
Settings,
Bell,
Search,
ChevronDown
} from 'lucide-react';
const navLinks = [ const navLinks = [
{ href: '/', label: 'Dashboard' }, {
{ href: '/students', label: 'Students' }, href: '/',
{ href: '/jobs', label: 'Jobs' }, label: 'Dashboard',
icon: LayoutDashboard,
description: 'Overview and analytics'
},
{
href: '/students',
label: 'Students',
icon: Users,
description: 'Manage student profiles'
},
{
href: '/jobs',
label: 'Jobs',
icon: Briefcase,
description: 'Job listings and applications'
},
]; ];
export default function MainLayout({ children }: { children: React.ReactNode }) { export default function MainLayout({ children }: { children: React.ReactNode }) {
const pathname = usePathname();
const [isScrolled, setIsScrolled] = useState(false);
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
const [isProfileDropdownOpen, setIsProfileDropdownOpen] = useState(false);
// Handle scroll effect
useEffect(() => {
const handleScroll = () => {
setIsScrolled(window.scrollY > 10);
};
window.addEventListener('scroll', handleScroll);
return () => window.removeEventListener('scroll', handleScroll);
}, []);
// Close mobile menu when route changes
useEffect(() => {
setIsMobileMenuOpen(false);
}, [pathname]);
return ( return (
<div className="min-h-screen bg-background font-sans"> <div className="min-h-screen bg-background font-sans">
{/* Sticky top navbar */} {/* Enhanced Sticky Navbar */}
<header className="sticky top-0 z-30 w-full bg-[#1e293b] shadow-lg"> <header className={`sticky top-0 z-50 w-full transition-all duration-300 ${
<div className="max-w-7xl mx-auto flex items-center justify-between px-6 py-3"> isScrolled
<div className="flex items-center gap-3"> ? 'bg-white/95 backdrop-blur-md shadow-lg border-b border-gray-200/50'
<img src="/favicon.ico" alt="Logo" className="w-9 h-9 rounded-lg shadow" /> : 'bg-white/80 backdrop-blur-sm'
<span className="font-extrabold text-2xl tracking-tight text-white">NextPlacement</span> }`}>
</div> <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<nav className="flex gap-2 md:gap-6"> <div className="flex items-center justify-between h-16">
{navLinks.map((link) => ( {/* Logo Section */}
<Link <div className="flex items-center gap-3 group">
key={link.href} <div className="relative">
href={link.href} <img
className="px-4 py-2 rounded-lg font-medium text-white hover:underline hover:underline-offset-8 hover:decoration-4 hover:decoration-red-500 transition-colors focus-visible:ring-2 focus-visible:ring-blue-300" src="/favicon.ico"
prefetch={false} alt="Logo"
className="w-10 h-10 rounded-xl shadow-lg group-hover:shadow-xl transition-all duration-300 group-hover:scale-110"
/>
<div className="absolute inset-0 rounded-xl bg-gradient-to-br from-red-500/20 to-pink-500/20 opacity-0 group-hover:opacity-100 transition-opacity duration-300" />
</div>
<div className="flex flex-col">
<span className="font-extrabold text-2xl tracking-tight text-gray-800 group-hover:text-gray-900 transition-colors duration-200">
NextPlacement
</span>
<span className="text-xs text-gray-500 font-medium -mt-1">Admin Portal</span>
</div>
</div>
{/* Desktop Navigation */}
<nav className="hidden md:flex items-center gap-6">
{navLinks.map((link) => {
const isActive = pathname === link.href;
const Icon = link.icon;
return (
<Link
key={link.href}
href={link.href}
className={`relative group px-6 py-3 rounded-xl font-medium transition-all duration-200 ${
isActive
? 'text-red-600 bg-red-50 border border-red-200'
: 'text-gray-700 hover:text-gray-900 hover:bg-gray-50'
}`}
prefetch={false}
>
<div className="flex items-center gap-3">
<Icon className={`w-5 h-5 transition-transform duration-200 group-hover:scale-110 ${
isActive ? 'text-red-600' : 'text-gray-500 group-hover:text-gray-700'
}`} />
<span className="text-base">{link.label}</span>
</div>
{/* Active indicator */}
{isActive && (
<div className="absolute bottom-0 left-1/2 transform -translate-x-1/2 w-1 h-1 bg-red-500 rounded-full animate-pulse" />
)}
</Link>
);
})}
</nav>
{/* Right Section - Search, Notifications, Profile */}
<div className="flex items-center gap-3">
{/* Search Button */}
<Button
variant="ghost"
size="sm"
className="hidden sm:flex items-center gap-2 text-gray-600 hover:text-gray-900 hover:bg-gray-100 transition-all duration-200"
> >
{link.label} <Search className="w-4 h-4" />
</Link> <span className="hidden lg:inline text-sm">Search</span>
))} </Button>
</nav>
{/* Notifications */}
<Button
variant="ghost"
size="sm"
className="relative text-gray-600 hover:text-gray-900 hover:bg-gray-100 transition-all duration-200"
>
<Bell className="w-4 h-4" />
<Badge className="absolute -top-1 -right-1 h-5 w-5 rounded-full bg-red-500 text-xs text-white flex items-center justify-center animate-pulse">
3
</Badge>
</Button>
{/* Profile Dropdown */}
<div className="relative">
<Button
variant="ghost"
size="sm"
onClick={() => setIsProfileDropdownOpen(!isProfileDropdownOpen)}
className="flex items-center gap-2 text-gray-700 hover:text-gray-900 hover:bg-gray-100 transition-all duration-200"
>
<div className="w-8 h-8 bg-gradient-to-br from-red-500 to-pink-500 rounded-full flex items-center justify-center text-white font-semibold text-sm">
A
</div>
<span className="hidden lg:inline text-sm font-medium">Admin</span>
<ChevronDown className={`w-4 h-4 transition-transform duration-200 ${
isProfileDropdownOpen ? 'rotate-180' : ''
}`} />
</Button>
{/* Profile Dropdown Menu */}
{isProfileDropdownOpen && (
<div className="absolute right-0 mt-2 w-48 bg-white rounded-xl shadow-lg border border-gray-200 py-2 z-50 animate-in slide-in-from-top-2 duration-200">
<div className="px-4 py-3 border-b border-gray-100">
<p className="text-sm font-medium text-gray-900">Admin User</p>
<p className="text-xs text-gray-500">admin@nextplacement.com</p>
</div>
<div className="py-1">
<Button
variant="ghost"
size="sm"
className="w-full justify-start text-gray-700 hover:text-gray-900 hover:bg-gray-50"
>
<Settings className="w-4 h-4 mr-2" />
Settings
</Button>
<Button
variant="ghost"
size="sm"
className="w-full justify-start text-red-600 hover:text-red-700 hover:bg-red-50"
>
<LogOut className="w-4 h-4 mr-2" />
Sign Out
</Button>
</div>
</div>
)}
</div>
{/* Mobile Menu Button */}
<Button
variant="ghost"
size="sm"
onClick={() => setIsMobileMenuOpen(!isMobileMenuOpen)}
className="md:hidden text-gray-600 hover:text-gray-900 hover:bg-gray-100 transition-all duration-200"
>
{isMobileMenuOpen ? (
<X className="w-5 h-5" />
) : (
<Menu className="w-5 h-5" />
)}
</Button>
</div>
</div>
{/* Mobile Navigation Menu */}
{isMobileMenuOpen && (
<div className="md:hidden border-t border-gray-200 bg-white/95 backdrop-blur-md animate-in slide-in-from-top-2 duration-200">
<nav className="px-4 py-4 space-y-2">
{navLinks.map((link) => {
const isActive = pathname === link.href;
const Icon = link.icon;
return (
<Link
key={link.href}
href={link.href}
className={`flex items-center gap-3 px-4 py-3 rounded-xl font-medium transition-all duration-200 ${
isActive
? 'text-red-600 bg-red-50 border border-red-200'
: 'text-gray-700 hover:text-gray-900 hover:bg-gray-50'
}`}
prefetch={false}
>
<Icon className={`w-5 h-5 ${
isActive ? 'text-red-600' : 'text-gray-500'
}`} />
<span>{link.label}</span>
{isActive && (
<div className="ml-auto w-2 h-2 bg-red-500 rounded-full animate-pulse" />
)}
</Link>
);
})}
{/* Mobile Profile Section */}
<div className="pt-4 border-t border-gray-200 mt-4">
<div className="flex items-center gap-3 px-4 py-3">
<div className="w-10 h-10 bg-gradient-to-br from-red-500 to-pink-500 rounded-full flex items-center justify-center text-white font-semibold">
A
</div>
<div>
<p className="text-sm font-medium text-gray-900">Admin User</p>
<p className="text-xs text-gray-500">admin@nextplacement.com</p>
</div>
</div>
<div className="px-4 py-2 space-y-1">
<Button
variant="ghost"
size="sm"
className="w-full justify-start text-gray-700 hover:text-gray-900 hover:bg-gray-50"
>
<Settings className="w-4 h-4 mr-2" />
Settings
</Button>
<Button
variant="ghost"
size="sm"
className="w-full justify-start text-red-600 hover:text-red-700 hover:bg-red-50"
>
<LogOut className="w-4 h-4 mr-2" />
Sign Out
</Button>
</div>
</div>
</nav>
</div>
)}
</div> </div>
</header> </header>
<main className="max-w-7xl mx-auto px-4 py-8 md:py-12 bg-background min-h-screen">
{/* Main Content */}
<main className="bg-background min-h-screen">
{children} {children}
</main> </main>
{/* Click outside to close dropdowns */}
{isProfileDropdownOpen && (
<div
className="fixed inset-0 z-40"
onClick={() => setIsProfileDropdownOpen(false)}
/>
)}
</div> </div>
); );
} }

View File

@@ -12,11 +12,14 @@
"typecheck": "tsc --noEmit" "typecheck": "tsc --noEmit"
}, },
"dependencies": { "dependencies": {
"@headlessui/react": "^2.2.4",
"@heroicons/react": "^2.2.0",
"@hookform/resolvers": "^5.1.1", "@hookform/resolvers": "^5.1.1",
"@tailwindcss/postcss": "^4.0.8", "@tailwindcss/postcss": "^4.0.8",
"@tanstack/react-table": "^8.21.3", "@tanstack/react-table": "^8.21.3",
"@workspace/db": "workspace:*", "@workspace/db": "workspace:*",
"@workspace/ui": "workspace:*", "@workspace/ui": "workspace:*",
"clsx": "^2.1.1",
"date-fns": "^4.1.0", "date-fns": "^4.1.0",
"framer-motion": "^12.22.0", "framer-motion": "^12.22.0",
"lucide-react": "^0.475.0", "lucide-react": "^0.475.0",

View File

@@ -128,3 +128,51 @@
.animate-bounce-slow { animation: bounce-slow 2.5s infinite; } .animate-bounce-slow { animation: bounce-slow 2.5s infinite; }
.animate-fade-in { animation: fade-in 1.2s 0.5s both; } .animate-fade-in { animation: fade-in 1.2s 0.5s both; }
.animate-ripple { animation: ripple 0.6s linear; } .animate-ripple { animation: ripple 0.6s linear; }
/* Navbar specific animations */
@keyframes slide-in-from-top-2 {
from {
opacity: 0;
transform: translateY(-8px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes scale-in {
from {
opacity: 0;
transform: scale(0.95);
}
to {
opacity: 1;
transform: scale(1);
}
}
@keyframes glow-pulse {
0%, 100% {
box-shadow: 0 0 5px rgba(239, 68, 68, 0.3);
}
50% {
box-shadow: 0 0 20px rgba(239, 68, 68, 0.6);
}
}
.animate-in {
animation-fill-mode: both;
}
.slide-in-from-top-2 {
animation: slide-in-from-top-2 0.2s ease-out;
}
.scale-in {
animation: scale-in 0.2s ease-out;
}
.glow-pulse {
animation: glow-pulse 2s ease-in-out infinite;
}

166
pnpm-lock.yaml generated
View File

@@ -26,6 +26,12 @@ importers:
apps/admin: apps/admin:
dependencies: dependencies:
'@headlessui/react':
specifier: ^2.2.4
version: 2.2.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@heroicons/react':
specifier: ^2.2.0
version: 2.2.0(react@19.1.0)
'@hookform/resolvers': '@hookform/resolvers':
specifier: ^5.1.1 specifier: ^5.1.1
version: 5.1.1(react-hook-form@7.59.0(react@19.1.0)) version: 5.1.1(react-hook-form@7.59.0(react@19.1.0))
@@ -41,6 +47,9 @@ importers:
'@workspace/ui': '@workspace/ui':
specifier: workspace:* specifier: workspace:*
version: link:../../packages/ui version: link:../../packages/ui
clsx:
specifier: ^2.1.1
version: 2.1.1
date-fns: date-fns:
specifier: ^4.1.0 specifier: ^4.1.0
version: 4.1.0 version: 4.1.0
@@ -712,9 +721,27 @@ packages:
react: '>=16.8.0' react: '>=16.8.0'
react-dom: '>=16.8.0' react-dom: '>=16.8.0'
'@floating-ui/react@0.26.28':
resolution: {integrity: sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==}
peerDependencies:
react: '>=16.8.0'
react-dom: '>=16.8.0'
'@floating-ui/utils@0.2.10': '@floating-ui/utils@0.2.10':
resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
'@headlessui/react@2.2.4':
resolution: {integrity: sha512-lz+OGcAH1dK93rgSMzXmm1qKOJkBUqZf1L4M8TWLNplftQD3IkoEDdUFNfAn4ylsN6WOTVtWaLmvmaHOUk1dTA==}
engines: {node: '>=10'}
peerDependencies:
react: ^18 || ^19 || ^19.0.0-rc
react-dom: ^18 || ^19 || ^19.0.0-rc
'@heroicons/react@2.2.0':
resolution: {integrity: sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ==}
peerDependencies:
react: '>= 16 || ^19.0.0-rc'
'@hookform/resolvers@5.1.1': '@hookform/resolvers@5.1.1':
resolution: {integrity: sha512-J/NVING3LMAEvexJkyTLjruSm7aOFx7QX21pzkiJfMoNG0wl5aFEjLTl7ay7IQb9EWY6AkrBy7tHL2Alijpdcg==} resolution: {integrity: sha512-J/NVING3LMAEvexJkyTLjruSm7aOFx7QX21pzkiJfMoNG0wl5aFEjLTl7ay7IQb9EWY6AkrBy7tHL2Alijpdcg==}
peerDependencies: peerDependencies:
@@ -1318,6 +1345,43 @@ packages:
'@radix-ui/rect@1.1.1': '@radix-ui/rect@1.1.1':
resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==}
'@react-aria/focus@3.20.5':
resolution: {integrity: sha512-JpFtXmWQ0Oca7FcvkqgjSyo6xEP7v3oQOLUId6o0xTvm4AD5W0mU2r3lYrbhsJ+XxdUUX4AVR5473sZZ85kU4A==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@react-aria/interactions@3.25.3':
resolution: {integrity: sha512-J1bhlrNtjPS/fe5uJQ+0c7/jiXniwa4RQlP+Emjfc/iuqpW2RhbF9ou5vROcLzWIyaW8tVMZ468J68rAs/aZ5A==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@react-aria/ssr@3.9.9':
resolution: {integrity: sha512-2P5thfjfPy/np18e5wD4WPt8ydNXhij1jwA8oehxZTFqlgVMGXzcWKxTb4RtJrLFsqPO7RUQTiY8QJk0M4Vy2g==}
engines: {node: '>= 12'}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@react-aria/utils@3.29.1':
resolution: {integrity: sha512-yXMFVJ73rbQ/yYE/49n5Uidjw7kh192WNN9PNQGV0Xoc7EJUlSOxqhnpHmYTyO0EotJ8fdM1fMH8durHjUSI8g==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@react-stately/flags@3.1.2':
resolution: {integrity: sha512-2HjFcZx1MyQXoPqcBGALwWWmgFVUk2TuKVIQxCbRq7fPyWXIl6VHcakCLurdtYC2Iks7zizvz0Idv48MQ38DWg==}
'@react-stately/utils@3.10.7':
resolution: {integrity: sha512-cWvjGAocvy4abO9zbr6PW6taHgF24Mwy/LbQ4TC4Aq3tKdKDntxyD+sh7AkSRfJRT2ccMVaHVv2+FfHThd3PKQ==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@react-types/shared@3.30.0':
resolution: {integrity: sha512-COIazDAx1ncDg046cTJ8SFYsX8aS3lB/08LDnbkH/SkdYrFPWDlXMrO/sUam8j1WWM+PJ+4d1mj7tODIKNiFog==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@standard-schema/utils@0.3.0': '@standard-schema/utils@0.3.0':
resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==}
@@ -1422,10 +1486,19 @@ packages:
react: '>=16.8' react: '>=16.8'
react-dom: '>=16.8' react-dom: '>=16.8'
'@tanstack/react-virtual@3.13.12':
resolution: {integrity: sha512-Gd13QdxPSukP8ZrkbgS2RwoZseTTbQPLnQEn7HY/rqtM+8Zt95f7xKC7N0EsKs7aoz0WzZ+fditZux+F8EzYxA==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
'@tanstack/table-core@8.21.3': '@tanstack/table-core@8.21.3':
resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==} resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==}
engines: {node: '>=12'} engines: {node: '>=12'}
'@tanstack/virtual-core@3.13.12':
resolution: {integrity: sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==}
'@tootallnate/quickjs-emscripten@0.23.0': '@tootallnate/quickjs-emscripten@0.23.0':
resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==}
@@ -3327,6 +3400,9 @@ packages:
swap-case@1.1.2: swap-case@1.1.2:
resolution: {integrity: sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==} resolution: {integrity: sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==}
tabbable@6.2.0:
resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
tailwind-merge@3.3.1: tailwind-merge@3.3.1:
resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==} resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==}
@@ -3513,6 +3589,11 @@ packages:
'@types/react': '@types/react':
optional: true optional: true
use-sync-external-store@1.5.0:
resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
util-deprecate@1.0.2: util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
@@ -3828,8 +3909,30 @@ snapshots:
react: 19.1.0 react: 19.1.0
react-dom: 19.1.0(react@19.1.0) react-dom: 19.1.0(react@19.1.0)
'@floating-ui/react@0.26.28(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
'@floating-ui/react-dom': 2.1.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@floating-ui/utils': 0.2.10
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
tabbable: 6.2.0
'@floating-ui/utils@0.2.10': {} '@floating-ui/utils@0.2.10': {}
'@headlessui/react@2.2.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
'@floating-ui/react': 0.26.28(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@react-aria/focus': 3.20.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@tanstack/react-virtual': 3.13.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
use-sync-external-store: 1.5.0(react@19.1.0)
'@heroicons/react@2.2.0(react@19.1.0)':
dependencies:
react: 19.1.0
'@hookform/resolvers@5.1.1(react-hook-form@7.59.0(react@19.1.0))': '@hookform/resolvers@5.1.1(react-hook-form@7.59.0(react@19.1.0))':
dependencies: dependencies:
'@standard-schema/utils': 0.3.0 '@standard-schema/utils': 0.3.0
@@ -4357,6 +4460,55 @@ snapshots:
'@radix-ui/rect@1.1.1': {} '@radix-ui/rect@1.1.1': {}
'@react-aria/focus@3.20.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
'@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@react-types/shared': 3.30.0(react@19.1.0)
'@swc/helpers': 0.5.15
clsx: 2.1.1
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
'@react-aria/interactions@3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
'@react-aria/ssr': 3.9.9(react@19.1.0)
'@react-aria/utils': 3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@react-stately/flags': 3.1.2
'@react-types/shared': 3.30.0(react@19.1.0)
'@swc/helpers': 0.5.15
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
'@react-aria/ssr@3.9.9(react@19.1.0)':
dependencies:
'@swc/helpers': 0.5.15
react: 19.1.0
'@react-aria/utils@3.29.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
'@react-aria/ssr': 3.9.9(react@19.1.0)
'@react-stately/flags': 3.1.2
'@react-stately/utils': 3.10.7(react@19.1.0)
'@react-types/shared': 3.30.0(react@19.1.0)
'@swc/helpers': 0.5.15
clsx: 2.1.1
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
'@react-stately/flags@3.1.2':
dependencies:
'@swc/helpers': 0.5.15
'@react-stately/utils@3.10.7(react@19.1.0)':
dependencies:
'@swc/helpers': 0.5.15
react: 19.1.0
'@react-types/shared@3.30.0(react@19.1.0)':
dependencies:
react: 19.1.0
'@standard-schema/utils@0.3.0': {} '@standard-schema/utils@0.3.0': {}
'@swc/counter@0.1.3': {} '@swc/counter@0.1.3': {}
@@ -4443,8 +4595,16 @@ snapshots:
react: 19.1.0 react: 19.1.0
react-dom: 19.1.0(react@19.1.0) react-dom: 19.1.0(react@19.1.0)
'@tanstack/react-virtual@3.13.12(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
'@tanstack/virtual-core': 3.13.12
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
'@tanstack/table-core@8.21.3': {} '@tanstack/table-core@8.21.3': {}
'@tanstack/virtual-core@3.13.12': {}
'@tootallnate/quickjs-emscripten@0.23.0': {} '@tootallnate/quickjs-emscripten@0.23.0': {}
'@tsconfig/node10@1.0.11': {} '@tsconfig/node10@1.0.11': {}
@@ -6620,6 +6780,8 @@ snapshots:
lower-case: 1.1.4 lower-case: 1.1.4
upper-case: 1.1.3 upper-case: 1.1.3
tabbable@6.2.0: {}
tailwind-merge@3.3.1: {} tailwind-merge@3.3.1: {}
tailwindcss@4.1.11: {} tailwindcss@4.1.11: {}
@@ -6809,6 +6971,10 @@ snapshots:
optionalDependencies: optionalDependencies:
'@types/react': 19.1.8 '@types/react': 19.1.8
use-sync-external-store@1.5.0(react@19.1.0):
dependencies:
react: 19.1.0
util-deprecate@1.0.2: {} util-deprecate@1.0.2: {}
v8-compile-cache-lib@3.0.1: {} v8-compile-cache-lib@3.0.1: {}