{ "name": "audioforge-frontend", "version": "0.1.0", "private": true, "scripts": { "dev": "next dev", "build": "next build", "start": "next start", "lint": "next lint", "lint:fix": "next lint --fix", "test": "vitest run", "test:watch": "vitest", "test:ui": "vitest --ui", "test:coverage": "vitest run --coverage", "type-check": "tsc --noEmit", "format": "prettier --write \"src/**/*.{ts,tsx,json,css,md}\"", "format:check": "prettier --check \"src/**/*.{ts,tsx,json,css,md}\"", "validate": "pnpm run type-check && pnpm run lint && pnpm run test", "pre-commit": "pnpm run format && pnpm run validate" }, "dependencies": { "@hookform/resolvers": "^3.3.4", "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-progress": "^1.0.5", "@radix-ui/react-select": "^2.0.0", "@radix-ui/react-slider": "^1.1.2", "@radix-ui/react-toast": "^1.1.5", "@tanstack/react-query": "^5.17.0", "axios": "^1.6.5", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", "date-fns": "^3.0.6", "lucide-react": "^0.309.0", "next": "^14.1.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-hook-form": "^7.49.3", "recharts": "^2.10.3", "sonner": "^2.0.7", "tailwind-merge": "^2.2.0", "zod": "^3.22.4", "zustand": "^4.4.7" }, "devDependencies": { "@playwright/test": "^1.57.0", "@testing-library/jest-dom": "^6.1.5", "@testing-library/react": "^14.1.2", "@testing-library/user-event": "^14.5.1", "@types/node": "^20.11.5", "@types/react": "^18.2.48", "@types/react-dom": "^18.2.18", "@typescript-eslint/eslint-plugin": "^6.19.0", "@typescript-eslint/parser": "^6.19.0", "@vitejs/plugin-react": "^4.2.1", "autoprefixer": "^10.4.17", "eslint": "^8.56.0", "eslint-config-next": "^14.1.0", "jsdom": "^23.0.1", "postcss": "^8.4.33", "tailwindcss": "^3.4.1", "typescript": "^5.3.3", "vitest": "^1.2.0" } }