{ "name": "@investplay/web", "version": "0.1.0", "private": true, "description": "InvestPlay React frontend", "type": "module", "scripts": { "dev": "vite", "build": "tsc --noEmit && vite build", "preview": "vite preview", "lint": "eslint \"src/**/*.{ts,tsx}\" --fix", "typecheck": "tsc --noEmit", "test": "vitest run", "test:watch": "vitest", "test:e2e": "playwright test", "clean": "rimraf dist .turbo" }, "dependencies": { "react": "^18.3.0", "react-dom": "^18.3.0", "react-router-dom": "^7.5.0", "react-i18next": "^15.4.0", "i18next": "^24.2.0", "zustand": "^5.0.0", "@tanstack/react-query": "^5.75.0", "socket.io-client": "^4.8.0", "recharts": "^2.15.0", "zod": "^3.24.0", "lucide-react": "^0.490.0", "clsx": "^2.1.0", "tailwind-merge": "^3.2.0", "class-variance-authority": "^0.7.1", "@radix-ui/react-dialog": "^1.1.0", "@radix-ui/react-dropdown-menu": "^2.1.0", "@radix-ui/react-tabs": "^1.1.0", "@radix-ui/react-tooltip": "^1.1.0", "@radix-ui/react-popover": "^1.1.0", "@radix-ui/react-select": "^2.1.0", "@radix-ui/react-slot": "^1.1.0", "@radix-ui/react-toast": "^1.2.0", "@radix-ui/react-label": "^2.1.0", "@radix-ui/react-avatar": "^1.1.0", "@radix-ui/react-progress": "^1.1.0", "@radix-ui/react-separator": "^1.1.0" }, "devDependencies": { "vite": "^6.3.0", "@vitejs/plugin-react": "^4.4.0", "tailwindcss": "^4.1.0", "@tailwindcss/vite": "^4.1.0", "autoprefixer": "^10.4.0", "postcss": "^8.5.0", "vitest": "^3.1.0", "@testing-library/react": "^16.3.0", "@testing-library/jest-dom": "^6.6.0", "@playwright/test": "^1.52.0", "typescript": "^5.8.0", "@types/react": "^18.3.0", "@types/react-dom": "^18.3.0", "eslint": "^8.57.0", "eslint-plugin-react": "^7.37.0", "eslint-plugin-react-hooks": "^5.2.0", "rimraf": "^6.0.0" } }