{ "name": "frontend", "private": true, "version": "0.0.0", "type": "module", "scripts": { "dev": "vite", "build": "tsc && vite build", "preview": "vite preview", "lint": "eslint ./src --ext .jsx,.js,.ts,.tsx", "lint-fix": "eslint ./src --ext .jsx,.js,.ts,.tsx --fix", "format": "prettier ./src --write", "prepare": "cd .. && husky install frontend/.husky" }, "lint-staged": { "**/*.{js,jsx,ts,tsx}": [ "npm run lint-fix", "npm run format" ] }, "dependencies": { "@reduxjs/toolkit": "^2.8.2", "chart.js": "^4.4.4", "clsx": "^2.1.1", "copy-to-clipboard": "^3.3.3", "i18next": "^25.5.3", "i18next-browser-languagedetector": "^8.0.2", "lodash": "^4.17.21", "mermaid": "^11.6.0", "prop-types": "^15.8.1", "react": "^19.1.0", "react-chartjs-2": "^5.3.0", "react-dom": "^19.0.0", "react-dropzone": "^14.3.8", "react-google-drive-picker": "^1.2.2", "react-i18next": "^15.4.0", "react-markdown": "^9.0.1", "react-redux": "^9.2.0", "react-router-dom": "^7.6.1", "react-syntax-highlighter": "^15.6.1", "rehype-katex": "^7.0.1", "remark-gfm": "^4.0.0", "remark-math": "^6.0.0", "tailwind-merge": "^3.3.1" }, "devDependencies": { "@tailwindcss/postcss": "^4.1.10", "@types/lodash": "^4.17.20", "@types/mermaid": "^9.1.0", "@types/react": "^19.1.8", "@types/react-dom": "^19.0.0", "@types/react-syntax-highlighter": "^15.5.13", "@typescript-eslint/eslint-plugin": "^5.51.0", "@typescript-eslint/parser": "^5.62.0", "@vitejs/plugin-react": "^4.3.4", "eslint": "^8.57.1", "eslint-config-prettier": "^10.1.5", "eslint-config-standard-with-typescript": "^34.0.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-n": "^15.7.0", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-promise": "^6.6.0", "eslint-plugin-react": "^7.37.5", "eslint-plugin-unused-imports": "^4.1.4", "husky": "^8.0.0", "lint-staged": "^15.3.0", "postcss": "^8.4.49", "prettier": "^3.5.3", "prettier-plugin-tailwindcss": "^0.6.13", "tailwindcss": "^4.1.11", "typescript": "^5.8.3", "vite": "^6.3.5", "vite-plugin-svgr": "^4.3.0" } }