{ "name": "web", "private": true, "version": "0.0.0", "type": "module", "engines": { "node": ">=22", "pnpm": ">=11" }, "scripts": { "dev": "vite", "mocked": "vite --mode mocked", "build": "tsc && vite build", "lint": "eslint . --report-unused-disable-directives", "format": "prettier --write \"src/**/*.{js,jsx,ts,tsx,json,css,scss,md}\"", "preview": "vite preview" }, "dependencies": { "@ant-design/icons": "^5.6.1", "@radix-ui/react-scroll-area": "^1.2.10", "@xterm/addon-attach": "^0.11.0", "@xterm/addon-fit": "^0.10.0", "@xterm/xterm": "^5.5.0", "antd": "^5.29.3", "axios": "^1.15.2", "clsx": "^2.1.1", "crypto-js": "^4.2.0", "i18next": "^23.16.8", "jotai": "^2.18.0", "lucide-react": "^0.562.0", "react": "^18.3.1", "react-dom": "^18.3.1", "react-draggable": "^4.5.0", "react-error-boundary": "^4.1.2", "react-helmet-async": "^2.0.5", "react-i18next": "^14.1.3", "react-markdown": "^10.1.0", "react-responsive": "^10.0.1", "react-router-dom": "^6.30.3", "react-simple-keyboard": "^3.8.164", "remark-gfm": "^4.0.1", "semver": "^7.7.4", "vaul": "^0.9.9", "websocket": "^1.0.35", "yocto-queue": "^1.2.2" }, "devDependencies": { "@eslint/js": "^9.39.4", "@ianvs/prettier-plugin-sort-imports": "^4.7.1", "@types/crypto-js": "^4.2.2", "@types/react": "^18.3.28", "@types/react-dom": "^18.3.7", "@types/semver": "^7.7.1", "@types/websocket": "^1.0.10", "@typescript-eslint/eslint-plugin": "^8.59.0", "@typescript-eslint/parser": "^8.59.0", "@vitejs/plugin-react": "^6.0.5", "autoprefixer": "^10.4.27", "eslint": "^9.39.4", "eslint-config-prettier": "^9.1.2", "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-refresh": "^0.4.26", "globals": "^17.3.0", "msw": "^2.12.10", "postcss": "^8.5.10", "prettier": "^3.8.1", "prettier-plugin-tailwindcss": "^0.6.14", "tailwindcss": "^3.4.19", "typescript": "^5.9.3", "typescript-eslint": "^8.59.0", "vite": "8.2.0", "yaml": "^2.8.3" }, "msw": { "workerDirectory": [ "public" ] } }