- Admin panel (/admin) with JWT auth: configure Replicate API token, JigsawStack API key, model version, enable/disable AI translation, change admin password. Settings persisted in data/settings.json. - Replicate AI translation: POST /api/translate/replicate uses JigsawStack text-translate model via Replicate API. Main page switches to client-side AI translation when enabled. - Document translation tab: supports PDF, DOCX, XLSX, XLS, CSV. Excel/Word formatting fully preserved (SheetJS + JSZip XML manipulation). PDF uses pdf-parse extraction + pdf-lib reconstruction. Column selector UI for tabular data (per-sheet, All/None toggles). - Updated README with full implementation documentation. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
81 lines
2.0 KiB
JSON
81 lines
2.0 KiB
JSON
{
|
|
"name": "lingva-translate",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"scripts": {
|
|
"dev": "next dev",
|
|
"debug": "NODE_OPTIONS='--inspect' next dev",
|
|
"build": "next build",
|
|
"start": "next start --port ${PORT-3000}",
|
|
"test": "jest",
|
|
"cy:open": "cypress open",
|
|
"cy:run": "cypress run",
|
|
"renew-mock-data": "ts-node --skip-project mocks/renewData.ts"
|
|
},
|
|
"dependencies": {
|
|
"@chakra-ui/icons": "2.0.2",
|
|
"@chakra-ui/react": "2.2.1",
|
|
"@emotion/react": "^11",
|
|
"@emotion/styled": "^11",
|
|
"apollo-server-micro": "^2.25.2",
|
|
"formidable": "^3.5.1",
|
|
"framer-motion": "^6",
|
|
"graphql": "^15.8.0",
|
|
"jose": "^4.14.4",
|
|
"jszip": "^3.10.1",
|
|
"lingva-scraper": "1.1.0",
|
|
"next": "12.1.6",
|
|
"next-pwa": "^5.4.4",
|
|
"nextjs-cors": "^2.1.0",
|
|
"pdf-lib": "^1.17.1",
|
|
"pdf-parse": "^1.1.1",
|
|
"react": "18.2.0",
|
|
"react-dom": "18.2.0",
|
|
"react-hotkeys-hook": "^3.4.6",
|
|
"react-icons": "^4.4.0",
|
|
"xlsx": "^0.18.5"
|
|
},
|
|
"devDependencies": {
|
|
"@types/formidable": "^3.4.4",
|
|
"@testing-library/cypress": "^8.0.3",
|
|
"@testing-library/jest-dom": "^5.16.4",
|
|
"@testing-library/react": "^13.3.0",
|
|
"@testing-library/user-event": "^14.2.0",
|
|
"@types/jest": "^28.1.1",
|
|
"@types/node": "^17.0.43",
|
|
"@types/react": "^18.0.12",
|
|
"babel-eslint": "^10.1.0",
|
|
"cypress": "^10.1.0",
|
|
"eslint": "^8.17.0",
|
|
"eslint-config-next": "^12.1.6",
|
|
"eslint-plugin-cypress": "^2.12.1",
|
|
"jest": "^28.1.1",
|
|
"jest-environment-jsdom": "^28.1.1",
|
|
"ts-node": "^10.8.1",
|
|
"typescript": "^4.7.3",
|
|
"wait-on": "^6.0.1"
|
|
},
|
|
"eslintConfig": {
|
|
"extends": [
|
|
"next",
|
|
"plugin:cypress/recommended"
|
|
],
|
|
"overrides": [
|
|
{
|
|
"files": [
|
|
"cypress/integration/*.ts"
|
|
],
|
|
"rules": {
|
|
"testing-library/await-async-query": "off",
|
|
"testing-library/prefer-screen-queries": "off"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"babel": {
|
|
"presets": [
|
|
"next/babel"
|
|
]
|
|
}
|
|
}
|