From a7cd81fe8151870b3594bd6b058c11c7e26c6a67 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 17 Feb 2026 18:31:12 +0100 Subject: [PATCH] Initial release: TidyQuest v0.1.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TidyQuest is a self-hosted web application that gamifies household chores using RPG mechanics. Complete tasks, earn coins, unlock achievements, and compete with your family on the leaderboard. Features: - 🎯 Health-based task tracking with visual decay over time - 💰 Coin system with customizable rewards - 🔥 Daily/weekly streak tracking - 🏆 Family leaderboard (week/month/quarter/year) - 🎖️ Automatic achievement unlocking - 📅 Calendar view for upcoming tasks - 🌍 Multilingual support (EN/FR/DE/ES) - 📱 Optional Telegram notifications - 🏖️ Vacation mode (pause task decay) - 🐳 Docker deployment (single container) Tech Stack: - Frontend: React 19 + Vite + TypeScript - Backend: Node.js + Express + TypeScript - Database: SQLite3 with WAL mode - Auth: JWT + bcrypt - Deployment: Docker Compose Includes: - 8 room types with 60+ predefined tasks - 10 preset rewards - 12 achievement types - Complete API documentation - Security best practices guide - Comprehensive README with examples License: GNU Affero General Public License v3.0 (AGPL-3.0) This ensures TidyQuest remains free and open-source forever, preventing proprietary SaaS forks. Any modified hosted version must share source code. --- .env.example | 14 + .gitignore | 9 + API.md | 1053 ++++++ Dockerfile | 23 + LICENSE | 679 ++++ README.md | 287 ++ SECURITY.md | 167 + client/.gitignore | 24 + client/README.md | 73 + client/eslint.config.js | 23 + client/index.html | 13 + client/package-lock.json | 3315 +++++++++++++++++ client/package.json | 31 + client/public/favicon.svg | 4 + client/src/App.tsx | 382 ++ client/src/assets/fonts/Nunito-400.ttf | Bin 0 -> 125528 bytes client/src/assets/fonts/Nunito-500.ttf | Bin 0 -> 125652 bytes client/src/assets/fonts/Nunito-600.ttf | Bin 0 -> 125536 bytes client/src/assets/fonts/Nunito-700.ttf | Bin 0 -> 125464 bytes client/src/assets/fonts/Nunito-800.ttf | Bin 0 -> 125416 bytes client/src/assets/fonts/Nunito-900.ttf | Bin 0 -> 125376 bytes client/src/assets/fonts/nunito.css | 42 + client/src/components/icons/AvatarPresets.tsx | 260 ++ client/src/components/icons/NavIcons.tsx | 187 + client/src/components/icons/RoomIcons.tsx | 141 + client/src/components/icons/TaskIcons.tsx | 831 +++++ client/src/components/icons/UIIcons.tsx | 253 ++ client/src/components/layout/PageHeader.tsx | 60 + client/src/components/layout/Sidebar.tsx | 109 + client/src/components/pages/Achievements.tsx | 162 + client/src/components/pages/Calendar.tsx | 143 + client/src/components/pages/Dashboard.tsx | 716 ++++ client/src/components/pages/History.tsx | 81 + client/src/components/pages/Leaderboard.tsx | 111 + client/src/components/pages/Login.tsx | 119 + client/src/components/pages/Profile.tsx | 277 ++ client/src/components/pages/Register.tsx | 120 + client/src/components/pages/Rewards.tsx | 219 ++ client/src/components/pages/RoomDetail.tsx | 499 +++ client/src/components/pages/RoomsList.tsx | 541 +++ client/src/components/pages/Settings.tsx | 750 ++++ .../src/components/shared/ConfettiEffect.tsx | 56 + client/src/components/shared/EffortDots.tsx | 38 + client/src/components/shared/HealthBar.tsx | 60 + client/src/components/shared/RingGauge.tsx | 83 + client/src/components/shared/Toggle.tsx | 48 + client/src/components/shared/UserAvatar.tsx | 91 + client/src/hooks/useApi.ts | 165 + client/src/hooks/useAuth.ts | 66 + client/src/hooks/useTranslation.ts | 97 + client/src/i18n/de.json | 512 +++ client/src/i18n/en.json | 512 +++ client/src/i18n/es.json | 512 +++ client/src/i18n/fr.json | 512 +++ client/src/index.css | 224 ++ client/src/main.tsx | 10 + client/src/utils/colors.ts | 10 + client/src/utils/health.ts | 17 + client/tsconfig.app.json | 28 + client/tsconfig.json | 7 + client/tsconfig.node.json | 26 + client/vite.config.ts | 15 + docker-compose.yml | 14 + package-lock.json | 329 ++ package.json | 18 + server/package-lock.json | 2213 +++++++++++ server/package.json | 29 + server/src/database.ts | 341 ++ server/src/index.ts | 58 + server/src/middleware/auth.ts | 36 + server/src/routes/achievements.ts | 111 + server/src/routes/auth.ts | 64 + server/src/routes/dashboard.ts | 139 + server/src/routes/data.ts | 136 + server/src/routes/history.ts | 30 + server/src/routes/leaderboard.ts | 55 + server/src/routes/rewards.ts | 170 + server/src/routes/rooms.ts | 243 ++ server/src/routes/tasks.ts | 193 + server/src/routes/users.ts | 557 +++ server/src/utils/achievementNotifications.ts | 108 + server/src/utils/achievements.ts | 72 + server/src/utils/health.ts | 45 + server/src/utils/notifications.ts | 167 + server/src/utils/taskIcons.ts | 102 + server/tsconfig.json | 17 + 86 files changed, 20054 insertions(+) create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 API.md create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 README.md create mode 100644 SECURITY.md create mode 100644 client/.gitignore create mode 100644 client/README.md create mode 100644 client/eslint.config.js create mode 100644 client/index.html create mode 100644 client/package-lock.json create mode 100644 client/package.json create mode 100644 client/public/favicon.svg create mode 100644 client/src/App.tsx create mode 100644 client/src/assets/fonts/Nunito-400.ttf create mode 100644 client/src/assets/fonts/Nunito-500.ttf create mode 100644 client/src/assets/fonts/Nunito-600.ttf create mode 100644 client/src/assets/fonts/Nunito-700.ttf create mode 100644 client/src/assets/fonts/Nunito-800.ttf create mode 100644 client/src/assets/fonts/Nunito-900.ttf create mode 100644 client/src/assets/fonts/nunito.css create mode 100644 client/src/components/icons/AvatarPresets.tsx create mode 100644 client/src/components/icons/NavIcons.tsx create mode 100644 client/src/components/icons/RoomIcons.tsx create mode 100644 client/src/components/icons/TaskIcons.tsx create mode 100644 client/src/components/icons/UIIcons.tsx create mode 100644 client/src/components/layout/PageHeader.tsx create mode 100644 client/src/components/layout/Sidebar.tsx create mode 100644 client/src/components/pages/Achievements.tsx create mode 100644 client/src/components/pages/Calendar.tsx create mode 100644 client/src/components/pages/Dashboard.tsx create mode 100644 client/src/components/pages/History.tsx create mode 100644 client/src/components/pages/Leaderboard.tsx create mode 100644 client/src/components/pages/Login.tsx create mode 100644 client/src/components/pages/Profile.tsx create mode 100644 client/src/components/pages/Register.tsx create mode 100644 client/src/components/pages/Rewards.tsx create mode 100644 client/src/components/pages/RoomDetail.tsx create mode 100644 client/src/components/pages/RoomsList.tsx create mode 100644 client/src/components/pages/Settings.tsx create mode 100644 client/src/components/shared/ConfettiEffect.tsx create mode 100644 client/src/components/shared/EffortDots.tsx create mode 100644 client/src/components/shared/HealthBar.tsx create mode 100644 client/src/components/shared/RingGauge.tsx create mode 100644 client/src/components/shared/Toggle.tsx create mode 100644 client/src/components/shared/UserAvatar.tsx create mode 100644 client/src/hooks/useApi.ts create mode 100644 client/src/hooks/useAuth.ts create mode 100644 client/src/hooks/useTranslation.ts create mode 100644 client/src/i18n/de.json create mode 100644 client/src/i18n/en.json create mode 100644 client/src/i18n/es.json create mode 100644 client/src/i18n/fr.json create mode 100644 client/src/index.css create mode 100644 client/src/main.tsx create mode 100644 client/src/utils/colors.ts create mode 100644 client/src/utils/health.ts create mode 100644 client/tsconfig.app.json create mode 100644 client/tsconfig.json create mode 100644 client/tsconfig.node.json create mode 100644 client/vite.config.ts create mode 100644 docker-compose.yml create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 server/package-lock.json create mode 100644 server/package.json create mode 100644 server/src/database.ts create mode 100644 server/src/index.ts create mode 100644 server/src/middleware/auth.ts create mode 100644 server/src/routes/achievements.ts create mode 100644 server/src/routes/auth.ts create mode 100644 server/src/routes/dashboard.ts create mode 100644 server/src/routes/data.ts create mode 100644 server/src/routes/history.ts create mode 100644 server/src/routes/leaderboard.ts create mode 100644 server/src/routes/rewards.ts create mode 100644 server/src/routes/rooms.ts create mode 100644 server/src/routes/tasks.ts create mode 100644 server/src/routes/users.ts create mode 100644 server/src/utils/achievementNotifications.ts create mode 100644 server/src/utils/achievements.ts create mode 100644 server/src/utils/health.ts create mode 100644 server/src/utils/notifications.ts create mode 100644 server/src/utils/taskIcons.ts create mode 100644 server/tsconfig.json diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..8c7892c --- /dev/null +++ b/.env.example @@ -0,0 +1,14 @@ +# TidyQuest Environment Variables +# Copy this file to .env and fill in your values + +# Server Configuration +NODE_ENV=production +PORT=3000 + +# Security - REQUIRED in production +# Generate a secure random string (at least 32 characters) +# Example: openssl rand -base64 32 +JWT_SECRET=change-this-to-a-secure-random-string-min-32-chars + +# Database (handled by Docker volume, no config needed) +# Database file: ./data/tidyquest.db diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..df5b7ae --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +node_modules/ +dist/ +data/*.db +data/*.db-* +.env +*.log +.DS_Store +projet/ +PROGRESS.md diff --git a/API.md b/API.md new file mode 100644 index 0000000..6f1c3f0 --- /dev/null +++ b/API.md @@ -0,0 +1,1053 @@ +# 🌐 TidyQuest API Documentation + +Complete reference for all TidyQuest REST API endpoints. + +**Base URL**: `http://localhost:3020/api` + +**Authentication**: All endpoints (except `/auth/*`) require a JWT token in the `Authorization` header: + +```http +Authorization: Bearer +``` + +--- + +## 📑 Table of Contents + +- [Authentication](#authentication) +- [Rooms](#rooms) +- [Tasks](#tasks) +- [Dashboard](#dashboard) +- [Leaderboard](#leaderboard) +- [History](#history) +- [Users](#users) +- [Rewards](#rewards) +- [Achievements](#achievements) +- [Data Export/Import](#data-exportimport) +- [Error Responses](#error-responses) + +--- + +## 🔐 Authentication + +### Register + +Create a new user account. + +**Endpoint**: `POST /api/auth/register` + +**Request Body**: +```json +{ + "username": "john", + "password": "securepass123", + "displayName": "John Doe", + "avatarColor": "#F97316", + "language": "en" +} +``` + +**Response** (201): +```json +{ + "user": { + "id": 1, + "username": "john", + "displayName": "John Doe", + "role": "admin", + "avatarColor": "#F97316", + "avatarType": "letter", + "coins": 0, + "currentStreak": 0, + "language": "en", + "createdAt": "2026-02-17T10:30:00.000Z" + }, + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." +} +``` + +**cURL Example**: +```bash +curl -X POST http://localhost:3020/api/auth/register \ + -H "Content-Type: application/json" \ + -d '{ + "username": "john", + "password": "securepass123", + "displayName": "John Doe", + "avatarColor": "#F97316", + "language": "en" + }' +``` + +--- + +### Login + +Authenticate and receive a JWT token. + +**Endpoint**: `POST /api/auth/login` + +**Request Body**: +```json +{ + "username": "john", + "password": "securepass123" +} +``` + +**Response** (200): +```json +{ + "user": { ... }, + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." +} +``` + +**cURL Example**: +```bash +curl -X POST http://localhost:3020/api/auth/login \ + -H "Content-Type: application/json" \ + -d '{"username": "john", "password": "securepass123"}' +``` + +--- + +### Get Current User + +Get authenticated user's profile. + +**Endpoint**: `GET /api/auth/me` + +**Headers**: `Authorization: Bearer ` + +**Response** (200): +```json +{ + "id": 1, + "username": "john", + "displayName": "John Doe", + "role": "admin", + "avatarColor": "#F97316", + "avatarType": "letter", + "avatarPreset": null, + "avatarPhotoUrl": null, + "coins": 150, + "currentStreak": 7, + "goalCoins": 500, + "goalStartAt": "2026-02-01T00:00:00.000Z", + "goalEndAt": "2026-02-28T23:59:59.000Z", + "isVacationMode": false, + "language": "en", + "createdAt": "2026-01-15T08:00:00.000Z" +} +``` + +**cURL Example**: +```bash +curl -X GET http://localhost:3020/api/auth/me \ + -H "Authorization: Bearer " +``` + +--- + +## 🏠 Rooms + +### List All Rooms + +**Endpoint**: `GET /api/rooms` + +**Response** (200): +```json +[ + { + "id": 1, + "name": "Kitchen", + "roomType": "kitchen", + "color": "#FFE4C4", + "accentColor": "#FFA500", + "photoUrl": null, + "sortOrder": 1, + "health": 75, + "createdAt": "2026-02-10T12:00:00.000Z" + } +] +``` + +**cURL Example**: +```bash +curl -X GET http://localhost:3020/api/rooms \ + -H "Authorization: Bearer " +``` + +--- + +### Get Room by ID + +**Endpoint**: `GET /api/rooms/:id` + +**Response** (200): +```json +{ + "id": 1, + "name": "Kitchen", + "roomType": "kitchen", + "color": "#FFE4C4", + "accentColor": "#FFA500", + "photoUrl": null, + "sortOrder": 1, + "createdAt": "2026-02-10T12:00:00.000Z" +} +``` + +--- + +### Create Room + +**Endpoint**: `POST /api/rooms` (Admin only) + +**Request Body**: +```json +{ + "name": "Master Bedroom", + "roomType": "bedroom", + "color": "#E6F3FF", + "accentColor": "#4A90E2" +} +``` + +**Response** (201): +```json +{ + "id": 5, + "name": "Master Bedroom", + "roomType": "bedroom", + ... +} +``` + +**cURL Example**: +```bash +curl -X POST http://localhost:3020/api/rooms \ + -H "Authorization: Bearer " \ + -H "Content-Type: application/json" \ + -d '{ + "name": "Master Bedroom", + "roomType": "bedroom", + "color": "#E6F3FF", + "accentColor": "#4A90E2" + }' +``` + +--- + +### Update Room + +**Endpoint**: `PUT /api/rooms/:id` + +**Request Body**: +```json +{ + "name": "Main Kitchen", + "sortOrder": 2 +} +``` + +**Response** (200): +```json +{ + "id": 1, + "name": "Main Kitchen", + "sortOrder": 2, + ... +} +``` + +--- + +### Delete Room + +**Endpoint**: `DELETE /api/rooms/:id` (Admin only) + +**Response** (200): +```json +{ + "success": true +} +``` + +--- + +### Get Default Tasks for Room Type + +**Endpoint**: `GET /api/rooms/defaults/:roomType` + +Available room types: `kitchen`, `bedroom`, `bathroom`, `living`, `office`, `garage`, `laundry`, `garden` + +**Response** (200): +```json +[ + { + "name": "Wash Dishes", + "frequencyDays": 1, + "effort": 2, + "translationKey": "kitchen.wash_dishes", + "iconKey": "wash_dishes" + }, + { + "name": "Clean Fridge", + "frequencyDays": 14, + "effort": 3, + "translationKey": "kitchen.clean_fridge", + "iconKey": "fridge" + } +] +``` + +--- + +## ✅ Tasks + +### List Tasks for a Room + +**Endpoint**: `GET /api/rooms/:roomId/tasks` + +**Response** (200): +```json +[ + { + "id": 1, + "roomId": 1, + "name": "Wash Dishes", + "notes": "Use dishwasher for big loads", + "frequencyDays": 1, + "effort": 2, + "health": 85, + "lastCompletedAt": "2026-02-17T08:00:00.000Z", + "translationKey": "kitchen.wash_dishes", + "iconKey": "wash_dishes", + "createdAt": "2026-02-10T12:00:00.000Z" + } +] +``` + +**cURL Example**: +```bash +curl -X GET http://localhost:3020/api/rooms/1/tasks \ + -H "Authorization: Bearer " +``` + +--- + +### Create Task + +**Endpoint**: `POST /api/rooms/:roomId/tasks` (Admin only) + +**Request Body**: +```json +{ + "name": "Deep Clean Oven", + "notes": "Use oven cleaner spray", + "frequencyDays": 30, + "effort": 5, + "translationKey": "kitchen.deep_clean_oven", + "iconKey": "oven" +} +``` + +**Response** (201): +```json +{ + "id": 15, + "roomId": 1, + "name": "Deep Clean Oven", + ... +} +``` + +--- + +### Update Task + +**Endpoint**: `PUT /api/tasks/:id` (Admin only) + +**Request Body**: +```json +{ + "frequencyDays": 7, + "effort": 3 +} +``` + +**Response** (200): +```json +{ + "id": 15, + "frequencyDays": 7, + "effort": 3, + ... +} +``` + +--- + +### Delete Task + +**Endpoint**: `DELETE /api/tasks/:id` (Admin only) + +**Response** (200): +```json +{ + "success": true +} +``` + +--- + +### Complete Task + +Mark a task as completed, earn coins, update streak. + +**Endpoint**: `POST /api/tasks/:id/complete` + +**Response** (200): +```json +{ + "completion": { + "id": 123, + "taskId": 1, + "userId": 1, + "completedAt": "2026-02-17T14:30:00.000Z", + "coinsEarned": 10 + }, + "user": { + "id": 1, + "coins": 160, + "currentStreak": 8, + "lastActiveDate": "2026-02-17", + ... + }, + "newAchievements": [ + { + "id": "streak_7", + "name": "On Fire", + "description": "Complete tasks for 7 days in a row", + "icon": "🔥" + } + ] +} +``` + +**cURL Example**: +```bash +curl -X POST http://localhost:3020/api/tasks/1/complete \ + -H "Authorization: Bearer " +``` + +--- + +## 📊 Dashboard + +Get aggregated view: house health, today's quests, upcoming tasks, recent activity, goals, pending rewards. + +**Endpoint**: `GET /api/dashboard` + +**Response** (200): +```json +{ + "houseHealth": 78, + "todayQuests": { + "completed": 5, + "total": 12 + }, + "nextTasks": [ + { + "id": 3, + "name": "Vacuum Living Room", + "roomName": "Living Room", + "health": 45, + "effort": 3, + "dueIn": "2 hours" + } + ], + "recentActivity": [ + { + "id": 120, + "taskName": "Wash Dishes", + "userName": "John Doe", + "completedAt": "2026-02-17T14:00:00.000Z", + "coinsEarned": 10 + } + ], + "myGoals": [ + { + "id": 1, + "title": "February Goal", + "goalCoins": 500, + "currentCoins": 160, + "progress": 32, + "startAt": "2026-02-01T00:00:00.000Z", + "endAt": "2026-02-28T23:59:59.000Z" + } + ], + "pendingRewardRequests": 2 +} +``` + +**cURL Example**: +```bash +curl -X GET http://localhost:3020/api/dashboard \ + -H "Authorization: Bearer " +``` + +--- + +## 🏆 Leaderboard + +Get family rankings by period. + +**Endpoint**: `GET /api/leaderboard?period=` + +**Query Params**: +- `period`: `week`, `month`, `quarter`, or `year` + +**Response** (200): +```json +{ + "period": "week", + "leaderboard": [ + { + "userId": 1, + "displayName": "John Doe", + "avatarColor": "#F97316", + "avatarType": "letter", + "avatarPreset": null, + "avatarPhotoUrl": null, + "coinsEarned": 150, + "tasksCompleted": 25, + "rank": 1 + }, + { + "userId": 2, + "displayName": "Jane Doe", + "coinsEarned": 120, + "tasksCompleted": 20, + "rank": 2 + } + ] +} +``` + +**cURL Example**: +```bash +curl -X GET "http://localhost:3020/api/leaderboard?period=week" \ + -H "Authorization: Bearer " +``` + +--- + +## 📜 History + +Get paginated activity log of all task completions. + +**Endpoint**: `GET /api/history?limit=&offset=` + +**Query Params**: +- `limit`: Number of records (default: 20) +- `offset`: Skip N records (default: 0) + +**Response** (200): +```json +{ + "history": [ + { + "id": 120, + "taskName": "Wash Dishes", + "roomName": "Kitchen", + "userName": "John Doe", + "completedAt": "2026-02-17T14:00:00.000Z", + "coinsEarned": 10 + } + ], + "total": 500, + "limit": 20, + "offset": 0 +} +``` + +**cURL Example**: +```bash +curl -X GET "http://localhost:3020/api/history?limit=50&offset=100" \ + -H "Authorization: Bearer " +``` + +--- + +## 👥 Users + +### List All Users + +**Endpoint**: `GET /api/users` (Admin only) + +**Response** (200): +```json +[ + { + "id": 1, + "username": "john", + "displayName": "John Doe", + "role": "admin", + "coins": 160, + "currentStreak": 8, + ... + } +] +``` + +--- + +### Create User + +**Endpoint**: `POST /api/users` (Admin only) + +**Request Body**: +```json +{ + "username": "alice", + "password": "alicepass", + "displayName": "Alice", + "role": "child", + "avatarColor": "#FFB6C1", + "language": "en" +} +``` + +**Response** (201): +```json +{ + "id": 3, + "username": "alice", + "displayName": "Alice", + "role": "child", + ... +} +``` + +--- + +### Update User Profile + +**Endpoint**: `PUT /api/users/:id/profile` + +**Request Body**: +```json +{ + "displayName": "John Smith", + "avatarType": "character", + "avatarPreset": "cat", + "language": "fr" +} +``` + +**Response** (200): +```json +{ + "id": 1, + "displayName": "John Smith", + "avatarType": "character", + "avatarPreset": "cat", + ... +} +``` + +--- + +### Upload Avatar Photo + +**Endpoint**: `POST /api/users/:id/avatar-upload` + +**Headers**: +- `Content-Type: multipart/form-data` + +**Request Body**: +``` +FormData: + - avatar: (image/*, max 2MB) +``` + +**Response** (200): +```json +{ + "id": 1, + "avatarType": "photo", + "avatarPhotoUrl": "/api/avatars/user-1-1708176000000.jpg", + ... +} +``` + +**cURL Example**: +```bash +curl -X POST http://localhost:3020/api/users/1/avatar-upload \ + -H "Authorization: Bearer " \ + -F "avatar=@/path/to/photo.jpg" +``` + +--- + +### Update User Settings + +**Endpoint**: `PUT /api/users/:id/settings` (Admin only, self only) + +**Request Body**: +```json +{ + "isVacationMode": true, + "language": "es" +} +``` + +**Response** (200): +```json +{ + "id": 1, + "isVacationMode": true, + "vacationStartDate": "2026-02-17T15:00:00.000Z", + "language": "es", + ... +} +``` + +--- + +### Get Coins Configuration + +**Endpoint**: `GET /api/users/coins-config` + +**Response** (200): +```json +{ + "coinsByEffort": { + "1": 5, + "2": 10, + "3": 15, + "4": 20, + "5": 25 + } +} +``` + +--- + +### Update Coins Configuration + +**Endpoint**: `PUT /api/users/coins-config` (Admin only) + +**Request Body**: +```json +{ + "coinsByEffort": { + "1": 10, + "2": 20, + "3": 30, + "4": 40, + "5": 50 + } +} +``` + +Or reset to defaults: +```json +{ + "useDefault": true +} +``` + +**Response** (200): +```json +{ + "coinsByEffort": { ... } +} +``` + +--- + +## 🎁 Rewards + +### List Rewards + +**Endpoint**: `GET /api/rewards` + +**Response** (200): +```json +{ + "rewards": [ + { + "id": 1, + "title": "Movie Night Pick", + "description": "Choose the family movie", + "costCoins": 40, + "isActive": true, + "isPreset": true, + "createdBy": null, + "createdAt": "2026-02-10T00:00:00.000Z" + } + ], + "myRedemptions": [ + { + "id": 10, + "rewardId": 1, + "rewardTitle": "Movie Night Pick", + "costCoins": 40, + "status": "requested", + "redeemedAt": "2026-02-17T18:00:00.000Z" + } + ] +} +``` + +--- + +### Create Reward + +**Endpoint**: `POST /api/rewards` (Admin only) + +**Request Body**: +```json +{ + "title": "Extra Dessert", + "description": "Second serving at dinner", + "costCoins": 25 +} +``` + +**Response** (201): +```json +{ + "id": 8, + "title": "Extra Dessert", + "costCoins": 25, + "isActive": true, + "createdBy": 1, + ... +} +``` + +--- + +### Redeem Reward + +**Endpoint**: `POST /api/rewards/:id/redeem` + +**Response** (200): +```json +{ + "redemption": { + "id": 12, + "rewardId": 1, + "userId": 2, + "costCoins": 40, + "status": "requested", + "redeemedAt": "2026-02-17T19:00:00.000Z" + }, + "newCoinsBalance": 110 +} +``` + +**Errors**: +- `400`: Insufficient coins +- `404`: Reward not found or inactive + +--- + +### Approve/Reject Redemption + +**Endpoint**: `PUT /api/rewards/redemptions/:id` (Admin only) + +**Request Body**: +```json +{ + "status": "approved" +} +``` + +Status options: `approved`, `rejected` + +**Response** (200): +```json +{ + "id": 12, + "status": "approved", + ... +} +``` + +**Note**: If rejected, coins are refunded to user. + +--- + +### Cancel Redemption + +**Endpoint**: `POST /api/rewards/redemptions/:id/cancel` (Self only) + +**Response** (200): +```json +{ + "id": 12, + "status": "cancelled", + ... +} +``` + +**Note**: Coins are refunded. + +--- + +## 🎖️ Achievements + +### Get Achievements + +**Endpoint**: `GET /api/achievements` + +**Response** (200): +```json +{ + "myAchievements": [ + { + "id": "tasks_10", + "name": "Cleaner", + "description": "Complete 10 tasks", + "icon": "✨", + "unlockedAt": "2026-02-15T10:00:00.000Z" + } + ], + "allAchievements": [ + { + "id": "tasks_1", + "name": "Starter", + "description": "Complete your first task", + "icon": "🌟", + "unlocked": true + }, + { + "id": "streak_30", + "name": "Legend", + "description": "Maintain a 30-day streak", + "icon": "👑", + "unlocked": false + } + ] +} +``` + +**Note**: `allAchievements` only returned for admins. + +**cURL Example**: +```bash +curl -X GET http://localhost:3020/api/achievements \ + -H "Authorization: Bearer " +``` + +--- + +## 📤 Data Export/Import + +### Export Data + +**Endpoint**: `GET /api/data/export` (Admin only) + +**Response** (200): +```json +{ + "version": "1.0", + "exportedAt": "2026-02-17T20:00:00.000Z", + "users": [...], + "rooms": [...], + "tasks": [...], + "taskCompletions": [...], + "rewards": [...], + "rewardRedemptions": [...], + "appSettings": [...] +} +``` + +**cURL Example**: +```bash +curl -X GET http://localhost:3020/api/data/export \ + -H "Authorization: Bearer " \ + -o backup.json +``` + +--- + +### Import Data + +**Endpoint**: `POST /api/data/import` (Admin only) + +**Request Body**: Full JSON export (same structure as export) + +**Response** (200): +```json +{ + "success": true, + "imported": { + "users": 3, + "rooms": 5, + "tasks": 42, + "taskCompletions": 250, + "rewards": 10, + "rewardRedemptions": 15 + } +} +``` + +**Warning**: This will CLEAR and REPLACE all data. + +**cURL Example**: +```bash +curl -X POST http://localhost:3020/api/data/import \ + -H "Authorization: Bearer " \ + -H "Content-Type: application/json" \ + -d @backup.json +``` + +--- + +## ❌ Error Responses + +All errors follow this format: + +```json +{ + "error": "Descriptive error message" +} +``` + +**Common HTTP Status Codes**: + +| Code | Meaning | Example | +|------|---------|---------| +| 400 | Bad Request | Missing required field | +| 401 | Unauthorized | Invalid or missing JWT token | +| 403 | Forbidden | Not admin or not owner | +| 404 | Not Found | Resource doesn't exist | +| 409 | Conflict | Username already exists | +| 500 | Server Error | Database or internal error | + +--- + +## 🔔 Rate Limiting + +Currently **no rate limiting** is implemented. For production deployments, consider using a reverse proxy (Nginx, Caddy) with rate limiting configured. + +--- + +## 📝 Notes + +- All timestamps are in ISO 8601 format (UTC) +- JWT tokens expire after **30 days** +- Pagination uses `limit` and `offset` query parameters +- File uploads (avatars) limited to **2MB** +- Accepted image types: `image/*` (MIME type check) + +--- + +**Need help?** Open an issue on [GitHub Issues](https://github.com/mellow-fox/TidyQuest/issues) diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4645b87 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,23 @@ +FROM node:22-alpine AS frontend-build +WORKDIR /app/client +COPY client/package*.json ./ +RUN npm ci +COPY client/ ./ +RUN npm run build + +FROM node:22-alpine AS server-build +WORKDIR /app/server +COPY server/package*.json ./ +RUN npm ci +COPY server/ ./ +RUN npx tsc + +FROM node:22-alpine +WORKDIR /app +COPY server/package*.json ./server/ +RUN cd server && npm ci --omit=dev +COPY --from=server-build /app/server/dist ./server/dist +COPY --from=frontend-build /app/client/dist ./client/dist +RUN mkdir -p /app/data +EXPOSE 3000 +CMD ["node", "server/dist/index.js"] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..cec57c8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,679 @@ +TidyQuest - Household Chore Gamification App +Copyright (C) 2026 TidyQuest Contributors + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . + +================================================================================ + + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..a8220b5 --- /dev/null +++ b/README.md @@ -0,0 +1,287 @@ +# 🏠 TidyQuest + +> Transform household chores into an epic family adventure + +**TidyQuest** is a self-hosted web application that gamifies housework using RPG mechanics. Complete tasks, earn coins, unlock achievements, and compete with your family on the leaderboard. + +![Version](https://img.shields.io/badge/version-0.1.0-orange.svg) +![Docker](https://img.shields.io/badge/docker-ready-brightgreen.svg) +![License](https://img.shields.io/badge/license-AGPL--3.0-blue.svg) + +--- + +## ✨ What is TidyQuest? + +TidyQuest turns boring chores into quests: +- **🎯 Health Bars**: Each task has a visual health indicator that decays over time +- **💰 Coins & Rewards**: Earn coins by completing tasks, redeem for family rewards +- **🔥 Streaks**: Build daily/weekly streaks to stay motivated +- **🏆 Leaderboard**: Compete with family members for top position +- **🎖️ Achievements**: Unlock badges for milestones (100 tasks, 30-day streak, etc.) +- **📅 Calendar View**: See upcoming due dates at a glance +- **🌍 Multilingual**: English, French, German, Spanish +- **📱 Telegram Notifications**: Optional reminders for due tasks and rewards + +Perfect for families who want to: +- Make chores fun for kids +- Track household responsibilities +- Encourage teamwork with gamification +- Build consistent cleaning habits + +--- + +## 🚀 Quick Start + +### Prerequisites +- Docker & Docker Compose +- 100MB disk space +- Port 3020 available + +### Installation (3 steps) + +1. **Clone the repository** + ```bash + git clone https://github.com/mellow-fox/TidyQuest.git + cd TidyQuest + ``` + +2. **Configure environment** + ```bash + cp .env.example .env + # Edit .env and set a secure JWT_SECRET + # Generate one: openssl rand -base64 32 + ``` + +3. **Launch with Docker** + ```bash + docker compose up -d --build + ``` + + Access at **http://localhost:3020** + +### First Login +On first launch, the database is empty. Create an admin account via the **Register** page. + +--- + +## 🎮 Features + +### For Everyone +- ✅ **Complete Tasks**: Mark chores as done, earn coins +- 💎 **Redeem Rewards**: Request rewards like "Movie Night Pick" or "Extra Game Time" +- 📊 **Track Progress**: See your current streak, coins, and achievements +- 🏠 **Room Management**: Organize tasks by room (Kitchen, Bedroom, Bathroom, etc.) + +### For Admins +- 👥 **User Management**: Create family members (admin/member/child roles) +- 📝 **Task CRUD**: Create, edit, delete tasks with custom frequencies (1-365 days) +- 🎁 **Reward System**: Approve/reject reward requests, manage catalog +- ⚙️ **Global Settings**: Configure coins-per-effort, Telegram notifications +- 🏖️ **Vacation Mode**: Pause task health decay during family vacations +- 📤 **Backup/Restore**: Export full database as JSON + +### Built-in Defaults +- **8 Room Types**: Kitchen, Bedroom, Bathroom, Living Room, Office, Garage, Laundry, Garden +- **60+ Predefined Tasks**: Common household chores with realistic frequencies +- **10 Preset Rewards**: Movie night, ice cream, stay up late, game time, etc. +- **12 Achievements**: Unlocked automatically based on activity + +--- + +## 🛠️ Tech Stack + +| Layer | Technology | +|-------|-----------| +| **Frontend** | React 19 + Vite + TypeScript | +| **Backend** | Node.js + Express + TypeScript | +| **Database** | SQLite3 (with WAL mode) | +| **Auth** | JWT + bcrypt | +| **Deployment** | Docker (single container, ~300MB) | +| **Routing** | React Router v7 | +| **Styling** | Custom CSS (no framework) | + +**Zero external dependencies** for core functionality. Optional Telegram integration for notifications. + +--- + +## 📂 Project Structure + +``` +TidyQuest/ +├── client/ # React frontend +│ ├── src/ +│ │ ├── components/ # UI components +│ │ ├── hooks/ # useAuth, useApi, useTranslation +│ │ ├── i18n/ # Translation files (EN/FR/DE/ES) +│ │ └── App.tsx +│ └── package.json +├── server/ # Express backend +│ ├── src/ +│ │ ├── routes/ # API endpoints +│ │ ├── middleware/ # JWT auth +│ │ ├── utils/ # Health calculation, notifications +│ │ └── database.ts # SQLite setup +│ └── package.json +├── data/ # Persistent storage (Docker volume) +│ ├── tidyquest.db # SQLite database +│ └── avatars/ # User-uploaded photos +├── Dockerfile # Multi-stage build +├── docker-compose.yml +├── .env.example # Configuration template +├── SECURITY.md # Security best practices +└── API.md # API documentation +``` + +--- + +## 🔧 Configuration + +### Environment Variables + +See `.env.example` for all options. Key variables: + +| Variable | Required | Description | +|----------|----------|-------------| +| `JWT_SECRET` | **Yes** (prod) | Secret for signing JWT tokens (min 32 chars) | +| `NODE_ENV` | No | `production` or `development` | +| `PORT` | No | Server port (default: 3000) | + +### Telegram Notifications (Optional) + +1. Create a Telegram bot via [@BotFather](https://t.me/botfather) +2. Get your chat ID via [@userinfobot](https://t.me/userinfobot) +3. Configure in app Settings page (admin only) + +Notification types: +- 🕐 **Daily Due Tasks**: Sent at configured time (default 09:00) +- 🎁 **Reward Requests**: Notify admin when child requests reward +- 🎖️ **Achievements**: Celebrate unlocked achievements + +--- + +## 📖 Usage + +### Creating Rooms +1. Go to **Rooms** page +2. Click **Add Room** +3. Select room type (e.g., Kitchen) +4. Choose from 60+ default tasks or create custom ones + +### Completing Tasks +1. Open a room +2. Click ✅ on a task row +3. Earn coins (5-25 based on effort level 1-5) +4. Health bar resets to 100% + +### Redeeming Rewards +1. Go to **Rewards** page +2. Click **Redeem** on a reward (coins deducted immediately) +3. Admin approves/rejects request +4. If rejected, coins are refunded + +### Vacation Mode +Admin can enable in **Settings** to pause all health decay. Useful for family trips. + +--- + +## 🔒 Security + +**Before exposing publicly**, review `SECURITY.md` for: +- Setting strong JWT_SECRET +- Using HTTPS reverse proxy (Caddy/Nginx) +- Database backup strategy +- Telegram token protection + +⚠️ **Never expose TidyQuest directly to the internet over HTTP**. + +--- + +## 🔄 Updating + +```bash +cd TidyQuest +git pull +docker compose down +docker compose up -d --build +``` + +Your data persists in the `./data` volume. + +--- + +## 🗄️ Backup & Restore + +### Manual Backup (via UI) +Admin → Settings → Export Data → Download JSON + +### File System Backup +```bash +cp data/tidyquest.db backups/tidyquest-$(date +%Y%m%d).db +``` + +### Restore +Admin → Settings → Import Data → Upload JSON + +--- + +## 🌐 API Documentation + +See `API.md` for full endpoint documentation with examples. + +Quick overview: +- **Auth**: `/api/auth/register`, `/api/auth/login` +- **Rooms**: `/api/rooms` (CRUD) +- **Tasks**: `/api/rooms/:id/tasks` (CRUD + complete) +- **Dashboard**: `/api/dashboard` (aggregated view) +- **Leaderboard**: `/api/leaderboard?period=week|month|quarter|year` +- **Rewards**: `/api/rewards` (CRUD + redeem) +- **Achievements**: `/api/achievements` + +All endpoints require `Authorization: Bearer ` (except auth routes). + +--- + +## 🤝 Contributing + +Contributions are welcome! Please: +1. Fork the repository +2. Create a feature branch (`git checkout -b feature/amazing-feature`) +3. Commit your changes (`git commit -m 'Add amazing feature'`) +4. Push to the branch (`git push origin feature/amazing-feature`) +5. Open a Pull Request + +--- + +## 📜 License + +This project is licensed under the **GNU Affero General Public License v3.0 (AGPL-3.0)**. + +**What this means:** +- ✅ You can use, modify, and distribute TidyQuest freely +- ✅ You can run it commercially (for your business/family) +- ⚠️ If you modify and **host** TidyQuest as a service (even privately), you **must** share your source code +- ⚠️ Any derivative work must also be licensed under AGPL-3.0 + +**Why AGPL?** To ensure TidyQuest remains free and open-source forever, preventing proprietary SaaS forks. + +See the `LICENSE` file for full details. + +--- + +## 🙏 Acknowledgments + +- Inspired by RPG mechanics from classic games +- Built with love for families who want to make chores fun +- Uses [Nunito](https://fonts.google.com/specimen/Nunito) font (bundled locally) + +--- + +## 📞 Support + +- 🐛 **Bug Reports**: [GitHub Issues](https://github.com/mellow-fox/TidyQuest/issues) +- 💬 **Discussions**: [GitHub Discussions](https://github.com/mellow-fox/TidyQuest/discussions) +- 🔒 **Security Issues**: See `SECURITY.md` for responsible disclosure + +--- + +Made with ❤️ for families everywhere diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..c947b90 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,167 @@ +# Security Policy + +## 🔒 Supported Versions + +| Version | Supported | +| ------- | ------------------ | +| 0.1.x | :white_check_mark: | + +--- + +## 🛡️ Security Best Practices + +### Before Deploying to Production + +#### 1. **Set a Strong JWT Secret** + +**⚠️ CRITICAL**: The JWT secret is used to sign authentication tokens. A weak or default secret compromises all user sessions. + +**How to set it:** +```bash +# Generate a secure random secret +openssl rand -base64 32 + +# Add to .env file +echo "JWT_SECRET=" > .env +``` + +**In docker-compose.yml:** +```yaml +environment: + - JWT_SECRET=${JWT_SECRET} +``` + +**Never commit your `.env` file to version control.** + +--- + +#### 2. **Use HTTPS with a Reverse Proxy** + +TidyQuest should **never** be exposed directly to the internet over HTTP. + +**Recommended setup:** +- Use Caddy, Nginx, or Traefik as a reverse proxy +- Obtain a valid TLS certificate (Let's Encrypt) +- Forward port 443 → TidyQuest container port 3000 + +**Example with Caddy:** +``` +tidyquest.yourdomain.com { + reverse_proxy localhost:3020 +} +``` + +--- + +#### 3. **Telegram Bot Token Protection** + +**⚠️ Known Risk**: Telegram bot tokens are stored **unencrypted** in the SQLite database. + +**Mitigation:** +- Restrict file system access to the `./data/` directory +- Use proper file permissions: `chmod 600 data/tidyquest.db` +- Never expose the database file publicly +- Regularly back up and encrypt database backups + +**Future improvement (planned for v0.2)**: Encrypt sensitive settings using AES-256. + +--- + +#### 4. **Database Backups** + +**Location**: `./data/tidyquest.db` + +**Backup strategy:** +```bash +# Manual backup +cp data/tidyquest.db backups/tidyquest-$(date +%Y%m%d).db + +# Automated daily backup (crontab) +0 3 * * * cd /path/to/tidyquest && cp data/tidyquest.db backups/tidyquest-$(date +\%Y\%m\%d).db +``` + +**Encrypt backups before storing offsite:** +```bash +gpg -c backups/tidyquest-20260217.db +``` + +--- + +#### 5. **User Avatar Uploads** + +**Current validation:** +- MIME type check: only `image/*` allowed +- File size limit: 2MB + +**Additional hardening (recommended):** +- Serve avatars from a separate domain/subdomain +- Implement Content-Security-Policy headers +- Consider using image processing library to re-encode uploads + +--- + +#### 6. **Network Exposure** + +**Default setup (Docker Compose):** +- Port `3020:3000` is exposed on all interfaces (`0.0.0.0`) + +**For local-only access**, bind to localhost: +```yaml +ports: + - "127.0.0.1:3020:3000" +``` + +**For VPN/LAN access**, ensure firewall rules are configured. + +--- + +## 🚨 Reporting a Vulnerability + +If you discover a security vulnerability in TidyQuest, please: + +1. **Do NOT open a public GitHub issue** +2. Email the maintainer directly (see GitHub profile) +3. Include: + - Description of the vulnerability + - Steps to reproduce + - Potential impact + - Suggested fix (if applicable) + +**Response time**: We aim to acknowledge reports within 48 hours and provide a fix within 7 days for critical issues. + +--- + +## 📋 Security Checklist Before Going Public + +- [ ] JWT_SECRET set via environment variable (not default value) +- [ ] HTTPS reverse proxy configured +- [ ] Database file permissions restricted (`chmod 600`) +- [ ] Regular backup strategy in place +- [ ] Firewall rules configured (only allow necessary ports) +- [ ] Docker image updated to latest version +- [ ] OS and dependencies up to date +- [ ] Telegram bot token kept secret (if using notifications) +- [ ] `.env` file in `.gitignore` (verified not committed) + +--- + +## 🔐 Authentication & Session Management + +- **Algorithm**: JWT (JSON Web Tokens) +- **Token expiry**: 30 days +- **Password hashing**: bcrypt (10 rounds) +- **Authorization**: Role-based (admin, member, child) + +**Session invalidation**: Currently, tokens remain valid until expiry. Manual revocation is not implemented (planned for v0.2). + +--- + +## 📚 Additional Resources + +- [OWASP Top 10](https://owasp.org/www-project-top-ten/) +- [Docker Security Best Practices](https://docs.docker.com/engine/security/) +- [SQLite Security Considerations](https://www.sqlite.org/security.html) + +--- + +**Last updated**: 2026-02-17 diff --git a/client/.gitignore b/client/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/client/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/client/README.md b/client/README.md new file mode 100644 index 0000000..d2e7761 --- /dev/null +++ b/client/README.md @@ -0,0 +1,73 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: + +```js +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + + // Remove tseslint.configs.recommended and replace with this + tseslint.configs.recommendedTypeChecked, + // Alternatively, use this for stricter rules + tseslint.configs.strictTypeChecked, + // Optionally, add this for stylistic rules + tseslint.configs.stylisticTypeChecked, + + // Other configs... + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` + +You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: + +```js +// eslint.config.js +import reactX from 'eslint-plugin-react-x' +import reactDom from 'eslint-plugin-react-dom' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + // Enable lint rules for React + reactX.configs['recommended-typescript'], + // Enable lint rules for React DOM + reactDom.configs.recommended, + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` diff --git a/client/eslint.config.js b/client/eslint.config.js new file mode 100644 index 0000000..5e6b472 --- /dev/null +++ b/client/eslint.config.js @@ -0,0 +1,23 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + reactHooks.configs.flat.recommended, + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + }, +]) diff --git a/client/index.html b/client/index.html new file mode 100644 index 0000000..060b4d0 --- /dev/null +++ b/client/index.html @@ -0,0 +1,13 @@ + + + + + + + TidyQuest + + +
+ + + diff --git a/client/package-lock.json b/client/package-lock.json new file mode 100644 index 0000000..3b2fa4b --- /dev/null +++ b/client/package-lock.json @@ -0,0 +1,3315 @@ +{ + "name": "client", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "client", + "version": "0.0.0", + "dependencies": { + "react": "^19.2.0", + "react-dom": "^19.2.0", + "react-router-dom": "^7.13.0" + }, + "devDependencies": { + "@eslint/js": "^9.39.1", + "@types/node": "^24.10.1", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", + "eslint": "^9.39.1", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.4.24", + "globals": "^16.5.0", + "typescript": "~5.9.3", + "typescript-eslint": "^8.48.0", + "vite": "^7.3.1" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz", + "integrity": "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz", + "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz", + "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz", + "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz", + "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz", + "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz", + "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz", + "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz", + "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz", + "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz", + "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz", + "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz", + "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz", + "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz", + "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz", + "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz", + "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz", + "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz", + "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz", + "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz", + "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz", + "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz", + "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz", + "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz", + "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz", + "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.10.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.13.tgz", + "integrity": "sha512-oH72nZRfDv9lADUBSo104Aq7gPHpQZc4BTx38r9xf9pg5LfP6EzSyH2n7qFmmxRQXh7YlUXODcYsg6PuTDSxGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/react": { + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.55.0.tgz", + "integrity": "sha512-1y/MVSz0NglV1ijHC8OT49mPJ4qhPYjiK08YUQVbIOyu+5k862LKUHFkpKHWu//zmr7hDR2rhwUm6gnCGNmGBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.55.0", + "@typescript-eslint/type-utils": "8.55.0", + "@typescript-eslint/utils": "8.55.0", + "@typescript-eslint/visitor-keys": "8.55.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.55.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.55.0.tgz", + "integrity": "sha512-4z2nCSBfVIMnbuu8uinj+f0o4qOeggYJLbjpPHka3KH1om7e+H9yLKTYgksTaHcGco+NClhhY2vyO3HsMH1RGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.55.0", + "@typescript-eslint/types": "8.55.0", + "@typescript-eslint/typescript-estree": "8.55.0", + "@typescript-eslint/visitor-keys": "8.55.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.55.0.tgz", + "integrity": "sha512-zRcVVPFUYWa3kNnjaZGXSu3xkKV1zXy8M4nO/pElzQhFweb7PPtluDLQtKArEOGmjXoRjnUZ29NjOiF0eCDkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.55.0", + "@typescript-eslint/types": "^8.55.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.55.0.tgz", + "integrity": "sha512-fVu5Omrd3jeqeQLiB9f1YsuK/iHFOwb04bCtY4BSCLgjNbOD33ZdV6KyEqplHr+IlpgT0QTZ/iJ+wT7hvTx49Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.55.0", + "@typescript-eslint/visitor-keys": "8.55.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.55.0.tgz", + "integrity": "sha512-1R9cXqY7RQd7WuqSN47PK9EDpgFUK3VqdmbYrvWJZYDd0cavROGn+74ktWBlmJ13NXUQKlZ/iAEQHI/V0kKe0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.55.0.tgz", + "integrity": "sha512-x1iH2unH4qAt6I37I2CGlsNs+B9WGxurP2uyZLRz6UJoZWDBx9cJL1xVN/FiOmHEONEg6RIufdvyT0TEYIgC5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.55.0", + "@typescript-eslint/typescript-estree": "8.55.0", + "@typescript-eslint/utils": "8.55.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.55.0.tgz", + "integrity": "sha512-ujT0Je8GI5BJWi+/mMoR0wxwVEQaxM+pi30xuMiJETlX80OPovb2p9E8ss87gnSVtYXtJoU9U1Cowcr6w2FE0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.55.0.tgz", + "integrity": "sha512-EwrH67bSWdx/3aRQhCoxDaHM+CrZjotc2UCCpEDVqfCE+7OjKAGWNY2HsCSTEVvWH2clYQK8pdeLp42EVs+xQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.55.0", + "@typescript-eslint/tsconfig-utils": "8.55.0", + "@typescript-eslint/types": "8.55.0", + "@typescript-eslint/visitor-keys": "8.55.0", + "debug": "^4.4.3", + "minimatch": "^9.0.5", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.55.0.tgz", + "integrity": "sha512-BqZEsnPGdYpgyEIkDC1BadNY8oMwckftxBT+C8W0g1iKPdeqKZBtTfnvcq0nf60u7MkjFO8RBvpRGZBPw4L2ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.55.0", + "@typescript-eslint/types": "8.55.0", + "@typescript-eslint/typescript-estree": "8.55.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.55.0.tgz", + "integrity": "sha512-AxNRwEie8Nn4eFS1FzDMJWIISMGoXMb037sgCBJ3UR6o0fQTzr2tqN9WT+DkWJPhIdQCfV7T6D387566VtnCJA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.55.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.4.tgz", + "integrity": "sha512-VIcFLdRi/VYRU8OL/puL7QXMYafHmqOnwTZY50U1JPlCNj30PxCMx65c494b1K9be9hX83KVt0+gTEwTWLqToA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.29.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-rc.3", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.18.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001770", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001770.tgz", + "integrity": "sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", + "dev": true, + "license": "ISC" + }, + "node_modules/esbuild": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.3", + "@esbuild/android-arm": "0.27.3", + "@esbuild/android-arm64": "0.27.3", + "@esbuild/android-x64": "0.27.3", + "@esbuild/darwin-arm64": "0.27.3", + "@esbuild/darwin-x64": "0.27.3", + "@esbuild/freebsd-arm64": "0.27.3", + "@esbuild/freebsd-x64": "0.27.3", + "@esbuild/linux-arm": "0.27.3", + "@esbuild/linux-arm64": "0.27.3", + "@esbuild/linux-ia32": "0.27.3", + "@esbuild/linux-loong64": "0.27.3", + "@esbuild/linux-mips64el": "0.27.3", + "@esbuild/linux-ppc64": "0.27.3", + "@esbuild/linux-riscv64": "0.27.3", + "@esbuild/linux-s390x": "0.27.3", + "@esbuild/linux-x64": "0.27.3", + "@esbuild/netbsd-arm64": "0.27.3", + "@esbuild/netbsd-x64": "0.27.3", + "@esbuild/openbsd-arm64": "0.27.3", + "@esbuild/openbsd-x64": "0.27.3", + "@esbuild/openharmony-arm64": "0.27.3", + "@esbuild/sunos-x64": "0.27.3", + "@esbuild/win32-arm64": "0.27.3", + "@esbuild/win32-ia32": "0.27.3", + "@esbuild/win32-x64": "0.27.3" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.2", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", + "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.26", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.26.tgz", + "integrity": "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/react": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.4" + } + }, + "node_modules/react-refresh": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.13.0.tgz", + "integrity": "sha512-PZgus8ETambRT17BUm/LL8lX3Of+oiLaPuVTRH3l1eLvSPpKO3AvhAEb5N7ihAFZQrYDqkvvWfFh9p0z9VsjLw==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.13.0.tgz", + "integrity": "sha512-5CO/l5Yahi2SKC6rGZ+HDEjpjkGaG/ncEP7eWFTvFxbHP8yeeI0PxTDjimtpXYlR3b3i9/WIL4VJttPrESIf2g==", + "license": "MIT", + "dependencies": { + "react-router": "7.13.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/rollup": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz", + "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.57.1", + "@rollup/rollup-android-arm64": "4.57.1", + "@rollup/rollup-darwin-arm64": "4.57.1", + "@rollup/rollup-darwin-x64": "4.57.1", + "@rollup/rollup-freebsd-arm64": "4.57.1", + "@rollup/rollup-freebsd-x64": "4.57.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", + "@rollup/rollup-linux-arm-musleabihf": "4.57.1", + "@rollup/rollup-linux-arm64-gnu": "4.57.1", + "@rollup/rollup-linux-arm64-musl": "4.57.1", + "@rollup/rollup-linux-loong64-gnu": "4.57.1", + "@rollup/rollup-linux-loong64-musl": "4.57.1", + "@rollup/rollup-linux-ppc64-gnu": "4.57.1", + "@rollup/rollup-linux-ppc64-musl": "4.57.1", + "@rollup/rollup-linux-riscv64-gnu": "4.57.1", + "@rollup/rollup-linux-riscv64-musl": "4.57.1", + "@rollup/rollup-linux-s390x-gnu": "4.57.1", + "@rollup/rollup-linux-x64-gnu": "4.57.1", + "@rollup/rollup-linux-x64-musl": "4.57.1", + "@rollup/rollup-openbsd-x64": "4.57.1", + "@rollup/rollup-openharmony-arm64": "4.57.1", + "@rollup/rollup-win32-arm64-msvc": "4.57.1", + "@rollup/rollup-win32-ia32-msvc": "4.57.1", + "@rollup/rollup-win32-x64-gnu": "4.57.1", + "@rollup/rollup-win32-x64-msvc": "4.57.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/ts-api-utils": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.55.0.tgz", + "integrity": "sha512-HE4wj+r5lmDVS9gdaN0/+iqNvPZwGfnJ5lZuz7s5vLlg9ODw0bIiiETaios9LvFI1U94/VBXGm3CB2Y5cNFMpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.55.0", + "@typescript-eslint/parser": "8.55.0", + "@typescript-eslint/typescript-estree": "8.55.0", + "@typescript-eslint/utils": "8.55.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + } + } +} diff --git a/client/package.json b/client/package.json new file mode 100644 index 0000000..8eb8cd7 --- /dev/null +++ b/client/package.json @@ -0,0 +1,31 @@ +{ + "name": "client", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "react": "^19.2.0", + "react-dom": "^19.2.0", + "react-router-dom": "^7.13.0" + }, + "devDependencies": { + "@eslint/js": "^9.39.1", + "@types/node": "^24.10.1", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", + "eslint": "^9.39.1", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.4.24", + "globals": "^16.5.0", + "typescript": "~5.9.3", + "typescript-eslint": "^8.48.0", + "vite": "^7.3.1" + } +} diff --git a/client/public/favicon.svg b/client/public/favicon.svg new file mode 100644 index 0000000..f6ae229 --- /dev/null +++ b/client/public/favicon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/client/src/App.tsx b/client/src/App.tsx new file mode 100644 index 0000000..6e1f8e9 --- /dev/null +++ b/client/src/App.tsx @@ -0,0 +1,382 @@ +import { useState, useEffect, useCallback } from 'react'; +import { BrowserRouter, Routes, Route, useNavigate, useLocation, Navigate } from 'react-router-dom'; +import { useAuth } from './hooks/useAuth'; +import { api } from './hooks/useApi'; +import { Sidebar } from './components/layout/Sidebar'; +import { PageHeader } from './components/layout/PageHeader'; +import { ConfettiEffect } from './components/shared/ConfettiEffect'; +import Dashboard from './components/pages/Dashboard'; +import { RoomsList } from './components/pages/RoomsList'; +import { RoomDetail } from './components/pages/RoomDetail'; +import { Calendar } from './components/pages/Calendar'; +import { Leaderboard } from './components/pages/Leaderboard'; +import { History } from './components/pages/History'; +import { Settings } from './components/pages/Settings'; +import { Profile } from './components/pages/Profile'; +import { Login } from './components/pages/Login'; +import { Register } from './components/pages/Register'; +import { Achievements } from './components/pages/Achievements'; +import { Rewards } from './components/pages/Rewards'; +import { useTranslation } from './hooks/useTranslation'; + +function AppContent() { + const { user, loading, login, register, logout, refreshUser } = useAuth(); + const browserLang = typeof navigator !== 'undefined' ? navigator.language.slice(0, 2) : 'en'; + const { t: tBrowser } = useTranslation(browserLang); + const [authView, setAuthView] = useState<'login' | 'register'>('login'); + const [dashboardData, setDashboardData] = useState(null); + const [rooms, setRooms] = useState([]); + const [family, setFamily] = useState([]); + const [familySettings, setFamilySettings] = useState([]); + const [leaderboard, setLeaderboard] = useState([]); + const [leaderboardPeriod, setLeaderboardPeriod] = useState<'week' | 'month' | 'quarter' | 'year'>('week'); + const [completions, setCompletions] = useState([]); + const [coinsByEffort, setCoinsByEffort] = useState>({ 1: 5, 2: 10, 3: 15, 4: 20, 5: 25 }); + const [achievementsData, setAchievementsData] = useState(null); + const [rewardsData, setRewardsData] = useState<{ rewards: any[]; mine: any[] }>({ rewards: [], mine: [] }); + const [theme, setTheme] = useState<'orange' | 'blue' | 'rose' | 'night'>(() => { + const saved = typeof localStorage !== 'undefined' ? localStorage.getItem('tidyquest_theme') : null; + return (saved === 'blue' || saved === 'rose' || saved === 'night') ? saved : 'orange'; + }); + const [confetti, setConfetti] = useState(false); + const navigate = useNavigate(); + const location = useLocation(); + + const loadDashboard = useCallback(async () => { + try { + const [dash, lb, hist, users, coinCfg, ach] = await Promise.all([ + api.dashboard(), + api.leaderboard(leaderboardPeriod), + api.history(50, 0), + api.getUsers(), + api.getCoinsConfig(), + api.achievements(), + ]); + setDashboardData(dash); + setRooms(await api.getRooms()); + setLeaderboard(lb); + setFamily(lb); + setFamilySettings(users); + setCompletions(hist.history || []); + setCoinsByEffort(coinCfg.coinsByEffort || { 1: 5, 2: 10, 3: 15, 4: 20, 5: 25 }); + setAchievementsData(ach); + } catch { /* not logged in */ } + }, [leaderboardPeriod]); + + useEffect(() => { + if (user) loadDashboard(); + }, [user, loadDashboard]); + + // Refresh data when navigating between pages + useEffect(() => { + if (user) { + loadDashboard(); + loadRewards(); + } + }, [location.pathname]); // eslint-disable-line react-hooks/exhaustive-deps + + const loadRewards = useCallback(async () => { + try { + const data = await api.getRewards(); + setRewardsData(data); + } catch { + setRewardsData({ rewards: [], mine: [] }); + } + }, []); + + useEffect(() => { + if (user) loadRewards(); + }, [user, loadRewards]); + + useEffect(() => { + const html = document.documentElement; + if (theme === 'orange') { + html.removeAttribute('data-theme'); + } else { + html.setAttribute('data-theme', theme); + } + localStorage.setItem('tidyquest_theme', theme); + }, [theme]); + + useEffect(() => { + document.title = 'TidyQuest'; + }, []); + + useEffect(() => { + if (user && (location.pathname === '/login' || location.pathname === '/register')) { + navigate('/', { replace: true }); + } + }, [user, location.pathname, navigate]); + + const handleCompleteTask = async (taskId: number) => { + try { + setConfetti(true); + await api.completeTask(taskId); + await refreshUser(); + await loadDashboard(); + setTimeout(() => setConfetti(false), 2200); + } catch (err) { + setConfetti(false); + console.error('Failed to complete task:', err); + } + }; + + const handleLeaderboardPeriodChange = async (period: 'week' | 'month' | 'quarter' | 'year') => { + setLeaderboardPeriod(period); + const lb = await api.leaderboard(period); + setLeaderboard(lb); + }; + + const handleExport = async () => { + const data = await api.exportData(); + const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = 'tidyquest-backup.json'; + a.click(); + URL.revokeObjectURL(url); + }; + + const handleImport = () => { + const input = document.createElement('input'); + input.type = 'file'; + input.accept = '.json'; + input.onchange = async (e) => { + const file = (e.target as HTMLInputElement).files?.[0]; + if (!file) return; + const text = await file.text(); + const data = JSON.parse(text); + await api.importData(data); + await loadDashboard(); + }; + input.click(); + }; + + if (loading) { + return ( +
+
{tBrowser('common.loading')}...
+
+ ); + } + + if (!user) { + if (authView === 'register') { + return setAuthView('login')} />; + } + return setAuthView('register')} />; + } + + const { t } = useTranslation(user.language); + const localeMap: Record = { en: 'en-US', fr: 'fr-FR', de: 'de-DE', es: 'es-ES' }; + const today = new Date().toLocaleDateString(localeMap[user.language] || 'en-US', { weekday: 'long', month: 'long', day: 'numeric' }); + + // Build flat tasks list for calendar + const allTasks = rooms.flatMap((r: any) => + (r.tasks || []).map((t: any) => ({ ...t, roomName: r.name, roomType: r.roomType })) + ); + + return ( +
+ + +
+ + + navigate('/rewards')} onStreakClick={() => navigate('/achievements')} /> + {dashboardData && ( + navigate(`/rooms/${id}`)} + onNavigateToActivity={() => navigate('/activity')} + onRewardRequestAction={async (id, status) => { + await api.updateRedemptionStatus(id, status); + await Promise.all([loadDashboard(), loadRewards()]); + }} + /> + )} + + } /> + + + navigate('/rewards')} onStreakClick={() => navigate('/achievements')} /> + navigate(`/rooms/${id}`)} + isAdmin={user.role === 'admin'} + onCreateRoom={async (data) => { + await api.createRoom({ name: data.name, roomType: data.roomType, color: data.color, accentColor: data.accentColor, tasks: data.tasks }); + setRooms(await api.getRooms()); + }} + onDeleteRoom={async (roomId) => { + await api.deleteRoom(roomId); + setRooms(await api.getRooms()); + }} + /> + + } /> + + + } /> + + + navigate('/rewards')} onStreakClick={() => navigate('/achievements')} /> + + + } /> + + + navigate('/rewards')} onStreakClick={() => navigate('/achievements')} /> + + + } /> + + + navigate('/rewards')} onStreakClick={() => navigate('/achievements')} /> + + + } /> + + navigate('/rewards')} onStreakClick={() => navigate('/achievements')} /> + + + } /> + + + navigate('/rewards')} onStreakClick={() => navigate('/achievements')} /> + { await refreshUser(); }} onLogout={logout} /> + + } /> + + + navigate('/rewards')} onStreakClick={() => navigate('/achievements')} /> + { + await api.updateSettings(user.id, { isVacationMode: enabled }); + await refreshUser(); + }} + onUpdateRole={async (targetUserId, role) => { + await api.updateUserRole(targetUserId, role); + setFamilySettings(await api.getUsers()); + await refreshUser(); + }} + onAddMember={async (member) => { + await api.createUser(member); + setFamilySettings(await api.getUsers()); + }} + onDeleteUser={async (targetUserId) => { + await api.deleteUser(targetUserId); + setFamilySettings(await api.getUsers()); + await refreshUser(); + await loadDashboard(); + }} + onUpdateMemberProfile={async (memberUserId, profile) => { + await api.updateProfile(memberUserId, profile); + setFamilySettings(await api.getUsers()); + if (memberUserId === user.id) { + await refreshUser(); + } + }} + onChangePassword={async (targetUserId, payload) => { + await api.updatePassword(targetUserId, payload); + }} + coinsByEffort={coinsByEffort} + onSaveCoinsByEffort={async (values) => { + const updated = await api.updateCoinsConfig({ coinsByEffort: values }); + setCoinsByEffort(updated.coinsByEffort); + }} + onResetCoinsByEffort={async () => { + const updated = await api.updateCoinsConfig({ useDefault: true }); + setCoinsByEffort(updated.coinsByEffort); + }} + theme={theme} + onChangeTheme={setTheme} + onExport={handleExport} + onImport={handleImport} + /> + + } /> + + navigate('/rewards')} onStreakClick={() => navigate('/achievements')} /> + + + } /> + + navigate('/rewards')} onStreakClick={() => navigate('/achievements')} /> + { + await api.redeemReward(rewardId); + await refreshUser(); + await loadDashboard(); + await loadRewards(); + }} + onCancel={async (redemptionId) => { + await api.cancelRedemption(redemptionId); + await refreshUser(); + await loadDashboard(); + await loadRewards(); + }} + /> + + } /> + } /> + +
+
+ ); +} + +function RoomDetailWrapper({ rooms, user, onCompleteTask, onRefresh }: { rooms: any[]; user: any; onCompleteTask: (id: number) => void; onRefresh: () => void }) { + const navigate = useNavigate(); + const { t, roomDisplayName } = useTranslation(user?.language || 'en'); + const id = parseInt(window.location.pathname.split('/').pop() || '0'); + const room = rooms.find((r) => r.id === id); + + if (!room) { + return ( +
+ {t('rooms.roomNotFound')} + +
+ ); + } + + return ( + <> + navigate('/rewards')} onStreakClick={() => navigate('/achievements')} /> + navigate('/rooms')} onRefresh={onRefresh} /> + + ); +} + +function App() { + return ( + + + + ); +} + +export default App; diff --git a/client/src/assets/fonts/Nunito-400.ttf b/client/src/assets/fonts/Nunito-400.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6401d72772b1346b3ed06ba9c9ff5a10bffa1872 GIT binary patch literal 125528 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 q``BtRe}n1m_<0s@w2K}Bq+AlMbb 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¬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

