This commit is contained in:
j 2025-11-28 16:14:29 +08:00
commit 8a7baf8e64
14 changed files with 1491 additions and 0 deletions

24
.gitignore vendored Normal file
View File

@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

12
App.tsx Normal file
View File

@ -0,0 +1,12 @@
import React from 'react';
import { Game } from './components/Game';
function App() {
return (
<div className="w-full h-full bg-gray-950 font-sans antialiased text-slate-200">
<Game />
</div>
);
}
export default App;

20
README.md Normal file
View File

@ -0,0 +1,20 @@
<div align="center">
<img width="1200" height="475" alt="GHBanner" src="https://github.com/user-attachments/assets/0aa67016-6eaf-458a-adb2-6e31a0763ed6" />
</div>
# Run and deploy your AI Studio app
This contains everything you need to run your app locally.
View your app in AI Studio: https://ai.studio/apps/temp/1
## Run Locally
**Prerequisites:** Node.js
1. Install dependencies:
`npm install`
2. Set the `GEMINI_API_KEY` in [.env.local](.env.local) to your Gemini API key
3. Run the app:
`npm run dev`

70
components/Cell.tsx Normal file
View File

@ -0,0 +1,70 @@
import React from 'react';
import { GridCell } from '../types';
import { Zap, Footprints, Flag, BrickWall } from 'lucide-react';
interface CellProps {
cell: GridCell;
isPlayerHere: boolean;
}
export const Cell: React.FC<CellProps> = React.memo(({ cell, isPlayerHere }) => {
// Base style
let bgColor = 'bg-gray-700'; // Default hidden color
let borderColor = 'border-gray-800';
let icon = null;
if (cell.revealed) {
switch (cell.type) {
case 'wall':
bgColor = 'bg-slate-800 shadow-inner';
borderColor = 'border-slate-900';
icon = <div className="w-full h-full flex items-center justify-center"><BrickWall size={12} className="text-stone-500 opacity-50" /></div>;
break;
case 'trap':
bgColor = 'bg-red-900/80';
borderColor = 'border-red-950';
icon = <Zap size={14} className="text-red-500" />;
break;
case 'start':
bgColor = 'bg-emerald-900/50';
borderColor = 'border-emerald-800';
break;
case 'end':
bgColor = 'bg-yellow-900/50';
borderColor = 'border-yellow-800';
icon = <Flag size={14} className="text-yellow-500" />;
break;
case 'safe':
bgColor = 'bg-gray-600';
borderColor = 'border-gray-500';
if (cell.steppedOn && !isPlayerHere) {
bgColor = 'bg-gray-600/80';
icon = <Footprints size={10} className="text-gray-500/30" />;
}
break;
}
}
// Visual highlight for the player
const playerOverlay = isPlayerHere ? (
<div className="absolute inset-0 flex items-center justify-center z-10 pointer-events-none">
<div className="w-3/4 h-3/4 bg-blue-500 rounded-full shadow-[0_0_10px_rgba(59,130,246,0.8)] animate-pulse border-2 border-white">
<div className="absolute top-1 left-1 w-1.5 h-1.5 bg-white rounded-full opacity-60"></div>
</div>
</div>
) : null;
return (
<div
className={`relative w-full h-full min-w-0 min-h-0 border ${borderColor} ${bgColor} flex items-center justify-center transition-colors duration-300 overflow-hidden box-border`}
>
{/* Icon Wrapper to ensure it doesn't shift layout */}
<div className="absolute inset-0 flex items-center justify-center pointer-events-none">
{icon}
</div>
{playerOverlay}
</div>
);
});
Cell.displayName = 'Cell';

315
components/Game.tsx Normal file
View File

