{
  "name": "radionica3d",
  "private": true,
  "version": "0.1.0",
  "type": "module",
  "scripts": {
    "dev": "npm run i18n:generate && vite",
    "build": "npm run i18n:generate && npm run sitemap:generate && vue-tsc && vite build",
    "i18n:generate": "node -e \"const cp=require('child_process'),fs=require('fs'); let p='python'; if(fs.existsSync('backend/venv/Scripts/python.exe')) p='backend\\\\venv\\\\Scripts\\python.exe'; else if(fs.existsSync('backend/venv/bin/python3')) p='backend/venv/bin/python3'; else if(fs.existsSync('backend/venv/bin/python')) p='backend/venv/bin/python'; cp.execSync(p+' scripts/manage_locales.py split', {stdio:'inherit'})\"",
    "sitemap:generate": "node -e \"const cp=require('child_process'),fs=require('fs'); let p='python'; if(fs.existsSync('backend/venv/Scripts/python.exe')) p='backend\\\\venv\\\\Scripts\\python.exe'; else if(fs.existsSync('backend/venv/bin/python3')) p='backend/venv/bin/python3'; else if(fs.existsSync('backend/venv/bin/python')) p='backend/venv/bin/python'; cp.execSync(p+' scripts/generate_sitemap.py', {stdio:'inherit'})\"",
    "i18n:merge": "node -e \"const cp=require('child_process'),fs=require('fs'); let p='python'; if(fs.existsSync('backend/venv/Scripts/python.exe')) p='backend\\\\venv\\\\Scripts\\python.exe'; else if(fs.existsSync('backend/venv/bin/python3')) p='backend/venv/bin/python3'; else if(fs.existsSync('backend/venv/bin/python')) p='backend/venv/bin/python'; cp.execSync(p+' scripts/manage_locales.py merge', {stdio:'inherit'})\"",
    "i18n:check": "node -e \"const cp=require('child_process'),fs=require('fs'); let p='python'; if(fs.existsSync('backend/venv/Scripts/python.exe')) p='backend\\\\venv\\\\Scripts\\python.exe'; else if(fs.existsSync('backend/venv/bin/python3')) p='backend/venv/bin/python3'; else if(fs.existsSync('backend/venv/bin/python')) p='backend/venv/bin/python'; cp.execSync(p+' scripts/manage_locales.py missing', {stdio:'inherit'})\"",
    "lint": "eslint . --ext ts,vue --report-unused-disable-directives --max-warnings 0",
    "preview": "vite preview",
    "test": "vitest run",
    "seo:audit": "python scripts/seo_audit.py"
  },
  "dependencies": {
    "@tanstack/vue-query": "^5.25.0",
    "@types/three": "^0.183.1",
    "@unhead/schema": "^3.0.5",
    "@unhead/vue": "^3.0.5",
    "@vueuse/core": "^10.11.1",
    "@vueuse/motion": "^3.0.3",
    "class-variance-authority": "^0.7.0",
    "clsx": "^2.1.0",
    "date-fns": "^3.6.0",
    "i18next-browser-languagedetector": "^8.2.1",
    "lucide-vue-next": "^0.354.0",
    "pinia": "^2.3.1",
    "tailwind-merge": "^2.6.1",
    "tailwindcss-animate": "^1.0.7",
    "three": "^0.183.2",
    "vue": "^3.4.21",
    "vue-i18n": "^9.14.5",
    "vue-router": "^4.6.4",
    "vue-sonner": "^1.3.2",
    "zod": "^3.25.76"
  },
  "devDependencies": {
    "@types/node": "^20.11.25",
    "@vitejs/plugin-vue": "^6.0.6",
    "@vue/test-utils": "^2.4.6",
    "autoprefixer": "^10.5.0",
    "jsdom": "^29.0.2",
    "postcss": "^8.5.10",
    "tailwindcss": "^3.4.19",
    "typescript": "^5.3.3",
    "vite": "^6.0.0",
    "vite-plugin-prerender": "^1.0.8",
    "vitest": "^4.1.4",
    "vue-tsc": "^2.2.12"
  },
  "overrides": {
    "esbuild": "0.25.0",
    "braces": "3.0.3",
    "micromatch": "4.0.8",
    "http-proxy-middleware": "3.0.5",
    "html-minifier": "npm:html-minifier-terser@^7.2.0",
    "@vue/devtools-api": "8.1.1"
  }
}