PTCW65-iy#P9a%%I~*1)WG{(kj?ZK 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 + + + + + + + + + + + + + + + + + ); +} + +function Dog({ size = 38 }: PresetProps) { + return ( + + + + + + + + + + + + + + ); +} + +function Bunny({ size = 38 }: PresetProps) { + return ( + + + + + + + + + + + + + + + + ); +} + +function Bear({ size = 38 }: PresetProps) { + return ( + + + + + + + + + + + + + + + ); +} + +function Fox({ size = 38 }: PresetProps) { + return ( + + + + + + + + + + + + + + + ); +} + +function Owl({ size = 38 }: PresetProps) { + return ( + + + + + + + + + + + + + + + ); +} + +function Panda({ size = 38 }: PresetProps) { + return ( + + + + + + + + + + + + + + ); +} + +function Penguin({ size = 38 }: PresetProps) { + return ( + + + + + + + + + + + + + + ); +} + +function Unicorn({ size = 38 }: PresetProps) { + return ( + + + + + + + + + + + + + + + + + + ); +} + +function Frog({ size = 38 }: PresetProps) { + return ( + + + + + + + + + + + + + + + ); +} + +function Koala({ size = 38 }: PresetProps) { + return ( + + + + + + + + + + + + + + ); +} + +function Hedgehog({ size = 38 }: PresetProps) { + return ( + + + + + + + + + + + + + + + + + + + ); +} + +export const AVATAR_PRESETS: Record; label: string; color: string }> = { + cat: { component: Cat, label: 'Cat', color: '#FFD4A8' }, + dog: { component: Dog, label: 'Dog', color: '#D4A574' }, + bunny: { component: Bunny, label: 'Bunny', color: '#F5F0EB' }, + bear: { component: Bear, label: 'Bear', color: '#C4956A' }, + fox: { component: Fox, label: 'Fox', color: '#F97316' }, + owl: { component: Owl, label: 'Owl', color: '#A0714F' }, + panda: { component: Panda, label: 'Panda', color: '#E5E7EB' }, + penguin: { component: Penguin, label: 'Penguin', color: '#374151' }, + unicorn: { component: Unicorn, label: 'Unicorn', color: '#F5F0EB' }, + frog: { component: Frog, label: 'Frog', color: '#6DBE6D' }, + koala: { component: Koala, label: 'Koala', color: '#9CA3AF' }, + hedgehog: { component: Hedgehog, label: 'Hedgehog', color: '#8B6F5E' }, +}; + +export function AvatarPresetIcon({ presetId, size = 38 }: { presetId: string; size?: number }) { + const preset = AVATAR_PRESETS[presetId]; + if (!preset) return null; + const Component = preset.component; + return ; +} diff --git a/client/src/components/icons/NavIcons.tsx b/client/src/components/icons/NavIcons.tsx new file mode 100644 index 0000000..d2e504b --- /dev/null +++ b/client/src/components/icons/NavIcons.tsx @@ -0,0 +1,187 @@ +interface NavIconProps { + active: boolean; +} + +export function HomeIcon({ active }: NavIconProps) { + return ( + + + + + ); +} + +export function RoomsIcon({ active }: NavIconProps) { + return ( + + + + + + + ); +} + +export function TrophyIcon({ active }: NavIconProps) { + return ( + + + + + + + + ); +} + +export function CalendarIcon({ active }: NavIconProps) { + return ( + + + + + + + + + ); +} + +export function ActivityIcon({ active }: NavIconProps) { + return ( + + + + + + + ); +} + +export function AchievementsIcon({ active }: NavIconProps) { + return ( + + + + + + ); +} + +export function SettingsIcon({ active }: NavIconProps) { + return ( + + + + + ); +} + +export function RewardsIcon({ active }: NavIconProps) { + return ( + + + + + + + + ); +} diff --git a/client/src/components/icons/RoomIcons.tsx b/client/src/components/icons/RoomIcons.tsx new file mode 100644 index 0000000..bcc9518 --- /dev/null +++ b/client/src/components/icons/RoomIcons.tsx @@ -0,0 +1,141 @@ +import React from 'react'; + +export function KitchenIcon() { + return ( + + + + + + + + + ); +} + +export function BedroomIcon() { + return ( + + + + + + + + + ); +} + +export function BathroomIcon() { + return ( + + + + + + + + + ); +} + +export function LivingRoomIcon() { + return ( + + + + + + + + + ); +} + +export function OfficeIcon() { + return ( + + + + + + + + + ); +} + +export function GarageIcon() { + return ( + + + + + + + + ); +} + +export function LaundryIcon() { + return ( + + + + + + + + + ); +} + +export function OtherRoomIcon() { + return ( + + + + + + + ); +} + +const ROOM_ICON_MAP: Record React.JSX.Element> = { + kitchen: KitchenIcon, + bedroom: BedroomIcon, + bathroom: BathroomIcon, + living: LivingRoomIcon, + livingroom: LivingRoomIcon, + living_room: LivingRoomIcon, + office: OfficeIcon, + garage: GarageIcon, + laundry: LaundryIcon, + other: OtherRoomIcon, +}; + +const ROOM_NAME_KEYWORDS: Array<{ keyword: string; key: string }> = [ + { keyword: 'kitchen', key: 'kitchen' }, + { keyword: 'bedroom', key: 'bedroom' }, + { keyword: 'bathroom', key: 'bathroom' }, + { keyword: 'living', key: 'living' }, + { keyword: 'office', key: 'office' }, + { keyword: 'garage', key: 'garage' }, + { keyword: 'laundry', key: 'laundry' }, +]; + +export function getRoomIcon(roomType: string): () => React.JSX.Element { + const lower = roomType.toLowerCase(); + + if (ROOM_ICON_MAP[lower]) { + return ROOM_ICON_MAP[lower]; + } + + for (const entry of ROOM_NAME_KEYWORDS) { + if (lower.includes(entry.keyword)) { + return ROOM_ICON_MAP[entry.key]; + } + } + + return OtherRoomIcon; +} diff --git a/client/src/components/icons/TaskIcons.tsx b/client/src/components/icons/TaskIcons.tsx new file mode 100644 index 0000000..baed91e --- /dev/null +++ b/client/src/components/icons/TaskIcons.tsx @@ -0,0 +1,831 @@ +export type TaskIconKey = + | 'sparkle' | 'dishes' | 'sink' | 'stove' | 'counter' | 'fridge' | 'oven' + | 'microwave' | 'kettle' | 'rangehood' | 'pantry' | 'cabinet' + | 'bed' | 'pillow' | 'sheets' | 'mattress' | 'nightstand' + | 'toilet' | 'shower' | 'mirror' | 'towel' | 'drain' | 'bathmat' + | 'showerhead' | 'toothbrush' | 'grout' + | 'vacuum' | 'mop' | 'dust' | 'sweep' + | 'window' | 'curtain' | 'lightswitch' + | 'sofa' | 'tv' | 'lamp' | 'furniture' | 'rug' + | 'desk' | 'keyboard' | 'monitor' | 'cable' | 'chair' + | 'trash' | 'broom' + | 'washer' | 'dryer' | 'detergent' | 'iron' | 'clothes' + | 'tools' | 'cobweb' | 'chemicals' | 'garagedoor' + | 'shelf' | 'drawer' | 'closet'; + +export const TASK_ICON_OPTIONS: Array<{ key: TaskIconKey; label: string }> = [ + { key: 'sparkle', label: 'Sparkle' }, + { key: 'dishes', label: 'Dishes' }, + { key: 'sink', label: 'Sink' }, + { key: 'stove', label: 'Stove' }, + { key: 'counter', label: 'Counter' }, + { key: 'fridge', label: 'Fridge' }, + { key: 'oven', label: 'Oven' }, + { key: 'microwave', label: 'Microwave' }, + { key: 'kettle', label: 'Kettle' }, + { key: 'rangehood', label: 'Range Hood' }, + { key: 'pantry', label: 'Pantry' }, + { key: 'cabinet', label: 'Cabinet' }, + { key: 'bed', label: 'Bed' }, + { key: 'pillow', label: 'Pillow' }, + { key: 'sheets', label: 'Sheets' }, + { key: 'mattress', label: 'Mattress' }, + { key: 'nightstand', label: 'Nightstand' }, + { key: 'toilet', label: 'Toilet' }, + { key: 'shower', label: 'Shower' }, + { key: 'mirror', label: 'Mirror' }, + { key: 'towel', label: 'Towel' }, + { key: 'drain', label: 'Drain' }, + { key: 'bathmat', label: 'Bath Mat' }, + { key: 'showerhead', label: 'Showerhead' }, + { key: 'toothbrush', label: 'Toothbrush' }, + { key: 'grout', label: 'Grout' }, + { key: 'vacuum', label: 'Vacuum' }, + { key: 'mop', label: 'Mop' }, + { key: 'dust', label: 'Dust' }, + { key: 'sweep', label: 'Sweep' }, + { key: 'window', label: 'Window' }, + { key: 'curtain', label: 'Curtain' }, + { key: 'lightswitch', label: 'Switch' }, + { key: 'sofa', label: 'Sofa' }, + { key: 'tv', label: 'TV' }, + { key: 'lamp', label: 'Lamp' }, + { key: 'furniture', label: 'Furniture' }, + { key: 'rug', label: 'Rug' }, + { key: 'desk', label: 'Desk' }, + { key: 'keyboard', label: 'Keyboard' }, + { key: 'monitor', label: 'Monitor' }, + { key: 'cable', label: 'Cable' }, + { key: 'chair', label: 'Chair' }, + { key: 'trash', label: 'Trash' }, + { key: 'broom', label: 'Broom' }, + { key: 'washer', label: 'Washer' }, + { key: 'dryer', label: 'Dryer' }, + { key: 'detergent', label: 'Detergent' }, + { key: 'iron', label: 'Iron' }, + { key: 'clothes', label: 'Clothes' }, + { key: 'tools', label: 'Tools' }, + { key: 'cobweb', label: 'Cobweb' }, + { key: 'chemicals', label: 'Chemicals' }, + { key: 'garagedoor', label: 'Garage' }, + { key: 'shelf', label: 'Shelf' }, + { key: 'drawer', label: 'Drawer' }, + { key: 'closet', label: 'Closet' }, +]; + +// Kawaii color palettes per icon +const P: Record = { + // s=stroke, b=background, f=fill accent + sparkle: { s: '#F97316', b: '#FFF1E5', f: '#FBBF24' }, + dishes: { s: '#3B82F6', b: '#EFF6FF', f: '#93C5FD' }, + sink: { s: '#0EA5E9', b: '#E0F2FE', f: '#7DD3FC' }, + stove: { s: '#EF4444', b: '#FEF2F2', f: '#FCA5A5' }, + counter: { s: '#8B5CF6', b: '#F5F3FF', f: '#C4B5FD' }, + fridge: { s: '#06B6D4', b: '#ECFEFF', f: '#67E8F9' }, + oven: { s: '#F97316', b: '#FFF7ED', f: '#FDBA74' }, + microwave: { s: '#6366F1', b: '#EEF2FF', f: '#A5B4FC' }, + kettle: { s: '#EC4899', b: '#FDF2F8', f: '#F9A8D4' }, + rangehood: { s: '#64748B', b: '#F1F5F9', f: '#CBD5E1' }, + pantry: { s: '#D97706', b: '#FFFBEB', f: '#FDE68A' }, + cabinet: { s: '#92400E', b: '#FEF3C7', f: '#FDE68A' }, + bed: { s: '#8B5CF6', b: '#F5F3FF', f: '#DDD6FE' }, + pillow: { s: '#A78BFA', b: '#F5F3FF', f: '#EDE9FE' }, + sheets: { s: '#06B6D4', b: '#ECFEFF', f: '#A5F3FC' }, + mattress: { s: '#9333EA', b: '#FAF5FF', f: '#D8B4FE' }, + nightstand: { s: '#B45309', b: '#FFFBEB', f: '#FCD34D' }, + toilet: { s: '#3B82F6', b: '#EFF6FF', f: '#BFDBFE' }, + shower: { s: '#0EA5E9', b: '#E0F2FE', f: '#7DD3FC' }, + mirror: { s: '#6366F1', b: '#EEF2FF', f: '#C7D2FE' }, + towel: { s: '#EC4899', b: '#FDF2F8', f: '#FBCFE8' }, + drain: { s: '#64748B', b: '#F1F5F9', f: '#94A3B8' }, + bathmat: { s: '#14B8A6', b: '#F0FDFA', f: '#99F6E4' }, + showerhead: { s: '#0284C7', b: '#E0F2FE', f: '#7DD3FC' }, + toothbrush: { s: '#10B981', b: '#ECFDF5', f: '#6EE7B7' }, + grout: { s: '#78716C', b: '#F5F5F4', f: '#D6D3D1' }, + vacuum: { s: '#EF4444', b: '#FEF2F2', f: '#FCA5A5' }, + mop: { s: '#3B82F6', b: '#EFF6FF', f: '#93C5FD' }, + dust: { s: '#F59E0B', b: '#FFFBEB', f: '#FDE68A' }, + sweep: { s: '#16A34A', b: '#F0FDF4', f: '#86EFAC' }, + window: { s: '#0EA5E9', b: '#E0F2FE', f: '#BAE6FD' }, + curtain: { s: '#EC4899', b: '#FDF2F8', f: '#FBCFE8' }, + lightswitch:{ s: '#F59E0B', b: '#FFFBEB', f: '#FDE68A' }, + sofa: { s: '#16A34A', b: '#F0FDF4', f: '#BBF7D0' }, + tv: { s: '#6366F1', b: '#EEF2FF', f: '#C7D2FE' }, + lamp: { s: '#F59E0B', b: '#FFFBEB', f: '#FDE68A' }, + furniture: { s: '#92400E', b: '#FFFBEB', f: '#FDE68A' }, + rug: { s: '#DC2626', b: '#FEF2F2', f: '#FECACA' }, + desk: { s: '#D97706', b: '#FFFBEB', f: '#FDE68A' }, + keyboard: { s: '#64748B', b: '#F1F5F9', f: '#E2E8F0' }, + monitor: { s: '#3B82F6', b: '#EFF6FF', f: '#BFDBFE' }, + cable: { s: '#10B981', b: '#ECFDF5', f: '#A7F3D0' }, + chair: { s: '#B45309', b: '#FFFBEB', f: '#FCD34D' }, + trash: { s: '#64748B', b: '#F1F5F9', f: '#CBD5E1' }, + broom: { s: '#16A34A', b: '#F0FDF4', f: '#BBF7D0' }, + washer: { s: '#0EA5E9', b: '#E0F2FE', f: '#BAE6FD' }, + dryer: { s: '#F97316', b: '#FFF7ED', f: '#FED7AA' }, + detergent: { s: '#8B5CF6', b: '#F5F3FF', f: '#DDD6FE' }, + iron: { s: '#6366F1', b: '#EEF2FF', f: '#A5B4FC' }, + clothes: { s: '#EC4899', b: '#FDF2F8', f: '#FBCFE8' }, + tools: { s: '#64748B', b: '#F1F5F9', f: '#CBD5E1' }, + cobweb: { s: '#7C3AED', b: '#F5F3FF', f: '#DDD6FE' }, + chemicals: { s: '#EF4444', b: '#FEF2F2', f: '#FCA5A5' }, + garagedoor: { s: '#78716C', b: '#F5F5F4', f: '#D6D3D1' }, + shelf: { s: '#D97706', b: '#FFFBEB', f: '#FDE68A' }, + drawer: { s: '#92400E', b: '#FEF3C7', f: '#FDE68A' }, + closet: { s: '#A78BFA', b: '#F5F3FF', f: '#DDD6FE' }, +}; + +function I({ k, size }: { k: string; size: number }) { + const p = P[k] || P.sparkle; + const w = 1.4; + switch (k) { + // ===== KITCHEN ===== + case 'dishes': return ( + + + + + {/* kawaii face */} + + + + {/* bubbles */} + + + + ); + case 'sink': return ( + + + + + + + + + + + ); + case 'stove': return ( + + + + + + + {/* steam */} + + + + + ); + case 'counter': return ( + + + + + + + {/* sparkle on counter */} + + + ); + case 'fridge': return ( + + + + + + + + + + ); + case 'oven': return ( + + + + + + + + {/* kawaii face on window */} + + + + + ); + case 'microwave': return ( + + + + + + + + + + + ); + case 'kettle': return ( + + + + + + + + {/* steam */} + + + + ); + case 'rangehood': return ( + + + + + + + ); + case 'pantry': return ( + + + + + + {/* jars */} + + + + + + + ); + case 'cabinet': return ( + + + + + + {/* sparkle */} + + + ); + + // ===== BEDROOM ===== + case 'bed': return ( + + + + + + + + + ); + case 'pillow': return ( + + + + + + + + + + ); + case 'sheets': return ( + + + + + + + + + + ); + case 'mattress': return ( + + + + + + + {/* flip arrows */} + + + + ); + case 'nightstand': return ( + + + + + + {/* lamp on top */} + + + + ); + + // ===== BATHROOM ===== + case 'toilet': return ( + + + + + + + + {/* sparkle */} + + + ); + case 'shower': return ( + + + + + + {/* water drops */} + + + + + ); + case 'mirror': return ( + + + + + {/* shine */} + + + ); + case 'towel': return ( + + + + + + + + ); + case 'drain': return ( + + + + + + + + + + + + ); + case 'bathmat': return ( + + + + + {/* tassels */} + + + ); + case 'showerhead': return ( + + + + {/* water drops */} + + + + + + + + {/* face */} + + + + + ); + case 'toothbrush': return ( + + + + + {/* sparkles */} + + + + ); + case 'grout': return ( + + {/* tiles */} + + + + + {/* grout lines highlighted */} + + + {/* brush */} + + + + ); + + // ===== CLEANING ===== + case 'vacuum': return ( + + + + + + + + + + ); + case 'mop': return ( + + + + + {/* water drops */} + + + + + ); + case 'dust': return ( + + {/* feather duster */} + + + + + {/* sparkles */} + + + + ); + case 'sweep': return ( + + + + + + + {/* dust cloud */} + + + + + ); + + // ===== WINDOWS & SWITCHES ===== + case 'window': return ( + + + + + {/* shine */} + + {/* sparkle */} + + + ); + case 'curtain': return ( + + + + + + + {/* tie-backs */} + + + {/* window behind */} + + + ); + case 'lightswitch': return ( + + + + + {/* light rays */} + + + + + + ); + + // ===== LIVING ROOM ===== + case 'sofa': return ( + + + + + + + + + + + + ); + case 'tv': return ( + + + + + + {/* screen shine */} + + + ); + case 'lamp': return ( + + + + + {/* warm glow */} + + {/* rays */} + + + ); + case 'furniture': return ( + + + + + + + + {/* sparkle */} + + + ); + case 'rug': return ( + + + + + {/* tassels */} + + + + ); + + // ===== OFFICE ===== + case 'desk': return ( + + + + + + {/* items on desk */} + + + + + ); + case 'keyboard': return ( + + + {/* keys */} + + + + + + + + + + ); + case 'monitor': return ( + + + + + + {/* screen face */} + + + + + ); + case 'cable': return ( + + + + + {/* plug */} + + + + + ); + case 'chair': return ( + + + + + + + ); + + // ===== TRASH & BROOM ===== + case 'trash': return ( + + + + + + {/* face */} + + + + ); + case 'broom': return ( + + + + + + + {/* sparkle */} + + + ); + + // ===== LAUNDRY ===== + case 'washer': return ( + + + + + + + + + + ); + case 'dryer': return ( + + + + + + + {/* heat waves */} + + + + ); + case 'detergent': return ( + + + + + {/* label */} + + {/* bubbles */} + + + + ); + case 'iron': return ( + + + + + + {/* steam */} + + + + ); + case 'clothes': return ( + + {/* t-shirt shape */} + + + {/* collar */} + + {/* heart on shirt */} + + + ); + + // ===== GARAGE ===== + case 'tools': return ( + + {/* wrench */} + + + {/* screwdriver */} + + + + ); + case 'cobweb': return ( + + + + + + {/* spider */} + + + + + + ); + case 'chemicals': return ( + + + + + + + + {/* warning */} + + + ); + case 'garagedoor': return ( + + + + + + + + {/* sparkle */} + + + ); + + // ===== ORGANIZE ===== + case 'shelf': return ( + + + + + {/* items */} + + + + + + + + ); + case 'drawer': return ( + + + + + + + + + ); + case 'closet': return ( + + + + + + {/* hanger */} + + + + + + ); + + // ===== DEFAULT ===== + default: return ( + + + + + + ); + } +} + +export function TaskIcon({ iconKey, size = 14 }: { iconKey?: string | null; size?: number }) { + return ; +} diff --git a/client/src/components/icons/UIIcons.tsx b/client/src/components/icons/UIIcons.tsx new file mode 100644 index 0000000..b54af79 --- /dev/null +++ b/client/src/components/icons/UIIcons.tsx @@ -0,0 +1,253 @@ +export function CheckIcon() { + return ( + + + + ); +} + +export function PlusIcon() { + return ( + + + + ); +} + +export function BackIcon() { + return ( + + + + ); +} + +export function FireIcon() { + return ( + + + + + ); +} + +export function CoinIcon() { + return ( + + + + $ + + + ); +} + +export function SparkleIcon() { + return ( + + + + ); +} + +export function StarIcon() { + return ( + + + + ); +} + +export function StarEmptyIcon() { + return ( + + + + ); +} + +export function DownloadIcon() { + return ( + + + + + ); +} + +export function UploadIcon() { + return ( + + + + + ); +} + +export function LockIcon() { + return ( + + + + + + ); +} + +export function GlobeIcon() { + return ( + + + + + + + ); +} + +export function BellIcon() { + return ( + + + + + ); +} + +export function UsersIcon() { + return ( + + + + + + + ); +} + +export function TrashIcon() { + return ( + + + + + + + + ); +} diff --git a/client/src/components/layout/PageHeader.tsx b/client/src/components/layout/PageHeader.tsx new file mode 100644 index 0000000..cf92189 --- /dev/null +++ b/client/src/components/layout/PageHeader.tsx @@ -0,0 +1,60 @@ +import { FireIcon, CoinIcon } from '../icons/UIIcons'; +import type { User } from '../../hooks/useAuth'; + +interface PageHeaderProps { + title: string; + subtitle: string; + user: User; + rightContent?: React.ReactNode; + onCoinsClick?: () => void; + onStreakClick?: () => void; +} + +export function PageHeader({ title, subtitle, user, rightContent, onCoinsClick, onStreakClick }: PageHeaderProps) { + return ( +