@ -0,0 +1,315 @@
import React, { useState, useEffect, useRef } from 'react';
import { GridCell, Position, GameState, Direction } from '../types';
import { generateGrid, GRID_SIZE } from '../utils/gameLogic';
import { Cell } from './Cell';
import { RotateCcw, ArrowUp, ArrowDown, ArrowLeft, ArrowRight, CircleHelp, BrickWall, Zap, Flag } from 'lucide-react';
const MOVE_INTERVAL_MS = 100; // Speed of movement when holding key
export const Game: React.FC = () => {
const [grid, setGrid] = useState<GridCell[][]>([]);
const [playerPos, setPlayerPos] = useState<Position>({ x: 0, y: 0 });
const [gameState, setGameState] = useState<GameState>(GameState.PLAYING);
const [moves, setMoves] = useState(0);
const [trapsTriggered, setTrapsTriggered] = useState(0);
// Refs for smooth movement loop and instant state access
const gridRef = useRef<GridCell[][]>([]);
const playerPosRef = useRef<Position>({ x: 0, y: 0 });
const activeDirectionRef = useRef<Direction | null>(null);
const lastMoveTimeRef = useRef<number>(0);
const requestRef = useRef<number>();
const gameStateRef = useRef<GameState>(GameState.PLAYING);
// Sync refs with state whenever state updates
useEffect(() => { gridRef.current = grid; }, [grid]);
useEffect(() => { playerPosRef.current = playerPos; }, [playerPos]);
useEffect(() => { gameStateRef.current = gameState; }, [gameState]);
// Initialize game
useEffect(() => {
startNewGame();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
const startNewGame = () => {
const newGrid = generateGrid();
setGrid(newGrid);
gridRef.current = newGrid;
const startPos = { x: 0, y: 0 };
setPlayerPos(startPos);
playerPosRef.current = startPos;
setGameState(GameState.PLAYING);
gameStateRef.current = GameState.PLAYING;
setMoves(0);
setTrapsTriggered(0);
activeDirectionRef.current = null;
};
const handleInteraction = (direction: Direction) => {
// Access latest state directly via refs
const currentGrid = gridRef.current;
const currentPos = playerPosRef.current;
if (!currentGrid.length || gameStateRef.current !== GameState.PLAYING) return;
let nextX = currentPos.x;
let nextY = currentPos.y;
switch (direction) {
case Direction.UP: nextY -= 1; break;
case Direction.DOWN: nextY += 1; break;
case Direction.LEFT: nextX -= 1; break;
case Direction.RIGHT: nextX += 1; break;
}
// 1. Boundary Check
if (nextX < 0 || nextX >= GRID_SIZE || nextY < 0 || nextY >= GRID_SIZE) {
return; // Hit grid edge
}
// 2. Interaction Logic
// Create a deep copy of the grid to ensure immutability
const newGrid = currentGrid.map(row => row.map(cell => ({ ...cell })));
const targetCell = newGrid[nextY][nextX];
const targetType = targetCell.type;
let gridChanged = false;
let newPos = currentPos;
// Reveal the cell
if (!targetCell.revealed) {
targetCell.revealed = true;
gridChanged = true;
}
if (targetType === 'wall') {
// Blocked: Do not move, but wall is revealed
} else if (targetType === 'trap') {
// Trap: Reset to start
setTrapsTriggered(t => t + 1);
newPos = { x: 0, y: 0 };
} else {
// Safe / Start / End
newPos = { x: nextX, y: nextY };
targetCell.steppedOn = true;
gridChanged = true;
if (targetType === 'end') {
setGameState(GameState.WON);
}
}
// Update States
if (gridChanged) {
setGrid(newGrid);
}
if (newPos.x !== currentPos.x || newPos.y !== currentPos.y) {
setPlayerPos(newPos);
setMoves(m => m + 1);
} else if (targetType === 'trap') {
// Ensure visual reset even if we were somehow already at 0,0
setPlayerPos({ x: 0, y: 0 });
}
};
// Game Loop
const animate = (time: number) => {
if (activeDirectionRef.current && gameStateRef.current === GameState.PLAYING) {
if (time - lastMoveTimeRef.current > MOVE_INTERVAL_MS) {
handleInteraction(activeDirectionRef.current);
lastMoveTimeRef.current = time;
}
}
requestRef.current = requestAnimationFrame(animate);
};
useEffect(() => {
requestRef.current = requestAnimationFrame(animate);
return () => {
if (requestRef.current) cancelAnimationFrame(requestRef.current);
};
}, []);
// Key Listeners
useEffect(() => {
const handleKeyDown = (e: KeyboardEvent) => {
if (gameStateRef.current !== GameState.PLAYING) return;
let dir: Direction | null = null;
switch (e.key) {
case 'ArrowUp': case 'w': case 'W': dir = Direction.UP; break;
case 'ArrowDown': case 's': case 'S': dir = Direction.DOWN; break;
case 'ArrowLeft': case 'a': case 'A': dir = Direction.LEFT; break;
case 'ArrowRight': case 'd': case 'D': dir = Direction.RIGHT; break;
}
if (dir) {
e.preventDefault(); // Prevent scrolling
if (activeDirectionRef.current !== dir) {
// Initial immediate move on press
activeDirectionRef.current = dir;
handleInteraction(dir);
lastMoveTimeRef.current = performance.now();
}
}
};
const handleKeyUp = (e: KeyboardEvent) => {
activeDirectionRef.current = null;
};
window.addEventListener('keydown', handleKeyDown);
window.addEventListener('keyup', handleKeyUp);
return () => {
window.removeEventListener('keydown', handleKeyDown);
window.removeEventListener('keyup', handleKeyUp);
};
}, []);
return (
<div className="flex flex-col items-center justify-center min-h-screen p-4 bg-gray-950">
{/* Header */}
<header className="mb-4 flex flex-col items-center gap-2">
<h1 className="text-3xl font-bold text-blue-400 tracking-wider">GRID EXPLORER</h1>
<div className="flex gap-6 text-sm text-gray-400 bg-gray-900/50 px-6 py-2 rounded-full border border-gray-800">
<div className="flex items-center gap-2">
<span className="text-gray-500">Moves:</span>
<span className="text-white font-mono">{moves}</span>
</div>
<div className="flex items-center gap-2">
<span className="text-red-500/70">Traps:</span>
<span className="text-white font-mono">{trapsTriggered}</span>
</div>
</div>
</header>
{/* Main Game Area */}
<div className="relative p-1 bg-gray-800 rounded-lg shadow-2xl shadow-black border border-gray-700">
{/* Overlay for Win State */}
{gameState === GameState.WON && (
<div className="absolute inset-0 z-50 flex flex-col items-center justify-center bg-black/80 rounded-lg backdrop-blur-sm animate-in fade-in duration-500">
<h2 className="text-5xl font-bold text-yellow-400 mb-4 drop-shadow-[0_0_15px_rgba(250,204,21,0.6)]">VICTORY!</h2>
<p className="text-gray-300 mb-6">You reached the goal in {moves} moves.</p>
<button
onClick={startNewGame}
className="px-8 py-3 bg-blue-600 hover:bg-blue-500 text-white rounded-full font-bold transition-transform hover:scale-105 active:scale-95 shadow-lg shadow-blue-500/30"
>
Play Again
</button>
</div>
)}
{/* The Grid */}
<div
className="grid gap-[1px] bg-gray-900 border-2 border-gray-900"
style={{
gridTemplateColumns: `repeat(${GRID_SIZE}, minmax(0, 1fr))`,
width: 'min(90vw, 600px)',
height: 'min(90vw, 600px)'
}}
>
{grid.map((row, y) => (
row.map((cell, x) => (
<Cell
key={`${x}-${y}`}
cell={cell}
isPlayerHere={playerPos.x === x && playerPos.y === y}
/>
))
))}
</div>
</div>
{/* Controls / Legend */}
<div className="mt-8 grid grid-cols-1 md:grid-cols-2 gap-8 w-full max-w-2xl">
{/* Legend */}
<div className="bg-gray-900 p-4 rounded-xl border border-gray-800">
<h3 className="text-gray-500 text-xs uppercase font-bold mb-3 tracking-widest">Legend</h3>
<div className="grid grid-cols-2 gap-3 text-sm">
<div className="flex items-center gap-2">
<div className="w-4 h-4 bg-gray-600 border border-gray-500 rounded-sm"></div>
<span className="text-gray-400">Safe Path</span>
</div>
<div className="flex items-center gap-2">
<div className="w-4 h-4 bg-slate-800 border border-slate-700 rounded-sm flex items-center justify-center"><BrickWall size={10} className="text-gray-600"/></div>
<span className="text-gray-400">Wall (Block)</span>
</div>
<div className="flex items-center gap-2">
<div className="w-4 h-4 bg-red-900 border border-red-800 rounded-sm flex items-center justify-center"><Zap size={10} className="text-red-500"/></div>
<span className="text-gray-400">Trap (Reset)</span>
</div>
<div className="flex items-center gap-2">
<div className="w-4 h-4 bg-yellow-900 border border-yellow-800 rounded-sm flex items-center justify-center"><Flag size={10} className="text-yellow-500"/></div>
<span className="text-gray-400">Goal</span>
</div>
</div>
</div>
{/* Instructions */}
<div className="bg-gray-900 p-4 rounded-xl border border-gray-800 flex flex-col justify-between">
<h3 className="text-gray-500 text-xs uppercase font-bold mb-3 tracking-widest flex items-center gap-2">
<CircleHelp size={14} /> Instructions
</h3>
<p className="text-sm text-gray-400 leading-relaxed">
Use <span className="text-blue-400 font-bold">Arrow Keys</span> or <span className="text-blue-400 font-bold">WASD</span> to move.
<br/>
Hold key to move continuously.
<br/>
Avoid hidden traps!
</p>
<button
onClick={startNewGame}
className="mt-4 w-full py-2 bg-gray-800 hover:bg-gray-700 text-gray-300 rounded-lg flex items-center justify-center gap-2 text-sm transition-colors border border-gray-700"
>
<RotateCcw size={14} /> Restart Map
</button>
</div>
</div>
{/* Mobile Controls (Optional, keeping it subtle) */}
<div className="md:hidden mt-6 grid grid-cols-3 gap-2">
<div />
<button
onTouchStart={(e) => { e.preventDefault(); activeDirectionRef.current = Direction.UP; handleInteraction(Direction.UP); lastMoveTimeRef.current = performance.now(); }}
onTouchEnd={(e) => { e.preventDefault(); activeDirectionRef.current = null; }}
className="w-14 h-14 bg-gray-800 rounded-full flex items-center justify-center active:bg-blue-600 transition-colors"
>
<ArrowUp className="text-white" />
</button>
<div />
<button
onTouchStart={(e) => { e.preventDefault(); activeDirectionRef.current = Direction.LEFT; handleInteraction(Direction.LEFT); lastMoveTimeRef.current = performance.now(); }}
onTouchEnd={(e) => { e.preventDefault(); activeDirectionRef.current = null; }}
className="w-14 h-14 bg-gray-800 rounded-full flex items-center justify-center active:bg-blue-600 transition-colors"
>
<ArrowLeft className="text-white" />
</button>
<button
onTouchStart={(e) => { e.preventDefault(); activeDirectionRef.current = Direction.DOWN; handleInteraction(Direction.DOWN); lastMoveTimeRef.current = performance.now(); }}
onTouchEnd={(e) => { e.preventDefault(); activeDirectionRef.current = null; }}
className="w-14 h-14 bg-gray-800 rounded-full flex items-center justify-center active:bg-blue-600 transition-colors"
>
<ArrowDown className="text-white" />
</button>
<button
onTouchStart={(e) => { e.preventDefault(); activeDirectionRef.current = Direction.RIGHT; handleInteraction(Direction.RIGHT); lastMoveTimeRef.current = performance.now(); }}
onTouchEnd={(e) => { e.preventDefault(); activeDirectionRef.current = null; }}
className="w-14 h-14 bg-gray-800 rounded-full flex items-center justify-center active:bg-blue-600 transition-colors"
>
<ArrowRight className="text-white" />
</button>
</div>
</div>
);
};

33
index.html Normal file
View File

@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Hidden Grid Explorer</title>
<script src="https://cdn.tailwindcss.com"></script>
<style>
/* Custom scrollbar hide for cleaner UI */
.no-scrollbar::-webkit-scrollbar {
display: none;
}
.no-scrollbar {
-ms-overflow-style: none;
scrollbar-width: none;
}
</style>
<script type="importmap">
{
"imports": {
"react/": "https://aistudiocdn.com/react@^19.2.0/",
"react": "https://aistudiocdn.com/react@^19.2.0",
"react-dom/": "https://aistudiocdn.com/react-dom@^19.2.0/",
"lucide-react": "https://aistudiocdn.com/lucide-react@^0.555.0"
}
}
</script>
</head>
<body class="bg-gray-900 text-white overflow-hidden">
<div id="root"></div>
<script type="module" src="/index.tsx"></script>
</body>
</html>

15
index.tsx Normal file
View File

@ -0,0 +1,15 @@
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
const rootElement = document.getElementById('root');
if (!rootElement) {
throw new Error("Could not find root element to mount to");
}
const root = ReactDOM.createRoot(rootElement);
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);

4
metadata.json Normal file
View File

@ -0,0 +1,4 @@
{
"name": "Hidden Grid Explorer",
"description": "A keyboard-controlled exploration game where you navigate a 20x20 hidden grid, avoiding walls and traps to reach the goal."
}

24
package.json Normal file
View File

@ -0,0 +1,24 @@
{
"name": "hidden-grid-explorer",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"dependencies": {
"lucide-react": "^0.555.0",
"react": "^19.2.0",
"react-dom": "^19.2.0"
},
"devDependencies": {
"@types/node": "^22.14.0",
"@types/react": "^19.2.7",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^5.0.0",
"typescript": "~5.8.2",
"vite": "^6.2.0"
}
}

29
tsconfig.json Normal file
View File

@ -0,0 +1,29 @@
{
"compilerOptions": {
"target": "ES2022",
"experimentalDecorators": true,
"useDefineForClassFields": false,
"module": "ESNext",
"lib": [
"ES2022",
"DOM",
"DOM.Iterable"
],
"skipLibCheck": true,
"types": [
"node"
],
"moduleResolution": "bundler",
"isolatedModules": true,
"moduleDetection": "force",
"allowJs": true,
"jsx": "react-jsx",
"paths": {
"@/*": [
"./*"
]
},
"allowImportingTsExtensions": true,
"noEmit": true
}
}

27
types.ts Normal file
View File

@ -0,0 +1,27 @@
export type CellType = 'safe' | 'wall' | 'trap' | 'start' | 'end';
export interface Position {
x: number;
y: number;
}
export interface GridCell {
x: number;
y: number;
type: CellType;
revealed: boolean;
steppedOn: boolean; // specific for showing path history faintly if needed
}
export enum GameState {
PLAYING = 'PLAYING',
WON = 'WON',
LOST = 'LOST', // Not strictly used since we reset on trap, but good for expansion
}
export enum Direction {
UP = 'UP',
DOWN = 'DOWN',
LEFT = 'LEFT',
RIGHT = 'RIGHT',
}

121
utils/gameLogic.ts Normal file
View File

@ -0,0 +1,121 @@
import { GridCell, CellType, Position } from '../types';
export const GRID_SIZE = 40;
// Helper to check if a valid path exists from (0,0) to (end, end)
const checkSolvability = (grid: GridCell[][]): boolean => {
const q: Position[] = [{ x: 0, y: 0 }];
const visited = new Set<string>();
visited.add("0,0");
const dirs = [[0, 1], [0, -1], [1, 0], [-1, 0]];
const targetX = GRID_SIZE - 1;
const targetY = GRID_SIZE - 1;
while (q.length > 0) {
const { x, y } = q.shift()!;
if (x === targetX && y === targetY) return true;
for (const [dx, dy] of dirs) {
const nx = x + dx;
const ny = y + dy;
if (nx >= 0 && nx < GRID_SIZE && ny >= 0 && ny < GRID_SIZE) {
const key = `${nx},${ny}`;
if (!visited.has(key)) {
const cell = grid[ny][nx];
// Traps and Walls are considered obstacles for a "safe path"
if (cell.type !== 'wall' && cell.type !== 'trap') {
visited.add(key);
q.push({ x: nx, y: ny });
}
}
}
}
}
return false;
};
// Helper to force a path if one doesn't exist
// Uses a simple random walk biased towards the end to carve a path
const carvePath = (grid: GridCell[][]) => {
let currX = 0;
let currY = 0;
const targetX = GRID_SIZE - 1;
const targetY = GRID_SIZE - 1;
// Safety limit to prevent infinite loops (though unlikely)
let steps = 0;
const maxSteps = GRID_SIZE * GRID_SIZE;
while ((currX !== targetX || currY !== targetY) && steps < maxSteps) {
// Force current cell to be safe (unless it's start)
if (grid[currY][currX].type !== 'start') {
grid[currY][currX].type = 'safe';
}
// Determine next step
const validMoves = [];
// Bias: Try to move towards the goal
if (currX < targetX) validMoves.push({ x: currX + 1, y: currY }); // Right
if (currY < targetY) validMoves.push({ x: currX, y: currY + 1 }); // Down
// Small chance to move backwards/up to make the path less straight
if (Math.random() < 0.1 && currX > 0) validMoves.push({ x: currX - 1, y: currY });
if (Math.random() < 0.1 && currY > 0) validMoves.push({ x: currX, y: currY - 1 });
// Fallback if stuck (shouldn't happen with Right/Down logic but good for safety)
if (validMoves.length === 0) {
break;
}
const next = validMoves[Math.floor(Math.random() * validMoves.length)];
currX = next.x;
currY = next.y;
steps++;
}
// Ensure end is set correctly
grid[targetY][targetX].type = 'end';
};
export const generateGrid = (): GridCell[][] => {
const grid: GridCell[][] = [];
// 1. Generate Random Grid
for (let y = 0; y < GRID_SIZE; y++) {
const row: GridCell[] = [];
for (let x = 0; x < GRID_SIZE; x++) {
let type: CellType = 'safe';
const rand = Math.random();
if (rand < 0.25) { // Increased density slightly to make carving more meaningful
type = 'wall';
} else if (rand < 0.35) {
type = 'trap';
}
if (x === 0 && y === 0) type = 'start';
if (x === GRID_SIZE - 1 && y === GRID_SIZE - 1) type = 'end';
row.push({
x,
y,
type,
revealed: (x === 0 && y === 0) || (x === GRID_SIZE - 1 && y === GRID_SIZE - 1),
steppedOn: x === 0 && y === 0,
});
}
grid.push(row);
}
// 2. Check and Fix Solvability
if (!checkSolvability(grid)) {
// console.log("Map unsolvable, carving path...");
carvePath(grid);
}
return grid;
};

24
vite.config.ts Normal file
View File

@ -0,0 +1,24 @@
import path from 'path';
import { defineConfig, loadEnv } from 'vite';
import react from '@vitejs/plugin-react';
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, '.', '');
return {
base: './',
server: {
port: 3000,
host: '0.0.0.0',
},
plugins: [react()],
define: {
'process.env.API_KEY': JSON.stringify(env.GEMINI_API_KEY),
'process.env.GEMINI_API_KEY': JSON.stringify(env.GEMINI_API_KEY)
},
resolve: {
alias: {
'@': path.resolve(__dirname, '.'),
}
}
};
});

