{ "name": "felis-panel", "private": true, "version": "0.1.0", "type": "module", "description": "Felis control panel — external face of felis-api (spec §7)", "scripts": { "dev": "vite", "dev:mock": "vite --mode mock", "build": "tsc -b && vite build", "typecheck": "tsc -b", "test": "vitest run", "test:e2e": "playwright test", "lint": "eslint . --max-warnings 0", "gen:api": "openapi-typescript ../docs/openapi.yaml -o src/lib/openapi.gen.ts", "preview": "vite preview" }, "dependencies": { "@codemirror/language": "^6.12.4", "@codemirror/legacy-modes": "^6.5.4", "@codemirror/state": "^6.7.6", "@codemirror/view": "^6.43.13", "@lezer/highlight": "^1.2.4", "@radix-ui/react-dialog": "^1.1.6", "@radix-ui/react-label": "^2.1.2", "@radix-ui/react-select": "^2.1.6", "@radix-ui/react-slot": "^1.1.2", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "codemirror": "^6.0.2", "i18next": "^26.3.3", "i18next-browser-languagedetector": "^8.2.1", "lucide-react": "^0.469.0", "react": "^18.3.1", "react-dom": "^18.3.1", "react-i18next": "^17.0.8", "react-router-dom": "^7.18.4", "tailwind-merge": "^2.6.0", "three": "^0.172.0" }, "devDependencies": { "@eslint/js": "^10.0.1", "@playwright/test": "^1.63.0", "@testing-library/dom": "^10.4.2", "@testing-library/react": "^16.3.3", "@testing-library/user-event": "^14.6.7", "@types/node": "^22.10.5", "@types/react": "^18.3.18", "@types/react-dom": "^18.3.5", "@types/three": "^0.172.0", "@vitejs/plugin-react": "^4.3.4", "autoprefixer": "^10.4.20", "eslint": "^10.11.0", "eslint-plugin-react-hooks": "^7.1.1", "globals": "^17.12.0", "jsdom": "^30.1.1", "openapi-typescript": "^7.13.0", "postcss": "^8.5.28", "tailwindcss": "^3.4.17", "tailwindcss-animate": "^1.0.7", "typescript": "^5.7.3", "typescript-eslint": "^8.70.1", "vite": "^6.0.7", "vitest": "^4.1.11" } }