+
+

+ {title} +

+

+ {subtitle} +

+
+
+ {rightContent} +
{ + if (!onStreakClick) return; + if (e.key === 'Enter' || e.key === ' ') { + e.preventDefault(); + onStreakClick(); + } + }} + style={{ + display: 'flex', alignItems: 'center', gap: 6, + backgroundColor: 'var(--warm-accent-light)', borderRadius: 14, padding: '8px 16px', + border: '1.5px solid var(--warm-streak-border)', + cursor: onStreakClick ? 'pointer' : 'default', + }}> + + {user.currentStreak} +
+
+ + {user.coins} +
+
+
+ ); +} diff --git a/client/src/components/layout/Sidebar.tsx b/client/src/components/layout/Sidebar.tsx new file mode 100644 index 0000000..ecff7e1 --- /dev/null +++ b/client/src/components/layout/Sidebar.tsx @@ -0,0 +1,109 @@ +import { NavLink, useNavigate } from 'react-router-dom'; +import { HomeIcon, RoomsIcon, TrophyIcon, CalendarIcon, ActivityIcon, AchievementsIcon, SettingsIcon, RewardsIcon } from '../icons/NavIcons'; +import { FireIcon, CoinIcon, SparkleIcon } from '../icons/UIIcons'; +import { UserAvatar } from '../shared/UserAvatar'; +import { useTranslation } from '../../hooks/useTranslation'; +import type { User } from '../../hooks/useAuth'; + +interface SidebarProps { + user: User; +} + +const navItems = [ + { to: '/', label: 'Home', Icon: HomeIcon }, + { to: '/rooms', label: 'Rooms', Icon: RoomsIcon }, + { to: '/leaderboard', label: 'Board', Icon: TrophyIcon }, + { to: '/calendar', label: 'Calendar', Icon: CalendarIcon }, + { to: '/activity', label: 'Activity', Icon: ActivityIcon }, + { to: '/rewards', label: 'Rewards', Icon: RewardsIcon }, + { to: '/achievements', label: 'Achievements', Icon: AchievementsIcon }, + { to: '/settings', label: 'Settings', Icon: SettingsIcon }, +]; + +export function Sidebar({ user }: SidebarProps) { + const navigate = useNavigate(); + const { t } = useTranslation(user.language); + + return ( + + ); +} diff --git a/client/src/components/pages/Achievements.tsx b/client/src/components/pages/Achievements.tsx new file mode 100644 index 0000000..78e3333 --- /dev/null +++ b/client/src/components/pages/Achievements.tsx @@ -0,0 +1,162 @@ +import { SparkleIcon, FireIcon, CoinIcon, StarIcon } from '../icons/UIIcons'; +import { useTranslation } from '../../hooks/useTranslation'; + +function AchievementIcon({ type }: { type: string }) { + if (type === 'fire') return ; + if (type === 'coin') return ; + if (type === 'star') return ; + if (type === 'crown') { + return ( + + + + ); + } + if (type === 'broom') { + return ( + + + + + + + + ); + } + if (type === 'heart') { + return ( + + + + ); + } + if (type === 'shield') { + return ( + + + + + ); + } + if (type === 'rocket') { + return ( + + + + + + + ); + } + if (type === 'diamond') { + return ( + + + + + + ); + } + return ; +} + +interface AchRow { + id: string; + titleKey?: string; + title?: string; + descKey?: string; + description?: string; + icon: string; + threshold: number; + value: number; + progress: number; + unlocked: boolean; +} + +interface AchUser { + id: number; + displayName: string; + role: 'admin' | 'member' | 'child'; + avatarColor: string; + achievements: AchRow[]; +} + +interface Props { + data: { me: AchUser; family: AchUser[] } | null; + language?: string; +} + +export function Achievements({ data, language }: Props) { + const { t } = useTranslation(language); + if (!data) return null; + + const renderUser = (u: AchUser) => { + const unlocked = u.achievements.filter(a => a.unlocked); + const locked = u.achievements.filter(a => !a.unlocked); + + return ( +
+
+

{u.displayName}

+ + {unlocked.length}/{u.achievements.length} + +
+ {unlocked.length > 0 && ( +
0 ? 16 : 0 }}> + {unlocked.map((a) => ( +
+
+ +
{a.titleKey ? t(a.titleKey) : a.title}
+
+
{a.descKey ? t(a.descKey) : a.description}
+
+
+
+
+ {a.value}/{a.threshold} +
+
+ ))} +
+ )} + {locked.length > 0 && ( +
+ {locked.map((a) => ( +
+
+ +
{a.titleKey ? t(a.titleKey) : a.title}
+
+
{a.descKey ? t(a.descKey) : a.description}
+
+
+
+
+ {a.value}/{a.threshold} +
+
+ ))} +
+ )} +
+ ); + }; + + return ( +
+ {renderUser(data.me)} + {data.family.length > 0 && ( +
{t('achievements.familyProgress')}
+ )} + {data.family.map(renderUser)} +
+ ); +} diff --git a/client/src/components/pages/Calendar.tsx b/client/src/components/pages/Calendar.tsx new file mode 100644 index 0000000..63f0b9a --- /dev/null +++ b/client/src/components/pages/Calendar.tsx @@ -0,0 +1,143 @@ +import { TaskIcon } from '../icons/TaskIcons'; +import { useTranslation } from '../../hooks/useTranslation'; + +interface CalendarProps { + completions: Array<{ completedAt: string; taskName: string; translationKey?: string; roomName: string }>; + tasks: Array<{ id: number; name: string; translationKey?: string; roomName: string; roomType: string; health: number; frequencyDays: number; lastCompletedAt: string | null; iconKey?: string }>; + language?: string; +} + +export function Calendar({ completions, tasks, language }: CalendarProps) { + const { taskName, t, roomDisplayName } = useTranslation(language); + const localeMap: Record = { en: 'en-US', fr: 'fr-FR', de: 'de-DE', es: 'es-ES' }; + const locale = localeMap[language || 'en'] || 'en-US'; + const today = new Date(); + const year = today.getFullYear(); + const month = today.getMonth(); + const firstDay = new Date(year, month, 1).getDay(); + const daysInMonth = new Date(year, month + 1, 0).getDate(); + const monthName = today.toLocaleString(locale, { month: 'long', year: 'numeric' }); + + // Days with completions this month + const completionDays = new Set( + completions + .filter((c) => { + const d = new Date(c.completedAt); + return d.getFullYear() === year && d.getMonth() === month; + }) + .map((c) => new Date(c.completedAt).getDate()) + ); + + // Upcoming due dates + const upcoming = tasks + .map((task) => { + const dueDate = new Date(task.lastCompletedAt || Date.now()); + if (task.lastCompletedAt) { + dueDate.setDate(dueDate.getDate() + task.frequencyDays); + } + const dueInDays = task.lastCompletedAt + ? Math.max(0, Math.ceil((dueDate.getTime() - Date.now()) / 86400000)) + : 0; + return { ...task, dueInDays, dueDate }; + }) + .filter((task) => task.dueInDays <= 30) + .sort((a, b) => a.dueInDays - b.dueInDays); + + // Days with due tasks + const dueDays = new Set( + upcoming + .filter((task) => task.dueDate.getMonth() === month && task.dueDate.getFullYear() === year) + .map((task) => task.dueDate.getDate()) + ); + + // Calendar grid padding + const calDays: (number | null)[] = []; + const offset = firstDay === 0 ? 6 : firstDay - 1; + for (let i = 0; i < offset; i++) calDays.push(null); + for (let d = 1; d <= daysInMonth; d++) calDays.push(d); + + return ( +
+ {/* Calendar Grid */} +
+
{monthName}
+
+ {[ + t('calendar.mon'), + t('calendar.tue'), + t('calendar.wed'), + t('calendar.thu'), + t('calendar.fri'), + t('calendar.sat'), + t('calendar.sun'), + ].map((d) => ( +
{d}
+ ))} + {calDays.map((d, i) => { + if (!d) return
; + const isToday = d === today.getDate(); + const hasActivity = completionDays.has(d); + const isDue = dueDays.has(d); + const isPast = d < today.getDate(); + return ( +
+ {d} +
+ ); + })} +
+
+ {[ + { bg: 'var(--health-green-bg)', border: 'var(--health-green)', label: t('calendar.choresDone') }, + { bg: 'var(--health-red-bg)', border: 'var(--health-red)', label: t('calendar.tasksDue') }, + { bg: 'var(--warm-accent)', border: 'var(--warm-accent)', label: t('calendar.today') }, + ].map((l) => ( +
+
+ {l.label} +
+ ))} +
+
+ + {/* Upcoming Due Dates */} +
+

{t('calendar.upcomingDueDates')}

+ {upcoming.slice(0, 8).map((item, i) => { + return ( +
+
+
+
{taskName(item.name, item.translationKey)}
+
{roomDisplayName(item.roomName, item.roomType)}
+
+
{t('calendar.inDays').replace('{days}', `${item.dueInDays}`)}
+
+ ); + })} + {upcoming.length === 0 && ( +
+ {t('calendar.allCaughtUp')} +
+ )} +
+
+ ); +} diff --git a/client/src/components/pages/Dashboard.tsx b/client/src/components/pages/Dashboard.tsx new file mode 100644 index 0000000..4684eb2 --- /dev/null +++ b/client/src/components/pages/Dashboard.tsx @@ -0,0 +1,716 @@ +import React from 'react'; +import HealthBar from '../shared/HealthBar'; +import RingGauge from '../shared/RingGauge'; +import UserAvatar from '../shared/UserAvatar'; +import { FireIcon, CoinIcon, CheckIcon } from '../icons/UIIcons'; +import { getRoomIcon } from '../icons/RoomIcons'; +import { TaskIcon } from '../icons/TaskIcons'; +import { getHealthColor } from '../../utils/health'; +import { useTranslation } from '../../hooks/useTranslation'; + +/* ── Types ── */ + +interface Room { + id: number; + name: string; + roomType: string; + color: string; + accentColor: string; + health: number; + taskCount: number; + criticalCount: number; +} + +interface Quest { + id: number; + name: string; + translationKey?: string; + iconKey?: string; + health: number; + effort: number; + roomId: number; + roomName: string; + roomColor: string; + roomAccent: string; + lastCompletedAt: string | null; + isSeasonal: boolean; + frequencyDays: number; + dueDate?: string; + dueInDays?: number; +} + +interface CurrentUser { + role?: 'admin' | 'member' | 'child'; + displayName: string; + coins: number; + goalCoins?: number | null; + currentStreak: number; + avatarColor: string; + lastActiveDate?: string | null; +} + +interface ActivityEntry { + displayName: string; + avatarColor: string; + avatarType?: string; + avatarPreset?: string; + avatarPhotoUrl?: string; + taskName: string; + translationKey?: string; + roomId: number; + roomName: string; + completedAt: string; + coinsEarned: number; +} + +interface FamilyMember { + id: number; + displayName: string; + avatarColor: string; + avatarType?: string; + avatarPreset?: string; + avatarPhotoUrl?: string; + coins: number; + currentStreak: number; + points: number; +} + +interface DashboardProps { + data: { + houseHealth: number; + rooms: Room[]; + todaysQuests: Quest[]; + nextTasks: Quest[]; + myGoal?: { goalCoins: number; currentCoins: number; progress: number; goalStartAt?: string | null; goalEndAt?: string | null } | null; + childrenGoals?: Array<{ id: number; displayName: string; role: string; coins: number; currentCoins?: number; goalCoins: number | null; progress: number | null; goalStartAt?: string | null; goalEndAt?: string | null }>; + pendingRewardRequests?: Array<{ id: number; title: string; displayName: string; costCoins: number; redeemedAt: string; status: 'requested' | 'approved' | 'rejected' }>; + currentUser: CurrentUser; + recentActivity: ActivityEntry[]; + }; + family: FamilyMember[]; + language?: string; + onCompleteTask: (taskId: number) => void; + onNavigateToRoom: (roomId: number) => void; + onNavigateToActivity: () => void; + onRewardRequestAction: (id: number, status: 'approved' | 'rejected') => void | Promise; +} + +/* ── Component ── */ + +const Dashboard: React.FC = ({ + data, + family, + language, + onCompleteTask, + onNavigateToRoom, + onNavigateToActivity, + onRewardRequestAction, +}) => { + const { taskName, roomDisplayName, timeAgo, t } = useTranslation(language); + const { houseHealth, rooms, todaysQuests, nextTasks, myGoal, childrenGoals = [], pendingRewardRequests = [], currentUser, recentActivity } = data; + const localeMap: Record = { en: 'en-US', fr: 'fr-FR', de: 'de-DE', es: 'es-ES' }; + const locale = localeMap[language || 'en'] || 'en-US'; + + const sortedRooms = [...rooms].sort((a, b) => a.health - b.health); + const roomTypeById = new Map(rooms.map((r) => [r.id, r.roomType])); + const totalTasks = rooms.reduce((s, r) => s + r.taskCount, 0); + const totalCritical = rooms.reduce((s, r) => s + r.criticalCount, 0); + const sortedFamily = [...family].sort((a, b) => b.points - a.points); + const coinsSortedFamily = [...family].sort((a, b) => b.coins - a.coins); + const todayIso = new Date().toISOString().slice(0, 10); + const streakDoneToday = currentUser.lastActiveDate === todayIso; + + const healthMessage = + houseHealth >= 70 + ? t('dashboard.healthGreat') + : houseHealth >= 40 + ? t('dashboard.healthMedium') + : t('dashboard.healthLow'); + + return ( +
+ {/* ── Column 1 ── */} +
+ {/* House Health Card */} +
+ +
+
+ {t('dashboard.houseHealth')} +
+
+ {healthMessage} +
+
+ {[ + { label: t('dashboard.roomsCount'), value: rooms.length, color: 'var(--warm-accent)' }, + { label: t('dashboard.tasksCount'), value: totalTasks, color: '#4AABDE' }, + { label: t('dashboard.criticalCount'), value: totalCritical, color: 'var(--warm-badge-text)' }, + ].map((s) => ( +
+
+ {s.value} +
+
+ {s.label} +
+
+ ))} +
+
+
+ + {/* Today's Quests Card */} +
+
+

+ {t('dashboard.todaysQuests')} +

+ + {todaysQuests.length} {t('dashboard.pending')} + +
+
+ {todaysQuests.slice(0, 6).map((q) => { + return ( +
+
+ +
+
+
+ {taskName(q.name, q.translationKey)} +
+
+ {roomDisplayName(q.roomName, roomTypeById.get(q.roomId) || '')} + {q.lastCompletedAt ? ` \u00B7 ${timeAgo(q.lastCompletedAt)}` : ''} +
+
+ +
+
+ +
+ ); + })} + {todaysQuests.length === 0 && ( +
+ {t('dashboard.noQuests')} +
+ )} +
+
+ + {/* Next Tasks Card */} +
+

+ {t('dashboard.nextTasks')} +

+
+ {nextTasks.slice(0, 6).map((q) => { + return ( +
+
+
+
{taskName(q.name, q.translationKey)}
+
+ {roomDisplayName(q.roomName, roomTypeById.get(q.roomId) || '')} +
+
+
+ {t('calendar.inDays').replace('{days}', `${q.dueInDays || 0}`)} +
+
+ ); + })} + {nextTasks.length === 0 && ( +
+ {t('calendar.allCaughtUp')} +
+ )} +
+
+
+ + {/* ── Column 2: Rooms ── */} +
+
+

+ {t('nav.rooms')} +

+ + {t('dashboard.sortedUrgency')} + +
+
+ {sortedRooms.map((room) => { + const RoomIcon = getRoomIcon(room.roomType || room.name); + return ( +
onNavigateToRoom(room.id)} + > +
+
+
+ +
+
+
+ {roomDisplayName(room.name, room.roomType)} +
+
+ {room.taskCount} {t('rooms.tasks')} + {room.criticalCount > 0 && ( + + {' '} + · {room.criticalCount} {t('dashboard.criticalCount')} + + )} +
+
+
+ {room.health}% +
+
+ +
+
+ ); + })} +
+
+ + {/* ── Column 3: Widgets ── */} +
+ {/* Streak Card */} +
+
+
+ +
+
+
+ {currentUser.currentStreak} +
+
+ {t('dashboard.dayStreak')} +
+
+
+
+ {Array.from({ length: 7 }, (_, i) => ( +
+ ))} +
+
+ {streakDoneToday ? t('dashboard.streakDoneToday') : t('dashboard.keepStreak')} +
+
+ +
+
+
{t('dashboard.coinsStatusTitle')}
+ + {coinsSortedFamily.length} + +
+
+ {coinsSortedFamily.slice(0, 6).map((u) => ( +
+ +
{u.displayName}
+
+ {u.coins} +
+
+ ))} +
+
+ + {myGoal && ( +
+
{t('dashboard.myGoal')}
+
+ {myGoal.currentCoins}/{myGoal.goalCoins} {t('leaderboard.points')} +
+ {(myGoal.goalStartAt || myGoal.goalEndAt) && ( +
+ {(myGoal.goalStartAt ? new Date(myGoal.goalStartAt).toLocaleDateString(locale) : '...')} - {(myGoal.goalEndAt ? new Date(myGoal.goalEndAt).toLocaleDateString(locale) : '...')} +
+ )} + +
+ )} + + {currentUser.role === 'admin' && childrenGoals.length > 0 && ( +
+
{t('dashboard.childrenGoals')}
+
+ {childrenGoals.map((cg) => ( +
+
+ {cg.displayName} + {cg.goalCoins ? `${cg.currentCoins ?? cg.coins}/${cg.goalCoins}` : t('dashboard.noGoal')} +
+ {(cg.goalStartAt || cg.goalEndAt) && ( +
+ {(cg.goalStartAt ? new Date(cg.goalStartAt).toLocaleDateString(locale) : '...')} - {(cg.goalEndAt ? new Date(cg.goalEndAt).toLocaleDateString(locale) : '...')} +
+ )} + {cg.goalCoins && } +
+ ))} +
+
+ )} + + {currentUser.role === 'admin' && ( +
+
+
{t('dashboard.rewardRequestsTitle')}
+ + {pendingRewardRequests.length} + +
+ {pendingRewardRequests.length === 0 && ( +
+ {t('dashboard.rewardRequestEmpty')} +
+ )} +
+ {pendingRewardRequests.slice(0, 6).map((rr) => ( +
+
{rr.displayName}
+
{rr.title}
+
+
+ {timeAgo(rr.redeemedAt)} +
+
+ + {rr.costCoins} + + + +
+
+
+ ))} +
+
+ )} + + {/* Mini Leaderboard */} +
+

+ {t('leaderboard.thisWeek')} +

+ {sortedFamily.map((u, i) => ( +
+
+ #{i + 1} +
+ +
+ {u.displayName} +
+
+ {u.points} +
+
+ ))} +
+ + {/* Recent Activity */} +
+
+

+ {t('dashboard.recentActivity')} +

+ +
+ {recentActivity.slice(0, 5).map((h, i) => ( +
+ +
+
+ {taskName(h.taskName, h.translationKey)} +
+
+ {t('history.by')} {h.displayName} +
+
+ {roomDisplayName(h.roomName, roomTypeById.get(h.roomId) || '')} · {timeAgo(h.completedAt)} +
+
+
+ +{h.coinsEarned} +
+
+ ))} +
+
+
+ ); +}; + +export default Dashboard; diff --git a/client/src/components/pages/History.tsx b/client/src/components/pages/History.tsx new file mode 100644 index 0000000..b2c9fb1 --- /dev/null +++ b/client/src/components/pages/History.tsx @@ -0,0 +1,81 @@ +import { useState, useEffect } from 'react'; +import { UserAvatar } from '../shared/UserAvatar'; +import { CoinIcon } from '../icons/UIIcons'; +import { api } from '../../hooks/useApi'; +import { useTranslation } from '../../hooks/useTranslation'; + +export function History({ language }: { language?: string }) { + const { taskName, t, roomDisplayName, timeAgo } = useTranslation(language); + const [history, setHistory] = useState([]); + const [total, setTotal] = useState(0); + const [offset, setOffset] = useState(0); + const limit = 20; + + useEffect(() => { + api.history(limit, offset).then((data) => { + setHistory(data.history); + setTotal(data.total); + }); + }, [offset]); + + return ( +
+
+
+
+
{t('history.task')}
+
{t('history.room')}
+
{t('history.when')}
+
{t('history.earned')}
+
+ + {history.map((h) => ( +
+ +
+
{taskName(h.taskName, h.translationKey)}
+
{t('history.by')} {h.displayName}
+
+
{roomDisplayName(h.roomName, h.roomType || '')}
+
{timeAgo(h.completedAt)}
+
+ +{h.coinsEarned} +
+
+ ))} + + {history.length === 0 && ( +
+ {t('history.noActivity')} +
+ )} + + {total > limit && ( +
+ + + {offset + 1}-{Math.min(offset + limit, total)} {t('history.of')} {total} + + +
+ )} +
+
+ ); +} diff --git a/client/src/components/pages/Leaderboard.tsx b/client/src/components/pages/Leaderboard.tsx new file mode 100644 index 0000000..a98928d --- /dev/null +++ b/client/src/components/pages/Leaderboard.tsx @@ -0,0 +1,111 @@ +import { UserAvatar } from '../shared/UserAvatar'; +import { FireIcon, CoinIcon } from '../icons/UIIcons'; +import { useTranslation } from '../../hooks/useTranslation'; + +interface LeaderboardProps { + users: Array<{ id: number; displayName: string; avatarColor: string; avatarType?: string; avatarPreset?: string; avatarPhotoUrl?: string; coins: number; currentStreak: number; points: number }>; + period: 'week' | 'month' | 'quarter' | 'year'; + language?: string; + onPeriodChange: (period: 'week' | 'month' | 'quarter' | 'year') => void; +} + +export function Leaderboard({ users, period, language, onPeriodChange }: LeaderboardProps) { + const { t } = useTranslation(language); + const sorted = [...users].sort((a, b) => b.points - a.points); + + // Podium order: 2nd, 1st, 3rd + const podium = [sorted[1], sorted[0], sorted[2]].filter(Boolean); + const podiumHeights = [100, 140, 75]; + const podiumRanks = [2, 1, 3]; + const podiumGradients = [ + 'linear-gradient(180deg, #E2E8F0, #94A3B8)', + 'linear-gradient(180deg, #FDE68A, #F59E0B)', + 'linear-gradient(180deg, #FED7AA, #EA580C)', + ]; + + return ( +
+ {/* Period Toggle */} +
+ {(['week', 'month', 'quarter', 'year'] as const).map((p) => ( + + ))} +
+ + {/* Podium */} + {podium.length > 0 && ( +
+
+ {podium.map((u, i) => ( +
+ +
{u.displayName}
+
+
#{podiumRanks[i]}
+
{u.points}
+
{t('leaderboard.points')}
+
+
+ ))} +
+
+ )} + + {/* Stats List */} + {sorted.map((u, i) => ( +
+
#{i + 1}
+ +
+
{u.displayName}
+
+ + {u.currentStreak}d {t('leaderboard.streak')} + + + {u.coins} + +
+
+
{u.points}
+
+ ))} + + {sorted.length === 0 && ( +
+ {t('leaderboard.noData')} +
+ )} +
+ ); +} diff --git a/client/src/components/pages/Login.tsx b/client/src/components/pages/Login.tsx new file mode 100644 index 0000000..394d46a --- /dev/null +++ b/client/src/components/pages/Login.tsx @@ -0,0 +1,119 @@ +import { useState } from 'react'; +import { SparkleIcon } from '../icons/UIIcons'; +import { useTranslation } from '../../hooks/useTranslation'; + +interface LoginProps { + onLogin: (username: string, password: string) => Promise; + onSwitchToRegister: () => void; +} + +export function Login({ onLogin, onSwitchToRegister }: LoginProps) { + const initialLang = (() => { + const saved = typeof localStorage !== 'undefined' ? localStorage.getItem('tidyquest_auth_lang') : null; + if (saved && ['en', 'fr', 'de', 'es'].includes(saved)) return saved; + const browser = typeof navigator !== 'undefined' ? navigator.language.slice(0, 2) : 'en'; + return ['en', 'fr', 'de', 'es'].includes(browser) ? browser : 'en'; + })(); + const [authLanguage, setAuthLanguage] = useState(initialLang); + const { t } = useTranslation(authLanguage); + const [username, setUsername] = useState(''); + const [password, setPassword] = useState(''); + const [error, setError] = useState(''); + const [loading, setLoading] = useState(false); + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + setError(''); + setLoading(true); + try { + await onLogin(username.trim(), password); + window.location.href = '/'; + } catch (err: any) { + setError(err.message || t('auth.loginFailed')); + } finally { + setLoading(false); + } + }; + + return ( +
+
+
+
+ +
+

TidyQuest

+

{t('auth.welcomeBack')}

+ +
+ +
+
+ + setUsername(e.target.value)} + style={{ + width: '100%', padding: '10px 14px', borderRadius: 12, border: '1.5px solid #F0E6D9', + fontSize: 14, fontFamily: 'Nunito', fontWeight: 600, color: '#3D2F1E', + outline: 'none', backgroundColor: '#FFFBF5', + }} + placeholder={t('auth.usernamePlaceholder')} + /> +
+
+ + setPassword(e.target.value)} + style={{ + width: '100%', padding: '10px 14px', borderRadius: 12, border: '1.5px solid #F0E6D9', + fontSize: 14, fontFamily: 'Nunito', fontWeight: 600, color: '#3D2F1E', + outline: 'none', backgroundColor: '#FFFBF5', + }} + placeholder={t('auth.passwordPlaceholder')} + /> +
+ + {error &&
{error}
} + + +
+ +
+ +
+
+
+ ); +} diff --git a/client/src/components/pages/Profile.tsx b/client/src/components/pages/Profile.tsx new file mode 100644 index 0000000..ae6c5a3 --- /dev/null +++ b/client/src/components/pages/Profile.tsx @@ -0,0 +1,277 @@ +import { useState, useRef } from 'react'; +import { UserAvatar } from '../shared/UserAvatar'; +import { AVATAR_PRESETS, AvatarPresetIcon } from '../icons/AvatarPresets'; +import { GlobeIcon } from '../icons/UIIcons'; +import { api } from '../../hooks/useApi'; +import { useTranslation } from '../../hooks/useTranslation'; +import type { User } from '../../hooks/useAuth'; + +const COLORS = [ + '#F97316', '#EF4444', '#EC4899', '#A855F7', + '#6366F1', '#3B82F6', '#06B6D4', '#10B981', + '#84CC16', '#F59E0B', '#78716C', '#64748B', +]; + +interface ProfileProps { + user: User; + onSave: () => void; + onLogout: () => void; +} + +export function Profile({ user, onSave, onLogout }: ProfileProps) { + const { t } = useTranslation(user.language); + const [displayName, setDisplayName] = useState(user.displayName); + const [avatarType, setAvatarType] = useState<'letter' | 'preset' | 'photo'>(user.avatarType || 'letter'); + const [avatarColor, setAvatarColor] = useState(user.avatarColor); + const [avatarPreset, setAvatarPreset] = useState(user.avatarPreset || 'cat'); + const [avatarPhotoUrl, setAvatarPhotoUrl] = useState(user.avatarPhotoUrl); + const [language, setLanguage] = useState(user.language); + const [saving, setSaving] = useState(false); + const [saved, setSaved] = useState(false); + const [currentPassword, setCurrentPassword] = useState(''); + const [newPassword, setNewPassword] = useState(''); + const [confirmPassword, setConfirmPassword] = useState(''); + const [passwordMsg, setPasswordMsg] = useState(''); + const fileRef = useRef(null); + + const handleSave = async () => { + setSaving(true); + try { + await api.updateProfile(user.id, { + displayName, + avatarType, + avatarColor, + avatarPreset: avatarType === 'preset' ? avatarPreset : undefined, + language, + }); + setSaved(true); + onSave(); + setTimeout(() => setSaved(false), 2000); + } finally { + setSaving(false); + } + }; + + const handlePhotoUpload = async (e: React.ChangeEvent) => { + const file = e.target.files?.[0]; + if (!file) return; + setSaving(true); + try { + const result = await api.uploadAvatar(user.id, file); + setAvatarType('photo'); + setAvatarPhotoUrl(result.avatarPhotoUrl); + onSave(); + } finally { + setSaving(false); + } + }; + + const handlePasswordChange = async () => { + setPasswordMsg(''); + if (!currentPassword || !newPassword) return; + if (newPassword !== confirmPassword) { + setPasswordMsg(t('settings.passwordMismatch')); + return; + } + setSaving(true); + try { + await api.updatePassword(user.id, { currentPassword, newPassword }); + setCurrentPassword(''); + setNewPassword(''); + setConfirmPassword(''); + setPasswordMsg(t('settings.passwordUpdated')); + } catch (err: any) { + setPasswordMsg(err?.message || t('settings.passwordUpdateFailed')); + } finally { + setSaving(false); + } + }; + + const tabs: Array<{ key: 'letter' | 'preset' | 'photo'; label: string }> = [ + { key: 'letter', label: t('profile.letterMode') }, + { key: 'preset', label: t('profile.characterMode') }, + { key: 'photo', label: t('profile.photoMode') }, + ]; + + return ( +
+
+ {/* Avatar preview */} +
+ +
+ + {/* Display name */} +
+ + setDisplayName(e.target.value)} + style={{ + width: '100%', padding: '10px 14px', borderRadius: 12, + border: '1.5px solid var(--warm-border)', fontSize: 14, fontWeight: 700, + color: 'var(--warm-text)', fontFamily: 'Nunito', backgroundColor: 'var(--warm-bg-input)', + outline: 'none', boxSizing: 'border-box', + }} + /> +
+ + {/* Avatar mode tabs */} +
+ +
+ {tabs.map((tab) => ( + + ))} +
+ + {/* Letter mode: color picker */} + {avatarType === 'letter' && ( +
+ {COLORS.map((c) => ( +
+ )} + + {/* Preset mode: grid of animal faces */} + {avatarType === 'preset' && ( +
+ {Object.entries(AVATAR_PRESETS).map(([id]) => ( + + ))} +
+ )} + + {/* Photo mode: upload button */} + {avatarType === 'photo' && ( +
+ + + {avatarPhotoUrl && ( +
+ Photo uploaded +
+ )} +
+ )} +
+ + {/* Language */} +
+ +
+ + +
+
+ +
+ + setCurrentPassword(e.target.value)} placeholder={t('settings.currentPassword')} style={{ padding: '10px 14px', borderRadius: 12, border: '1.5px solid var(--warm-border)', fontFamily: 'Nunito', backgroundColor: 'var(--warm-bg-input)', color: 'var(--warm-text)' }} /> + setNewPassword(e.target.value)} placeholder={t('settings.newPassword')} style={{ padding: '10px 14px', borderRadius: 12, border: '1.5px solid var(--warm-border)', fontFamily: 'Nunito', backgroundColor: 'var(--warm-bg-input)', color: 'var(--warm-text)' }} /> + setConfirmPassword(e.target.value)} placeholder={t('settings.confirmPassword')} style={{ padding: '10px 14px', borderRadius: 12, border: '1.5px solid var(--warm-border)', fontFamily: 'Nunito', backgroundColor: 'var(--warm-bg-input)', color: 'var(--warm-text)' }} /> + + {passwordMsg &&
{passwordMsg}
} +
+ + {/* Save */} + + +
+
+ ); +} diff --git a/client/src/components/pages/Register.tsx b/client/src/components/pages/Register.tsx new file mode 100644 index 0000000..ea47997 --- /dev/null +++ b/client/src/components/pages/Register.tsx @@ -0,0 +1,120 @@ +import { useState } from 'react'; +import { SparkleIcon } from '../icons/UIIcons'; +import { useTranslation } from '../../hooks/useTranslation'; + +interface RegisterProps { + onRegister: (data: { username: string; password: string; displayName: string; language: string }) => Promise; + onSwitchToLogin: () => void; +} + +export function Register({ onRegister, onSwitchToLogin }: RegisterProps) { + const initialLang = (() => { + const saved = typeof localStorage !== 'undefined' ? localStorage.getItem('tidyquest_auth_lang') : null; + if (saved && ['en', 'fr', 'de', 'es'].includes(saved)) return saved; + const browser = typeof navigator !== 'undefined' ? navigator.language.slice(0, 2) : 'en'; + return ['en', 'fr', 'de', 'es'].includes(browser) ? browser : 'en'; + })(); + const [authLanguage, setAuthLanguage] = useState(initialLang); + const { t } = useTranslation(authLanguage); + const [displayName, setDisplayName] = useState(''); + const [username, setUsername] = useState(''); + const [password, setPassword] = useState(''); + const [error, setError] = useState(''); + const [loading, setLoading] = useState(false); + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + setError(''); + if (!displayName || !username || !password) { + setError(t('auth.allFieldsRequired')); + return; + } + setLoading(true); + try { + await onRegister({ username: username.trim(), password, displayName, language: authLanguage }); + window.location.href = '/'; + } catch (err: any) { + setError(err.message || t('auth.registrationFailed')); + } finally { + setLoading(false); + } + }; + + const inputStyle = { + width: '100%', padding: '10px 14px', borderRadius: 12, border: '1.5px solid #F0E6D9', + fontSize: 14, fontFamily: 'Nunito', fontWeight: 600 as const, color: '#3D2F1E', + outline: 'none', backgroundColor: '#FFFBF5', + }; + + return ( +
+
+
+
+ +
+

{t('auth.welcome')}

+

{t('auth.createYourAccount')}

+ +
+ +
+
+ + setDisplayName(e.target.value)} style={inputStyle} placeholder={t('auth.displayNamePlaceholder')} /> +
+
+ + setUsername(e.target.value)} style={inputStyle} placeholder={t('auth.usernamePlaceholder')} /> +
+
+ + setPassword(e.target.value)} style={inputStyle} placeholder={t('auth.passwordMinChars')} /> +
+ + {error &&
{error}
} + + +
+ +
+ +
+
+
+ ); +} diff --git a/client/src/components/pages/Rewards.tsx b/client/src/components/pages/Rewards.tsx new file mode 100644 index 0000000..5570ca4 --- /dev/null +++ b/client/src/components/pages/Rewards.tsx @@ -0,0 +1,219 @@ +import { useEffect, useMemo, useRef, useState, type CSSProperties } from 'react'; +import { CoinIcon } from '../icons/UIIcons'; +import { useTranslation } from '../../hooks/useTranslation'; + +interface Reward { + id: number; + title: string; + description?: string | null; + costCoins: number; + isPreset?: boolean; +} + +interface Redemption { + id: number; + title: string; + costCoins: number; + redeemedAt: string; + status: string; +} + +interface RewardsProps { + language?: string; + rewards: Reward[]; + mine: Redemption[]; + userCoins: number; + onRedeem: (rewardId: number) => Promise; + onCancel: (redemptionId: number) => Promise; +} + +export function Rewards({ language, rewards, mine, userCoins, onRedeem, onCancel }: RewardsProps) { + const { t } = useTranslation(language); + const [pendingRewardId, setPendingRewardId] = useState(null); + const [spendFx, setSpendFx] = useState<{ amount: number; key: number } | null>(null); + const [refundFx, setRefundFx] = useState<{ amount: number; key: number } | null>(null); + const previousStatuses = useRef>({}); + + const pendingReward = useMemo(() => rewards.find((r) => r.id === pendingRewardId) || null, [pendingRewardId, rewards]); + + const presetKeyByTitle: Record = { + 'movie night pick': 'movie_night', + 'ice cream treat': 'ice_cream', + 'stay up 30 min': 'late_bedtime', + 'game time bonus': 'game_bonus', + 'choose dinner': 'choose_dinner', + 'park adventure': 'park_adventure', + 'no-chore pass': 'chore_pass', + 'family board game': 'board_game', + }; + + const rewardTitleByName = (title: string): string => { + const k = presetKeyByTitle[title.toLowerCase()]; + if (k) return t(`rewardsPreset.${k}.title`); + return title; + }; + + const rewardTitle = (r: Reward): string => { + return rewardTitleByName(r.title); + }; + + const rewardDesc = (r: Reward): string => { + const k = presetKeyByTitle[r.title.toLowerCase()]; + if (k) return t(`rewardsPreset.${k}.desc`); + return r.description || t('rewards.noDescription'); + }; + + const confirmRedeem = async () => { + if (!pendingReward) return; + await onRedeem(pendingReward.id); + setSpendFx({ amount: pendingReward.costCoins, key: Date.now() }); + setPendingRewardId(null); + }; + + useEffect(() => { + if (!spendFx) return; + const id = window.setTimeout(() => setSpendFx(null), 1500); + return () => window.clearTimeout(id); + }, [spendFx]); + + useEffect(() => { + const prev = previousStatuses.current; + for (const r of mine) { + if (prev[r.id] === 'requested' && r.status === 'rejected') { + setRefundFx({ amount: r.costCoins, key: Date.now() + r.id }); + break; + } + } + const next: Record = {}; + mine.forEach((r) => { + next[r.id] = r.status; + }); + previousStatuses.current = next; + }, [mine]); + + useEffect(() => { + if (!refundFx) return; + const id = window.setTimeout(() => setRefundFx(null), 1800); + return () => window.clearTimeout(id); + }, [refundFx]); + + const statusLabel = (status: string): string => { + if (status === 'requested') return t('rewards.statusPending'); + if (status === 'approved') return t('rewards.statusApproved'); + if (status === 'rejected') return t('rewards.statusRejected'); + if (status === 'cancelled') return t('rewards.statusCancelled'); + return status; + }; + + const statusStyle = (status: string): CSSProperties => { + if (status === 'approved') return { color: '#15803D', backgroundColor: '#DCFCE7', border: '1px solid #86EFAC' }; + if (status === 'rejected') return { color: '#B91C1C', backgroundColor: '#FEE2E2', border: '1px solid #FCA5A5' }; + if (status === 'cancelled') return { color: '#374151', backgroundColor: '#E5E7EB', border: '1px solid #D1D5DB' }; + return { color: 'var(--warm-accent)', backgroundColor: 'var(--warm-accent-light)', border: '1px solid var(--warm-accent)' }; + }; + + return ( +
+ +
+
+ +
{userCoins} {t('settings.coins')}
+
+
{t('rewards.balanceHint')}
+
+ +
+

{t('rewards.catalog')}

+
+ {rewards.map((r) => { + const canBuy = userCoins >= r.costCoins; + return ( +
+
{rewardTitle(r)}
+
{rewardDesc(r)}
+
+
+ {r.costCoins} +
+ +
+
+ ); + })} +
+
+ +
+

{t('rewards.myRequests')}

+ {mine.length === 0 ? ( +
{t('rewards.noRequests')}
+ ) : ( +
+ {mine.map((m) => ( +
+
+
{rewardTitleByName(m.title)}
+
{new Date(m.redeemedAt).toLocaleString()}
+
+
+
- {m.costCoins}
+ + {statusLabel(m.status)} + + {m.status === 'requested' && ( + + )} +
+
+ ))} +
+ )} +
+ {pendingReward && ( +
+
+
{t('rewards.confirmTitle')}
+
+ {t('rewards.confirmText').replace('{reward}', rewardTitle(pendingReward)).replace('{coins}', String(pendingReward.costCoins))} +
+
+ + +
+
+
+ )} + {spendFx && ( +
+ -{spendFx.amount} +
+ )} + {refundFx && ( +
+ +{refundFx.amount} +
+ )} +
+ ); +} diff --git a/client/src/components/pages/RoomDetail.tsx b/client/src/components/pages/RoomDetail.tsx new file mode 100644 index 0000000..f366bd4 --- /dev/null +++ b/client/src/components/pages/RoomDetail.tsx @@ -0,0 +1,499 @@ +import { useState } from 'react'; +import { HealthBar } from '../shared/HealthBar'; +import { RingGauge } from '../shared/RingGauge'; +import { EffortDots } from '../shared/EffortDots'; +import { getRoomIcon } from '../icons/RoomIcons'; +import { TaskIcon, TASK_ICON_OPTIONS } from '../icons/TaskIcons'; +import { CheckIcon, BackIcon, PlusIcon } from '../icons/UIIcons'; +import { getRoomHealth } from '../../utils/health'; +import { api } from '../../hooks/useApi'; +import { useTranslation } from '../../hooks/useTranslation'; + +const FREQ_UNITS = [ + { label: 'hours', toDays: 1 / 24 }, + { label: 'days', toDays: 1 }, + { label: 'weeks', toDays: 7 }, + { label: 'months', toDays: 30 }, + { label: 'years', toDays: 365 }, +]; + +function daysToFreq(days: number): { value: number; unit: string } { + if (days >= 365 && days % 365 === 0) return { value: days / 365, unit: 'years' }; + if (days >= 30 && days % 30 === 0) return { value: days / 30, unit: 'months' }; + if (days >= 7 && days % 7 === 0) return { value: days / 7, unit: 'weeks' }; + if (days >= 1) return { value: days, unit: 'days' }; + return { value: Math.round(days * 24), unit: 'hours' }; +} + +function freqToDays(value: number, unit: string): number { + const u = FREQ_UNITS.find(f => f.label === unit); + return value * (u?.toDays || 1); +} + +function formatFreq(days: number, t: (key: string) => string): string { + const { value, unit } = daysToFreq(days); + const short = t(`unitsShort.${unit}`); + return `${value}${short}`; +} + +function healthColor(value: number): string { + if (value >= 70) return '#22C55E'; + if (value >= 40) return '#F59E0B'; + return '#EF4444'; +} + +type SortKey = 'name' | 'health' | 'effort' | 'frequency'; + +interface Task { + id: number; name: string; translationKey?: string; health: number; frequencyDays: number; + effort: number; notes?: string | null; isSeasonal: boolean; lastCompletedAt: string | null; iconKey?: string; +} + +interface RoomDetailProps { + room: { + id: number; name: string; roomType: string; color: string; accentColor: string; + tasks: Task[]; + }; + language?: string; + isAdmin: boolean; + onCompleteTask: (taskId: number) => void; + onBack: () => void; + onRefresh?: () => void; +} + +function FrequencyPicker({ value, unit, onChange, t }: { + value: number; unit: string; + onChange: (v: number, u: string) => void; + t: (key: string) => string; +}) { + return ( +
+ onChange(Math.max(1, parseInt(e.target.value) || 1), unit)} + style={{ + width: 52, padding: '6px 8px', borderRadius: 8, border: '1.5px solid var(--warm-border)', + fontSize: 12, fontFamily: 'Nunito', fontWeight: 700, color: 'var(--warm-text)', + outline: 'none', backgroundColor: 'var(--warm-bg-input)', textAlign: 'center', + }} /> + +
+ ); +} + +function EffortPicker({ effort, onChange }: { effort: number; onChange: (e: number) => void }) { + return ( +
+ {[1, 2, 3, 4, 5].map((e) => ( + + ))} +
+ ); +} + +export function RoomDetail({ room, language, isAdmin, onCompleteTask, onBack, onRefresh }: RoomDetailProps) { + const { taskName: translateTask, roomDisplayName, timeAgo, t } = useTranslation(language); + const [animatedTask, setAnimatedTask] = useState(null); + const [editingTask, setEditingTask] = useState(null); + const [editForm, setEditForm] = useState({ name: '', notes: '', freqValue: 7, freqUnit: 'days', effort: 1, health: 100, iconKey: 'sparkle' }); + const [showAddTask, setShowAddTask] = useState(false); + const [newTaskName, setNewTaskName] = useState(''); + const [newTaskNotes, setNewTaskNotes] = useState(''); + const [newFreqValue, setNewFreqValue] = useState(7); + const [newFreqUnit, setNewFreqUnit] = useState('days'); + const [newTaskEffort, setNewTaskEffort] = useState(2); + const [newTaskHealth, setNewTaskHealth] = useState(100); + const [newTaskIconKey, setNewTaskIconKey] = useState('sparkle'); + const [sortKey, setSortKey] = useState('health'); + const [sortAsc, setSortAsc] = useState(true); + + const health = getRoomHealth(room.tasks); + const RoomIcon = getRoomIcon(room.roomType); + + const sortedTasks = [...room.tasks].sort((a, b) => { + let cmp = 0; + switch (sortKey) { + case 'name': cmp = a.name.localeCompare(b.name); break; + case 'health': cmp = a.health - b.health; break; + case 'effort': cmp = a.effort - b.effort; break; + case 'frequency': cmp = a.frequencyDays - b.frequencyDays; break; + } + return sortAsc ? cmp : -cmp; + }); + + const handleSort = (key: SortKey) => { + if (sortKey === key) { setSortAsc(!sortAsc); } + else { setSortKey(key); setSortAsc(true); } + }; + + const sortIndicator = (key: SortKey) => { + if (sortKey !== key) return ''; + return sortAsc ? ' \u25B2' : ' \u25BC'; + }; + + const handleComplete = (taskId: number) => { + setAnimatedTask(taskId); + onCompleteTask(taskId); + setTimeout(() => setAnimatedTask(null), 2200); + }; + + const startEdit = (task: Task) => { + const { value, unit } = daysToFreq(task.frequencyDays); + setEditingTask(task.id); + setEditForm({ name: task.name, notes: task.notes || '', freqValue: value, freqUnit: unit, effort: task.effort, health: task.health, iconKey: task.iconKey || 'sparkle' }); + }; + + const saveEdit = async () => { + if (!editingTask) return; + const frequencyDays = freqToDays(editForm.freqValue, editForm.freqUnit); + await api.updateTask(editingTask, { name: editForm.name, notes: editForm.notes, frequencyDays, effort: editForm.effort, health: editForm.health, iconKey: editForm.iconKey }); + setEditingTask(null); + onRefresh?.(); + }; + + const deleteTask = async (taskId: number) => { + await api.deleteTask(taskId); + setEditingTask(null); + onRefresh?.(); + }; + + const addTask = async () => { + if (!newTaskName.trim()) return; + const frequencyDays = freqToDays(newFreqValue, newFreqUnit); + await api.createTask(room.id, { + name: newTaskName.trim(), + notes: newTaskNotes.trim() || undefined, + frequencyDays, + effort: newTaskEffort, + health: newTaskHealth, + iconKey: newTaskIconKey, + }); + setNewTaskName(''); + setNewTaskNotes(''); + setNewFreqValue(7); + setNewFreqUnit('days'); + setNewTaskEffort(2); + setNewTaskHealth(100); + setNewTaskIconKey('sparkle'); + setShowAddTask(false); + onRefresh?.(); + }; + + const colStyle = (key: SortKey): React.CSSProperties => ({ + cursor: 'pointer', userSelect: 'none', + color: sortKey === key ? 'var(--warm-accent)' : 'var(--warm-text-light)', + }); + + return ( +
+ {/* Header */} +
+ +
+
+

{roomDisplayName(room.name, room.roomType)}

+
{room.tasks.length} {t('rooms.tasksTracked')}
+
+ +
+ + {/* Task Table */} +
+ {/* Column Headers (sortable) */} +
+
handleSort('name')}>{t('history.task')}{sortIndicator('name')}
+
handleSort('health')}>{t('rooms.health')}{sortIndicator('health')}
+
handleSort('frequency')}>{t('roomDetail.frequency')}{sortIndicator('frequency')}
+
handleSort('effort')}>{t('roomDetail.effort')}{sortIndicator('effort')}
+
{t('roomDetail.actions')}
+
+ + {sortedTasks.map((task) => ( +
+ {editingTask === task.id ? ( +
+
+
+ + setEditForm(f => ({ ...f, name: e.target.value }))} + style={{ + flex: 1, padding: '8px 12px', borderRadius: 10, border: '1.5px solid var(--warm-border)', + fontSize: 13, fontFamily: 'Nunito', fontWeight: 700, color: 'var(--warm-text)', + outline: 'none', backgroundColor: 'var(--warm-bg-input)', + }} /> +
+
+ +