773
yarn.lock Normal file
View File

@ -0,0 +1,773 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"@babel/code-frame@^7.27.1":
version "7.27.1"
resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.27.1.tgz"
integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==
dependencies:
"@babel/helper-validator-identifier" "^7.27.1"
js-tokens "^4.0.0"
picocolors "^1.1.1"
"@babel/compat-data@^7.27.2":
version "7.28.5"
resolved "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.28.5.tgz"
integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==
"@babel/core@^7.28.5":
version "7.28.5"
resolved "https://registry.npmmirror.com/@babel/core/-/core-7.28.5.tgz"
integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==
dependencies:
"@babel/code-frame" "^7.27.1"
"@babel/generator" "^7.28.5"
"@babel/helper-compilation-targets" "^7.27.2"
"@babel/helper-module-transforms" "^7.28.3"
"@babel/helpers" "^7.28.4"
"@babel/parser" "^7.28.5"
"@babel/template" "^7.27.2"
"@babel/traverse" "^7.28.5"
"@babel/types" "^7.28.5"
"@jridgewell/remapping" "^2.3.5"
convert-source-map "^2.0.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
json5 "^2.2.3"
semver "^6.3.1"
"@babel/generator@^7.28.5":
version "7.28.5"
resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.28.5.tgz"
integrity sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==
dependencies:
"@babel/parser" "^7.28.5"
"@babel/types" "^7.28.5"
"@jridgewell/gen-mapping" "^0.3.12"
"@jridgewell/trace-mapping" "^0.3.28"
jsesc "^3.0.2"
"@babel/helper-compilation-targets@^7.27.2":
version "7.27.2"
resolved "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz"
integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==
dependencies:
"@babel/compat-data" "^7.27.2"
"@babel/helper-validator-option" "^7.27.1"
browserslist "^4.24.0"
lru-cache "^5.1.1"
semver "^6.3.1"
"@babel/helper-globals@^7.28.0":
version "7.28.0"
resolved "https://registry.npmmirror.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz"
integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==
"@babel/helper-module-imports@^7.27.1":
version "7.27.1"
resolved "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz"
integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==
dependencies:
"@babel/traverse" "^7.27.1"
"@babel/types" "^7.27.1"
"@babel/helper-module-transforms@^7.28.3":
version "7.28.3"
resolved "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz"
integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==
dependencies:
"@babel/helper-module-imports" "^7.27.1"
"@babel/helper-validator-identifier" "^7.27.1"
"@babel/traverse" "^7.28.3"
"@babel/helper-plugin-utils@^7.27.1":
version "7.27.1"
resolved "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz"
integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==
"@babel/helper-string-parser@^7.27.1":
version "7.27.1"
resolved "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz"
integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==
"@babel/helper-validator-identifier@^7.27.1", "@babel/helper-validator-identifier@^7.28.5":
version "7.28.5"
resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz"
integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==
"@babel/helper-validator-option@^7.27.1":
version "7.27.1"
resolved "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz"
integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==
"@babel/helpers@^7.28.4":
version "7.28.4"
resolved "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.28.4.tgz"
integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==
dependencies:
"@babel/template" "^7.27.2"
"@babel/types" "^7.28.4"
"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.27.2", "@babel/parser@^7.28.5":
version "7.28.5"
resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.5.tgz"
integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==
dependencies:
"@babel/types" "^7.28.5"
"@babel/plugin-transform-react-jsx-self@^7.27.1":
version "7.27.1"
resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz"
integrity sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==
dependencies:
"@babel/helper-plugin-utils" "^7.27.1"
"@babel/plugin-transform-react-jsx-source@^7.27.1":
version "7.27.1"
resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz"
integrity sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==
dependencies:
"@babel/helper-plugin-utils" "^7.27.1"
"@babel/template@^7.27.2":
version "7.27.2"
resolved "https://registry.npmmirror.com/@babel/template/-/template-7.27.2.tgz"
integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==
dependencies:
"@babel/code-frame" "^7.27.1"
"@babel/parser" "^7.27.2"
"@babel/types" "^7.27.1"
"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.5":
version "7.28.5"
resolved "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.28.5.tgz"
integrity sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==
dependencies:
"@babel/code-frame" "^7.27.1"
"@babel/generator" "^7.28.5"
"@babel/helper-globals" "^7.28.0"
"@babel/parser" "^7.28.5"
"@babel/template" "^7.27.2"
"@babel/types" "^7.28.5"
debug "^4.3.1"
"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.28.5":
version "7.28.5"
resolved "https://registry.npmmirror.com/@babel/types/-/types-7.28.5.tgz"
integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==
dependencies:
"@babel/helper-string-parser" "^7.27.1"
"@babel/helper-validator-identifier" "^7.28.5"
"@esbuild/aix-ppc64@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz#80fcbe36130e58b7670511e888b8e88a259ed76c"
integrity sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==
"@esbuild/android-arm64@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz#8aa4965f8d0a7982dc21734bf6601323a66da752"
integrity sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==
"@esbuild/android-arm@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.25.12.tgz#300712101f7f50f1d2627a162e6e09b109b6767a"
integrity sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==
"@esbuild/android-x64@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.25.12.tgz#87dfb27161202bdc958ef48bb61b09c758faee16"
integrity sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==
"@esbuild/darwin-arm64@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz"
integrity sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==
"@esbuild/darwin-x64@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz#146400a8562133f45c4d2eadcf37ddd09718079e"
integrity sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==
"@esbuild/freebsd-arm64@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz#1c5f9ba7206e158fd2b24c59fa2d2c8bb47ca0fe"
integrity sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==
"@esbuild/freebsd-x64@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz#ea631f4a36beaac4b9279fa0fcc6ca29eaeeb2b3"
integrity sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==
"@esbuild/linux-arm64@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz#e1066bce58394f1b1141deec8557a5f0a22f5977"
integrity sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==
"@esbuild/linux-arm@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz#452cd66b20932d08bdc53a8b61c0e30baf4348b9"
integrity sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==
"@esbuild/linux-ia32@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz#b24f8acc45bcf54192c7f2f3be1b53e6551eafe0"
integrity sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==
"@esbuild/linux-loong64@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz#f9cfffa7fc8322571fbc4c8b3268caf15bd81ad0"
integrity sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==
"@esbuild/linux-mips64el@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz#575a14bd74644ffab891adc7d7e60d275296f2cd"
integrity sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==
"@esbuild/linux-ppc64@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz#75b99c70a95fbd5f7739d7692befe60601591869"
integrity sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==
"@esbuild/linux-riscv64@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz#2e3259440321a44e79ddf7535c325057da875cd6"
integrity sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==
"@esbuild/linux-s390x@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz#17676cabbfe5928da5b2a0d6df5d58cd08db2663"
integrity sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==
"@esbuild/linux-x64@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz#0583775685ca82066d04c3507f09524d3cd7a306"
integrity sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==
"@esbuild/netbsd-arm64@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz#f04c4049cb2e252fe96b16fed90f70746b13f4a4"
integrity sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==
"@esbuild/netbsd-x64@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz#77da0d0a0d826d7c921eea3d40292548b258a076"
integrity sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==
"@esbuild/openbsd-arm64@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz#6296f5867aedef28a81b22ab2009c786a952dccd"
integrity sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==
"@esbuild/openbsd-x64@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz#f8d23303360e27b16cf065b23bbff43c14142679"
integrity sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==
"@esbuild/openharmony-arm64@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz#49e0b768744a3924be0d7fd97dd6ce9b2923d88d"
integrity sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==
"@esbuild/sunos-x64@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz#a6ed7d6778d67e528c81fb165b23f4911b9b13d6"
integrity sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==
"@esbuild/win32-arm64@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz#9ac14c378e1b653af17d08e7d3ce34caef587323"
integrity sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==
"@esbuild/win32-ia32@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz#918942dcbbb35cc14fca39afb91b5e6a3d127267"
integrity sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==
"@esbuild/win32-x64@0.25.12":
version "0.25.12"
resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz#9bdad8176be7811ad148d1f8772359041f46c6c5"
integrity sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==
"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5":
version "0.3.13"
resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz"
integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==
dependencies:
"@jridgewell/sourcemap-codec" "^1.5.0"
"@jridgewell/trace-mapping" "^0.3.24"
"@jridgewell/remapping@^2.3.5":
version "2.3.5"
resolved "https://registry.npmmirror.com/@jridgewell/remapping/-/remapping-2.3.5.tgz"
integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==
dependencies:
"@jridgewell/gen-mapping" "^0.3.5"
"@jridgewell/trace-mapping" "^0.3.24"
"@jridgewell/resolve-uri@^3.1.0":
version "3.1.2"
resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz"
integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0":
version "1.5.5"
resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz"
integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==
"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.28":
version "0.3.31"
resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz"
integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==
dependencies:
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
"@rolldown/pluginutils@1.0.0-beta.47":
version "1.0.0-beta.47"
resolved "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.47.tgz"
integrity sha512-8QagwMH3kNCuzD8EWL8R2YPW5e4OrHNSAHRFDdmFqEwEaD/KcNKjVoumo+gP2vW5eKB2UPbM6vTYiGZX0ixLnw==
"@rollup/rollup-android-arm-eabi@4.53.3":
version "4.53.3"
resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz#7e478b66180c5330429dd161bf84dad66b59c8eb"
integrity sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==
"@rollup/rollup-android-arm64@4.53.3":
version "4.53.3"
resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz#2b025510c53a5e3962d3edade91fba9368c9d71c"
integrity sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==
"@rollup/rollup-darwin-arm64@4.53.3":
version "4.53.3"
resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz"
integrity sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==
"@rollup/rollup-darwin-x64@4.53.3":
version "4.53.3"
resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz#2bf5f2520a1f3b551723d274b9669ba5b75ed69c"
integrity sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==
"@rollup/rollup-freebsd-arm64@4.53.3":
version "4.53.3"
resolved "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz#4bb9cc80252564c158efc0710153c71633f1927c"
integrity sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==
"@rollup/rollup-freebsd-x64@4.53.3":
version "4.53.3"
resolved "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz#2301289094d49415a380cf942219ae9d8b127440"
integrity sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==
"@rollup/rollup-linux-arm-gnueabihf@4.53.3":
version "4.53.3"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz#1d03d776f2065e09fc141df7d143476e94acca88"
integrity sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==
"@rollup/rollup-linux-arm-musleabihf@4.53.3":
version "4.53.3"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz#8623de0e040b2fd52a541c602688228f51f96701"
integrity sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==
"@rollup/rollup-linux-arm64-gnu@4.53.3":
version "4.53.3"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz#ce2d1999bc166277935dde0301cde3dd0417fb6e"
integrity sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==
"@rollup/rollup-linux-arm64-musl@4.53.3":
version "4.53.3"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz#88c2523778444da952651a2219026416564a4899"
integrity sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==
"@rollup/rollup-linux-loong64-gnu@4.53.3":
version "4.53.3"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz#578ca2220a200ac4226c536c10c8cc6e4f276714"
integrity sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==
"@rollup/rollup-linux-ppc64-gnu@4.53.3":
version "4.53.3"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz#aa338d3effd4168a20a5023834a74ba2c3081293"
integrity sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==
"@rollup/rollup-linux-riscv64-gnu@4.53.3":
version "4.53.3"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz#16ba582f9f6cff58119aa242782209b1557a1508"
integrity sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==
"@rollup/rollup-linux-riscv64-musl@4.53.3":
version "4.53.3"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz#e404a77ebd6378483888b8064c703adb011340ab"
integrity sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==
"@rollup/rollup-linux-s390x-gnu@4.53.3":
version "4.53.3"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz#92ad52d306227c56bec43d96ad2164495437ffe6"
integrity sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==
"@rollup/rollup-linux-x64-gnu@4.53.3":
version "4.53.3"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz#fd0dea3bb9aa07e7083579f25e1c2285a46cb9fa"
integrity sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==
"@rollup/rollup-linux-x64-musl@4.53.3":
version "4.53.3"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz#37a3efb09f18d555f8afc490e1f0444885de8951"
integrity sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==
"@rollup/rollup-openharmony-arm64@4.53.3":
version "4.53.3"
resolved "https://registry.npmmirror.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz#c489bec9f4f8320d42c9b324cca220c90091c1f7"
integrity sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==
"@rollup/rollup-win32-arm64-msvc@4.53.3":
version "4.53.3"
resolved "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz#152832b5f79dc22d1606fac3db946283601b7080"
integrity sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==
"@rollup/rollup-win32-ia32-msvc@4.53.3":
version "4.53.3"
resolved "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz#54d91b2bb3bf3e9f30d32b72065a4e52b3a172a5"
integrity sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==
"@rollup/rollup-win32-x64-gnu@4.53.3":
version "4.53.3"
resolved "https://registry.npmmirror.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz#df9df03e61a003873efec8decd2034e7f135c71e"
integrity sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==
"@rollup/rollup-win32-x64-msvc@4.53.3":
version "4.53.3"
resolved "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz#38ae84f4c04226c1d56a3b17296ef1e0460ecdfe"
integrity sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==
"@types/babel__core@^7.20.5":
version "7.20.5"
resolved "https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.20.5.tgz"
integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==
dependencies:
"@babel/parser" "^7.20.7"
"@babel/types" "^7.20.7"
"@types/babel__generator" "*"
"@types/babel__template" "*"
"@types/babel__traverse" "*"
"@types/babel__generator@*":
version "7.27.0"
resolved "https://registry.npmmirror.com/@types/babel__generator/-/babel__generator-7.27.0.tgz"
integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==
dependencies:
"@babel/types" "^7.0.0"
"@types/babel__template@*":
version "7.4.4"
resolved "https://registry.npmmirror.com/@types/babel__template/-/babel__template-7.4.4.tgz"
integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==
dependencies:
"@babel/parser" "^7.1.0"
"@babel/types" "^7.0.0"
"@types/babel__traverse@*":
version "7.28.0"
resolved "https://registry.npmmirror.com/@types/babel__traverse/-/babel__traverse-7.28.0.tgz"
integrity sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==
dependencies:
"@babel/types" "^7.28.2"
"@types/estree@1.0.8":
version "1.0.8"
resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz"
integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==
"@types/node@^22.14.0":
version "22.19.1"
resolved "https://registry.npmmirror.com/@types/node/-/node-22.19.1.tgz"
integrity sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==
dependencies:
undici-types "~6.21.0"
"@types/react-dom@^19.2.3":
version "19.2.3"
resolved "https://registry.npmmirror.com/@types/react-dom/-/react-dom-19.2.3.tgz"
integrity sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==
"@types/react@^19.2.7":
version "19.2.7"
resolved "https://registry.npmmirror.com/@types/react/-/react-19.2.7.tgz"
integrity sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==
dependencies:
csstype "^3.2.2"
"@vitejs/plugin-react@^5.0.0":
version "5.1.1"
resolved "https://registry.npmmirror.com/@vitejs/plugin-react/-/plugin-react-5.1.1.tgz"
integrity sha512-WQfkSw0QbQ5aJ2CHYw23ZGkqnRwqKHD/KYsMeTkZzPT4Jcf0DcBxBtwMJxnu6E7oxw5+JC6ZAiePgh28uJ1HBA==
dependencies:
"@babel/core" "^7.28.5"
"@babel/plugin-transform-react-jsx-self" "^7.27.1"
"@babel/plugin-transform-react-jsx-source" "^7.27.1"
"@rolldown/pluginutils" "1.0.0-beta.47"
"@types/babel__core" "^7.20.5"
react-refresh "^0.18.0"
baseline-browser-mapping@^2.8.25:
version "2.8.31"
resolved "https://registry.npmmirror.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.31.tgz"
integrity sha512-a28v2eWrrRWPpJSzxc+mKwm0ZtVx/G8SepdQZDArnXYU/XS+IF6mp8aB/4E+hH1tyGCoDo3KlUCdlSxGDsRkAw==
browserslist@^4.24.0:
version "4.28.0"
resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.28.0.tgz"
integrity sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==
dependencies:
baseline-browser-mapping "^2.8.25"
caniuse-lite "^1.0.30001754"
electron-to-chromium "^1.5.249"
node-releases "^2.0.27"
update-browserslist-db "^1.1.4"
caniuse-lite@^1.0.30001754:
version "1.0.30001757"
resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz"
integrity sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==
convert-source-map@^2.0.0:
version "2.0.0"
resolved "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz"
integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
csstype@^3.2.2:
version "3.2.3"
resolved "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz"
integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==
debug@^4.1.0, debug@^4.3.1:
version "4.4.3"
resolved "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz"
integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
dependencies:
ms "^2.1.3"
electron-to-chromium@^1.5.249:
version "1.5.262"
resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.262.tgz"
integrity sha512-NlAsMteRHek05jRUxUR0a5jpjYq9ykk6+kO0yRaMi5moe7u0fVIOeQ3Y30A8dIiWFBNUoQGi1ljb1i5VtS9WQQ==
esbuild@^0.25.0:
version "0.25.12"
resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.25.12.tgz"
integrity sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==
optionalDependencies:
"@esbuild/aix-ppc64" "0.25.12"
"@esbuild/android-arm" "0.25.12"
"@esbuild/android-arm64" "0.25.12"
"@esbuild/android-x64" "0.25.12"
"@esbuild/darwin-arm64" "0.25.12"
"@esbuild/darwin-x64" "0.25.12"
"@esbuild/freebsd-arm64" "0.25.12"
"@esbuild/freebsd-x64" "0.25.12"
"@esbuild/linux-arm" "0.25.12"
"@esbuild/linux-arm64" "0.25.12"
"@esbuild/linux-ia32" "0.25.12"
"@esbuild/linux-loong64" "0.25.12"
"@esbuild/linux-mips64el" "0.25.12"
"@esbuild/linux-ppc64" "0.25.12"
"@esbuild/linux-riscv64" "0.25.12"
"@esbuild/linux-s390x" "0.25.12"
"@esbuild/linux-x64" "0.25.12"
"@esbuild/netbsd-arm64" "0.25.12"
"@esbuild/netbsd-x64" "0.25.12"
"@esbuild/openbsd-arm64" "0.25.12"
"@esbuild/openbsd-x64" "0.25.12"
"@esbuild/openharmony-arm64" "0.25.12"
"@esbuild/sunos-x64" "0.25.12"
"@esbuild/win32-arm64" "0.25.12"
"@esbuild/win32-ia32" "0.25.12"
"@esbuild/win32-x64" "0.25.12"
escalade@^3.2.0:
version "3.2.0"
resolved "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz"
integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
fdir@^6.4.4, fdir@^6.5.0:
version "6.5.0"
resolved "https://registry.npmmirror.com/fdir/-/fdir-6.5.0.tgz"
integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==
fsevents@~2.3.2, fsevents@~2.3.3:
version "2.3.3"
resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz"
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
gensync@^1.0.0-beta.2:
version "1.0.0-beta.2"
resolved "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz"
integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz"
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
jsesc@^3.0.2:
version "3.1.0"
resolved "https://registry.npmmirror.com/jsesc/-/jsesc-3.1.0.tgz"
integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==
json5@^2.2.3:
version "2.2.3"
resolved "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz"
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
lru-cache@^5.1.1:
version "5.1.1"
resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz"
integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
dependencies:
yallist "^3.0.2"
lucide-react@^0.555.0:
version "0.555.0"
resolved "https://registry.npmmirror.com/lucide-react/-/lucide-react-0.555.0.tgz"
integrity sha512-D8FvHUGbxWBRQM90NZeIyhAvkFfsh3u9ekrMvJ30Z6gnpBHS6HC6ldLg7tL45hwiIz/u66eKDtdA23gwwGsAHA==
ms@^2.1.3:
version "2.1.3"
resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
nanoid@^3.3.11:
version "3.3.11"
resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz"
integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==
node-releases@^2.0.27:
version "2.0.27"
resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.27.tgz"
integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==
picocolors@^1.1.1:
version "1.1.1"
resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz"
integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
picomatch@^4.0.2, picomatch@^4.0.3:
version "4.0.3"
resolved "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.3.tgz"
integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==
postcss@^8.5.3:
version "8.5.6"
resolved "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz"
integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==
dependencies:
nanoid "^3.3.11"
picocolors "^1.1.1"
source-map-js "^1.2.1"
react-dom@^19.2.0:
version "19.2.0"
resolved "https://registry.npmmirror.com/react-dom/-/react-dom-19.2.0.tgz"
integrity sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==
dependencies:
scheduler "^0.27.0"
react-refresh@^0.18.0:
version "0.18.0"
resolved "https://registry.npmmirror.com/react-refresh/-/react-refresh-0.18.0.tgz"
integrity sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==
react@^19.2.0:
version "19.2.0"
resolved "https://registry.npmmirror.com/react/-/react-19.2.0.tgz"
integrity sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==
rollup@^4.34.9:
version "4.53.3"
resolved "https://registry.npmmirror.com/rollup/-/rollup-4.53.3.tgz"
integrity sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==
dependencies:
"@types/estree" "1.0.8"
optionalDependencies:
"@rollup/rollup-android-arm-eabi" "4.53.3"
"@rollup/rollup-android-arm64" "4.53.3"
"@rollup/rollup-darwin-arm64" "4.53.3"
"@rollup/rollup-darwin-x64" "4.53.3"
"@rollup/rollup-freebsd-arm64" "4.53.3"
"@rollup/rollup-freebsd-x64" "4.53.3"
"@rollup/rollup-linux-arm-gnueabihf" "4.53.3"
"@rollup/rollup-linux-arm-musleabihf" "4.53.3"
"@rollup/rollup-linux-arm64-gnu" "4.53.3"
"@rollup/rollup-linux-arm64-musl" "4.53.3"
"@rollup/rollup-linux-loong64-gnu" "4.53.3"
"@rollup/rollup-linux-ppc64-gnu" "4.53.3"
"@rollup/rollup-linux-riscv64-gnu" "4.53.3"
"@rollup/rollup-linux-riscv64-musl" "4.53.3"
"@rollup/rollup-linux-s390x-gnu" "4.53.3"
"@rollup/rollup-linux-x64-gnu" "4.53.3"
"@rollup/rollup-linux-x64-musl" "4.53.3"
"@rollup/rollup-openharmony-arm64" "4.53.3"
"@rollup/rollup-win32-arm64-msvc" "4.53.3"
"@rollup/rollup-win32-ia32-msvc" "4.53.3"
"@rollup/rollup-win32-x64-gnu" "4.53.3"
"@rollup/rollup-win32-x64-msvc" "4.53.3"
fsevents "~2.3.2"
scheduler@^0.27.0:
version "0.27.0"
resolved "https://registry.npmmirror.com/scheduler/-/scheduler-0.27.0.tgz"
integrity sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==
semver@^6.3.1:
version "6.3.1"
resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
source-map-js@^1.2.1:
version "1.2.1"
resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz"
integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
tinyglobby@^0.2.13:
version "0.2.15"
resolved "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.15.tgz"
integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==
dependencies:
fdir "^6.5.0"
picomatch "^4.0.3"
typescript@~5.8.2:
version "5.8.3"
resolved "https://registry.npmmirror.com/typescript/-/typescript-5.8.3.tgz"
integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==
undici-types@~6.21.0:
version "6.21.0"
resolved "https://registry.npmmirror.com/undici-types/-/undici-types-6.21.0.tgz"
integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==
update-browserslist-db@^1.1.4:
version "1.1.4"
resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz"
integrity sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==
dependencies:
escalade "^3.2.0"
picocolors "^1.1.1"
vite@^6.2.0:
version "6.4.1"
resolved "https://registry.npmmirror.com/vite/-/vite-6.4.1.tgz"
integrity sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==
dependencies:
esbuild "^0.25.0"
fdir "^6.4.4"
picomatch "^4.0.2"
postcss "^8.5.3"
rollup "^4.34.9"
tinyglobby "^0.2.13"
optionalDependencies:
fsevents "~2.3.3"
yallist@^3.0.2:
version "3.1.1"
resolved "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz"
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==