Files
LingvAI/package.json
Malin 0799101da3 feat: add admin panel, Replicate AI translation, and document translation
- 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>
2026-03-10 07:43:54 +01:00

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"
]
}
}