{ "name": "frontend", "private": true, "version": "0.0.0", "type": "module", "scripts": { "dev": "vite", "build": "tsc -b && vite build", "lint": "eslint .", "preview": "vite preview", "test": "vitest", "test:run": "vitest run", "test:coverage": "vitest run --coverage", "test:ui": "vitest --ui" }, "dependencies": { "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", "@tanstack/react-query": "^5.90.11", "@tiptap/extension-color": "^3.11.1", "@tiptap/extension-image": "^3.11.1", "@tiptap/extension-link": "^3.11.1", "@tiptap/extension-text-align": "^3.11.1", "@tiptap/extension-text-style": "^3.11.1", "@tiptap/extension-underline": "^3.11.1", "@tiptap/react": "^3.11.1", "@tiptap/starter-kit": "^3.11.1", "@types/three": "^0.181.0", "gcode-preview": "^2.18.0", "i18next": "^25.6.3", "i18next-browser-languagedetector": "^8.2.0", "i18next-http-backend": "^3.0.2", "jszip": "^3.10.1", "lucide-react": "^0.555.0", "react": "^19.2.0", "react-dom": "^19.2.0", "react-i18next": "^16.3.5", "react-router-dom": "^7.12.0", "recharts": "^3.5.1", "three": "^0.181.2" }, "devDependencies": { "@eslint/js": "^9.39.1", "@tailwindcss/postcss": "^4.1.17", "@testing-library/jest-dom": "^6.6.0", "@testing-library/react": "^16.0.0", "@testing-library/user-event": "^14.5.0", "@types/node": "^24.10.1", "@types/react": "^19.2.5", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^5.1.1", "@vitest/coverage-v8": "^2.1.0", "autoprefixer": "^10.4.22", "eslint": "^9.39.1", "eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-react-refresh": "^0.4.24", "globals": "^16.5.0", "jsdom": "^25.0.0", "msw": "^2.6.0", "postcss": "^8.5.6", "tailwindcss": "^4.1.17", "typescript": "~5.9.3", "typescript-eslint": "^8.46.4", "vite": "^7.2.4", "vitest": "^2.1.0" } }