{ "name": "web", "private": true, "version": "0.0.0", "type": "module", "scripts": { "dev": "vite", "mocked": "vite --mode mocked", "build": "tsc && vite build", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "preview": "vite preview" }, "dependencies": { "@ant-design/icons": "^5.6.1", "@xterm/addon-attach": "^0.11.0", "@xterm/addon-fit": "^0.10.0", "@xterm/xterm": "^5.5.0", "antd": "^5.29.1", "axios": "1.12.0", "clsx": "^2.1.1", "crypto-js": "^4.2.0", "i18next": "^23.16.4", "jotai": "^2.10.1", "js-cookie": "^3.0.5", "lucide-react": "^0.469.0", "react": "^18.3.1", "react-dom": "^18.3.1", "react-draggable": "^4.4.6", "react-error-boundary": "^4.1.2", "react-helmet-async": "^2.0.5", "react-i18next": "^14.1.3", "react-responsive": "^10.0.0", "react-router-dom": "^6.27.0", "react-simple-keyboard": "^3.8.19", "semver": "^7.6.3", "vaul": "^0.9.9", "websocket": "^1.0.35", "yocto-queue": "^1.2.1" }, "devDependencies": { "@ianvs/prettier-plugin-sort-imports": "^4.7.0", "@types/crypto-js": "^4.2.2", "@types/js-cookie": "^3.0.6", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", "@types/semver": "^7.5.8", "@types/websocket": "^1.0.10", "@typescript-eslint/eslint-plugin": "^8.48.0", "@typescript-eslint/parser": "^8.48.0", "@vitejs/plugin-react": "^4.7.0", "autoprefixer": "^10.4.20", "eslint": "^9.39.1", "eslint-config-prettier": "^9.1.0", "eslint-plugin-react": "^7.37.2", "eslint-plugin-react-hooks": "^5.1.0", "eslint-plugin-react-refresh": "^0.4.16", "msw": "^2.6.0", "postcss": "^8.4.47", "prettier": "^3.4.2", "prettier-plugin-tailwindcss": "^0.6.9", "tailwindcss": "^3.4.18", "typescript": "^5.6.3", "vite": "7.1.11", "vite-tsconfig-paths": "^4.3.2" }, "msw": { "workerDirectory": [ "public" ] } }