mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-19 13:21:46 +00:00
293506217e
Server-side notice registry with per-user condition evaluation (firstLogin, existingUserBeforeVersion, addonEnabled, dateWindow, role, custom). Notices are sorted by priority then severity, filtered against dismissals stored in a new user_notice_dismissals table, and served via GET /api/system-notices/active + POST /api/system-notices/:id/dismiss. Client renders notices through a host component that partitions by display type (modal / banner / toast). The modal renderer supports multi-page pagination with directional slide transitions, keyboard navigation, and correct dismiss-all semantics on CTA / X / ESC. Dismissals are optimistic with a single background retry. Includes 3.0.0 upgrade notices (v3-photos, v3-journey, v3-features), onboarding welcome modal, and full i18n coverage across 15 languages. The /journey route is addon-gated on both client and server. Also includes: unit + integration test suites, registry integrity test that validates action CTA IDs against client source, and technical documentation in docs/system-notices.md.
61 lines
1.7 KiB
JSON
61 lines
1.7 KiB
JSON
{
|
|
"name": "trek-client",
|
|
"version": "2.9.14",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite",
|
|
"prebuild": "node scripts/generate-icons.mjs",
|
|
"build": "vite build",
|
|
"preview": "vite preview",
|
|
"test": "vitest run",
|
|
"test:unit": "vitest run tests/unit",
|
|
"test:integration": "vitest run tests/integration src/**/*.test.{ts,tsx}",
|
|
"test:watch": "vitest",
|
|
"test:coverage": "vitest run --coverage"
|
|
},
|
|
"dependencies": {
|
|
"@react-pdf/renderer": "^4.3.2",
|
|
"axios": "^1.6.7",
|
|
"dexie": "^4.4.2",
|
|
"leaflet": "^1.9.4",
|
|
"lucide-react": "^0.344.0",
|
|
"marked": "^18.0.0",
|
|
"react": "^18.2.0",
|
|
"react-dom": "^18.2.0",
|
|
"react-dropzone": "^14.4.1",
|
|
"react-leaflet": "^4.2.1",
|
|
"react-leaflet-cluster": "^2.1.0",
|
|
"react-markdown": "^10.1.0",
|
|
"react-router-dom": "^6.22.2",
|
|
"react-window": "^2.2.7",
|
|
"rehype-sanitize": "^6.0.0",
|
|
"remark-breaks": "^4.0.0",
|
|
"remark-gfm": "^4.0.1",
|
|
"topojson-client": "^3.1.0",
|
|
"zustand": "^4.5.2"
|
|
},
|
|
"devDependencies": {
|
|
"@testing-library/jest-dom": "^6.9.1",
|
|
"@testing-library/react": "^16.3.2",
|
|
"@testing-library/user-event": "^14.6.1",
|
|
"@types/leaflet": "^1.9.8",
|
|
"@types/react": "^18.2.61",
|
|
"@types/react-dom": "^18.2.19",
|
|
"@types/react-window": "^1.8.8",
|
|
"@vitejs/plugin-react": "^4.2.1",
|
|
"@vitest/coverage-v8": "^3.2.4",
|
|
"autoprefixer": "^10.4.18",
|
|
"fake-indexeddb": "^6.2.5",
|
|
"jsdom": "^29.0.1",
|
|
"msw": "^2.13.0",
|
|
"postcss": "^8.4.35",
|
|
"sharp": "^0.33.0",
|
|
"tailwindcss": "^3.4.1",
|
|
"typescript": "^6.0.2",
|
|
"vite": "^5.1.4",
|
|
"vite-plugin-pwa": "^0.21.0",
|
|
"vitest": "^3.2.4"
|
|
}
|
|
}
|