From 1bd3ff218eb620d74713681c9676c1a611bbe7f7 Mon Sep 17 00:00:00 2001 From: haroune-dev Date: Sat, 25 Apr 2026 09:39:58 +0100 Subject: [PATCH 1/2] add prayer time project --- web/Miqaat | 1 + 1 file changed, 1 insertion(+) create mode 160000 web/Miqaat diff --git a/web/Miqaat b/web/Miqaat new file mode 160000 index 0000000..e0162cb --- /dev/null +++ b/web/Miqaat @@ -0,0 +1 @@ +Subproject commit e0162cbcd9635e2f4e21ae0c813c5bb245e81152 From ba39a20c0542efc3280eb4f6cb4ea95af21e9cd9 Mon Sep 17 00:00:00 2001 From: haroune-dev Date: Sat, 25 Apr 2026 12:31:17 +0100 Subject: [PATCH 2/2] add: Miqaat project for Smart Prayer Times App - React Challenge --- web/Miqaat | 1 - web/Miqaat/.gitignore | 10 + web/Miqaat/README.md | 165 + .../__global/footer-information.module.css | 174 + .../blocks/__global/footer-information.tsx | 108 + .../__global/navigation-header.module.css | 152 + .../app/blocks/__global/navigation-header.tsx | 68 + .../blocks/calendar/calendar-grid.module.css | 183 + .../app/blocks/calendar/calendar-grid.tsx | 75 + .../home/additional-info-section.module.css | 49 + .../blocks/home/additional-info-section.tsx | 76 + .../home/current-prayer-highlight.module.css | 110 + .../blocks/home/current-prayer-highlight.tsx | 78 + .../blocks/home/current-time-card.module.css | 72 + .../app/blocks/home/current-time-card.tsx | 40 + .../blocks/home/location-display.module.css | 65 + .../app/blocks/home/location-display.tsx | 32 + .../home/next-prayer-countdown.module.css | 109 + .../app/blocks/home/next-prayer-countdown.tsx | 78 + .../blocks/home/prayer-times-grid.module.css | 152 + .../app/blocks/home/prayer-times-grid.tsx | 83 + .../gps-location-button.module.css | 43 + .../gps-location-button.tsx | 66 + .../search-header.module.css | 24 + .../location-selection/search-header.tsx | 24 + .../wilaya-baladiya-selector.module.css | 134 + .../wilaya-baladiya-selector.tsx | 176 + .../settings/language-toggle.module.css | 78 + .../app/blocks/settings/language-toggle.tsx | 47 + .../settings/notification-toggle.module.css | 241 + .../blocks/settings/notification-toggle.tsx | 150 + .../settings/settings-actions.module.css | 110 + .../app/blocks/settings/settings-actions.tsx | 55 + .../blocks/settings/theme-toggle.module.css | 92 + .../app/blocks/settings/theme-toggle.tsx | 46 + .../settings/time-format-toggle.module.css | 76 + .../blocks/settings/time-format-toggle.tsx | 47 + .../error-boundary/error-boundary.module.css | 59 + .../error-boundary/error-boundary.tsx | 42 + .../loading-skeleton/loading-skeleton.tsx | 24 + .../app/components/toast/toast.module.css | 88 + web/Miqaat/app/components/toast/toast.tsx | 55 + web/Miqaat/app/context/app-context.tsx | 20 + web/Miqaat/app/data/prayer-data.ts | 37 + web/Miqaat/app/hooks/use-clock.ts | 128 + web/Miqaat/app/hooks/use-countdown.ts | 39 + .../app/hooks/use-location-selection.ts | 121 + .../app/hooks/use-notification-permission.ts | 52 + web/Miqaat/app/hooks/use-notifications.ts | 85 + web/Miqaat/app/hooks/use-prayer-status.ts | 52 + web/Miqaat/app/hooks/use-prayer-times.ts | 193 + web/Miqaat/app/hooks/use-settings-draft.ts | 109 + web/Miqaat/app/i18n/language-context.tsx | 63 + web/Miqaat/app/i18n/translations.ts | 249 + web/Miqaat/app/root.module.css | 12 + web/Miqaat/app/root.tsx | 69 + web/Miqaat/app/routes.ts | 8 + web/Miqaat/app/routes/calendar.module.css | 228 + web/Miqaat/app/routes/calendar.tsx | 150 + web/Miqaat/app/routes/home.module.css | 65 + web/Miqaat/app/routes/home.tsx | 44 + web/Miqaat/app/routes/location-selection.tsx | 89 + web/Miqaat/app/routes/settings.module.css | 81 + web/Miqaat/app/routes/settings.tsx | 121 + web/Miqaat/app/services/api.ts | 225 + web/Miqaat/app/services/prayerApi.ts | 118 + web/Miqaat/app/styles/global.css | 124 + web/Miqaat/app/styles/reset.css | 72 + web/Miqaat/app/styles/theme.css | 104 + web/Miqaat/app/utils/time-utils.ts | 42 + web/Miqaat/package-lock.json | 4174 +++++++++++++++++ web/Miqaat/package.json | 50 + web/Miqaat/pictures/Pasted image (2).png | Bin 0 -> 33526 bytes web/Miqaat/pictures/Pasted image (3).png | Bin 0 -> 86334 bytes web/Miqaat/pictures/Pasted image.png | Bin 0 -> 144517 bytes .../pictures/photo_2026-04-21_06-54-32.jpg | Bin 0 -> 39085 bytes web/Miqaat/public/logo.jpg | Bin 0 -> 39085 bytes web/Miqaat/public/manifest.json | 18 + web/Miqaat/public/service-worker.js | 31 + web/Miqaat/react-router.config.ts | 10 + web/Miqaat/tsconfig.json | 21 + web/Miqaat/vite.config.ts | 8 + 82 files changed, 10568 insertions(+), 1 deletion(-) delete mode 160000 web/Miqaat create mode 100644 web/Miqaat/.gitignore create mode 100644 web/Miqaat/README.md create mode 100644 web/Miqaat/app/blocks/__global/footer-information.module.css create mode 100644 web/Miqaat/app/blocks/__global/footer-information.tsx create mode 100644 web/Miqaat/app/blocks/__global/navigation-header.module.css create mode 100644 web/Miqaat/app/blocks/__global/navigation-header.tsx create mode 100644 web/Miqaat/app/blocks/calendar/calendar-grid.module.css create mode 100644 web/Miqaat/app/blocks/calendar/calendar-grid.tsx create mode 100644 web/Miqaat/app/blocks/home/additional-info-section.module.css create mode 100644 web/Miqaat/app/blocks/home/additional-info-section.tsx create mode 100644 web/Miqaat/app/blocks/home/current-prayer-highlight.module.css create mode 100644 web/Miqaat/app/blocks/home/current-prayer-highlight.tsx create mode 100644 web/Miqaat/app/blocks/home/current-time-card.module.css create mode 100644 web/Miqaat/app/blocks/home/current-time-card.tsx create mode 100644 web/Miqaat/app/blocks/home/location-display.module.css create mode 100644 web/Miqaat/app/blocks/home/location-display.tsx create mode 100644 web/Miqaat/app/blocks/home/next-prayer-countdown.module.css create mode 100644 web/Miqaat/app/blocks/home/next-prayer-countdown.tsx create mode 100644 web/Miqaat/app/blocks/home/prayer-times-grid.module.css create mode 100644 web/Miqaat/app/blocks/home/prayer-times-grid.tsx create mode 100644 web/Miqaat/app/blocks/location-selection/gps-location-button.module.css create mode 100644 web/Miqaat/app/blocks/location-selection/gps-location-button.tsx create mode 100644 web/Miqaat/app/blocks/location-selection/search-header.module.css create mode 100644 web/Miqaat/app/blocks/location-selection/search-header.tsx create mode 100644 web/Miqaat/app/blocks/location-selection/wilaya-baladiya-selector.module.css create mode 100644 web/Miqaat/app/blocks/location-selection/wilaya-baladiya-selector.tsx create mode 100644 web/Miqaat/app/blocks/settings/language-toggle.module.css create mode 100644 web/Miqaat/app/blocks/settings/language-toggle.tsx create mode 100644 web/Miqaat/app/blocks/settings/notification-toggle.module.css create mode 100644 web/Miqaat/app/blocks/settings/notification-toggle.tsx create mode 100644 web/Miqaat/app/blocks/settings/settings-actions.module.css create mode 100644 web/Miqaat/app/blocks/settings/settings-actions.tsx create mode 100644 web/Miqaat/app/blocks/settings/theme-toggle.module.css create mode 100644 web/Miqaat/app/blocks/settings/theme-toggle.tsx create mode 100644 web/Miqaat/app/blocks/settings/time-format-toggle.module.css create mode 100644 web/Miqaat/app/blocks/settings/time-format-toggle.tsx create mode 100644 web/Miqaat/app/components/error-boundary/error-boundary.module.css create mode 100644 web/Miqaat/app/components/error-boundary/error-boundary.tsx create mode 100644 web/Miqaat/app/components/loading-skeleton/loading-skeleton.tsx create mode 100644 web/Miqaat/app/components/toast/toast.module.css create mode 100644 web/Miqaat/app/components/toast/toast.tsx create mode 100644 web/Miqaat/app/context/app-context.tsx create mode 100644 web/Miqaat/app/data/prayer-data.ts create mode 100644 web/Miqaat/app/hooks/use-clock.ts create mode 100644 web/Miqaat/app/hooks/use-countdown.ts create mode 100644 web/Miqaat/app/hooks/use-location-selection.ts create mode 100644 web/Miqaat/app/hooks/use-notification-permission.ts create mode 100644 web/Miqaat/app/hooks/use-notifications.ts create mode 100644 web/Miqaat/app/hooks/use-prayer-status.ts create mode 100644 web/Miqaat/app/hooks/use-prayer-times.ts create mode 100644 web/Miqaat/app/hooks/use-settings-draft.ts create mode 100644 web/Miqaat/app/i18n/language-context.tsx create mode 100644 web/Miqaat/app/i18n/translations.ts create mode 100644 web/Miqaat/app/root.module.css create mode 100644 web/Miqaat/app/root.tsx create mode 100644 web/Miqaat/app/routes.ts create mode 100644 web/Miqaat/app/routes/calendar.module.css create mode 100644 web/Miqaat/app/routes/calendar.tsx create mode 100644 web/Miqaat/app/routes/home.module.css create mode 100644 web/Miqaat/app/routes/home.tsx create mode 100644 web/Miqaat/app/routes/location-selection.tsx create mode 100644 web/Miqaat/app/routes/settings.module.css create mode 100644 web/Miqaat/app/routes/settings.tsx create mode 100644 web/Miqaat/app/services/api.ts create mode 100644 web/Miqaat/app/services/prayerApi.ts create mode 100644 web/Miqaat/app/styles/global.css create mode 100644 web/Miqaat/app/styles/reset.css create mode 100644 web/Miqaat/app/styles/theme.css create mode 100644 web/Miqaat/app/utils/time-utils.ts create mode 100644 web/Miqaat/package-lock.json create mode 100644 web/Miqaat/package.json create mode 100644 web/Miqaat/pictures/Pasted image (2).png create mode 100644 web/Miqaat/pictures/Pasted image (3).png create mode 100644 web/Miqaat/pictures/Pasted image.png create mode 100644 web/Miqaat/pictures/photo_2026-04-21_06-54-32.jpg create mode 100644 web/Miqaat/public/logo.jpg create mode 100644 web/Miqaat/public/manifest.json create mode 100644 web/Miqaat/public/service-worker.js create mode 100644 web/Miqaat/react-router.config.ts create mode 100644 web/Miqaat/tsconfig.json create mode 100644 web/Miqaat/vite.config.ts diff --git a/web/Miqaat b/web/Miqaat deleted file mode 160000 index e0162cb..0000000 --- a/web/Miqaat +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e0162cbcd9635e2f4e21ae0c813c5bb245e81152 diff --git a/web/Miqaat/.gitignore b/web/Miqaat/.gitignore new file mode 100644 index 0000000..98400f0 --- /dev/null +++ b/web/Miqaat/.gitignore @@ -0,0 +1,10 @@ + +.DS_Store +/node_modules/ + +# React Router +/.react-router/ +/build/ +.env + +.netlify diff --git a/web/Miqaat/README.md b/web/Miqaat/README.md new file mode 100644 index 0000000..ff12530 --- /dev/null +++ b/web/Miqaat/README.md @@ -0,0 +1,165 @@ +# 🌙 ميقات | Miqaat +> Accurate prayer times for Algerian Wilayas. + +[![React](https://img.shields.io/badge/React-20232A?style=for-the-badge&logo=react&logoColor=61DAFB)](https://react.dev/) +[![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white)](https://www.typescriptlang.org/) +[![CSS3](https://img.shields.io/badge/CSS3-1572B6?style=for-the-badge&logo=css3&logoColor=white)](https://developer.mozilla.org/en-US/docs/Web/CSS) +[![Tailwind CSS](https://img.shields.io/badge/Tailwind_CSS-38B2AC?style=for-the-badge&logo=tailwind-css&logoColor=white)](https://tailwindcss.com/) +[![React Router](https://img.shields.io/badge/React_Router-CA4245?style=for-the-badge&logo=react-router&logoColor=white)](https://reactrouter.com/) + +

+ Miqaat Logo +

+ +

+ Overview • + Live Demo • + Key Features • + Screenshots • + Tech Stack • + Getting Started +

+ +## ✨ Overview +**Miqaat** is a web application designed to provide accurate prayer times specifically for users in Algeria. + +## 🌐 Live Demo +[View App](https://miqaat-eight.vercel.app/) + +## 🚀 Key Features +* 📍 **Dynamic Location Selection**: Easily choose your Wilaya using an interface or by using automatic GPS detection. +* ⏳ **Live Countdown**: Real-time updates and countdowns to the next prayer time. +* 📅 **Comprehensive Calendar**: View weekly and monthly prayer schedules with an elegant, printable layout. +* 🌓 **Dark Mode Support**: Fully responsive design that adapts to your system preferences. +* 🔔 **Smart Notifications**: Frontend-scheduled notifications firing 1 minute before each prayer. +* 📲 **PWA-ready Architecture**: Designed for future offline support and mobile installability. + +## 📸 Screenshots + +### 🏠 Home Dashboard +Comprehensive view of current and upcoming prayer times with a live clock. +

+ Home Screen +

+ +### 📍 Location Selection +an interface for choosing your location via list or GPS. +

+ Location Selection +

+ +### 🗓️ Prayer Calendar +weekly/monthly prayer time calendar. +

+ Calendar View +

+ +## 🛠️ Tech Stack +* **Frontend**: React (React Router v7) +* **Language**: TypeScript +* **Styling**: + - **Tailwind CSS** (utility-first) + - **Custom CSS** (design tokens, shimmer animations, theming system) +* **Icons**: Lucide React +* **Persistence**: LocalStorage for user preferences +* **Deployment**: Optimized production build via Vite + +## 💎 Design System +Miqaat is built on a custom design system that ensures visual consistency and a premium user experience. + +| Token Category | Implementation | +| :--- | :--- | +| **Typography** | `Changa` (Arabic Brand), `DM Sans` (Body), `Cormorant Garamond` (Display) | +| **Color Palette** | Deep Algerian Indigo (`#1A5276`) & Luxurious Gold (`#C9A84C`) | +| **Visual Effects** | Glassmorphism, Shimmering Skeletons, and Custom Glow Shadows | + + +## 🏗️ Project Architecture +The project follows a modular and scalable architecture, separating UI concerns from business logic and data fetching. + +### 🧩 System Overview +```mermaid +graph TD + subgraph UI_Layer [UI Layer] + R[Routes / Pages] --> B[Blocks / Layout Sections] + B --> C[Atomic Components] + end + + subgraph Logic_Layer [Logic & State] + B --> H[Custom Hooks] + H --> CTX[Global Context] + CTX --> LS[(LocalStorage)] + end + + subgraph Data_Layer [Data Layer] + H --> S[API Services] + S --> API[External Adhan API] + S --> D[Static Data / Types] + end + + style UI_Layer fill:#f0f7ff,stroke:#0369a1,stroke-width:2px + style Logic_Layer fill:#f0fdf4,stroke:#15803d,stroke-width:2px + style Data_Layer fill:#fff7ed,stroke:#c2410c,stroke-width:2px +``` + +### 📁 Directory Breakdown +* **`app/routes/`**: Entry points for each page (Home, Settings, Calendar, Location). +* **`app/blocks/`**: Complex, layout-specific sections (e.g., Prayer Grid, Search Header) that compose pages. +* **`app/components/`**: Reusable atomic UI elements (Buttons, Inputs, Skeletons) following a consistent design system. +* **`app/hooks/`**: Encapsulated business logic (GPS tracking, prayer time calculations, countdown timers). +* **`app/context/`**: Global state management using React Context for user preferences and location data. +* **`app/services/`**: Data fetching layer and API clients for external communication. +* **`app/data/`**: Static configuration, types, and constants. +* **`app/i18n/`**: Localization dictionary and logic for Arabic/English support. + + +## 🔌 API Integration +Miqaat leverages the [Adhan DZ API](https://adhan-dz.dexter21767.com) to provide accurate, real-time data specifically for Algeria. + +### Data Fetching +* **Source**: [adhan-dz.dexter21767.com](https://adhan-dz.dexter21767.com) +* **Endpoints**: + - `/cities`: Fetches a comprehensive list of Algerian Wilayas and Baladiyas. + - `/prayerTimes`: Retrieves daily or monthly prayer schedules based on the selected city ID and date range. +* **Implementation**: Logic is centralized in [prayerApi.ts](file:///home/haroune-dev/Desktop/Miqaat/app/services/prayerApi.ts) (raw fetch layer) and [api.ts](file:///home/haroune-dev/Desktop/Miqaat/app/services/api.ts) (application mapping). + +### Key Features +* **Dynamic Data**: Times are fetched dynamically based on the user's selected location. +* **State Sync**: Custom hooks (`usePrayerTimes`) handle loading states, error reporting, and real-time synchronization with the application context. + + +## 🏁 Getting Started + +### Prerequisites +* Node.js (LTS version recommended) +* npm or yarn + +### Installation +1. Clone the repository: + ```bash + git clone https://github.com/Haroune-dev/miqaat.git + ``` +2. Install dependencies: + ```bash + npm install + ``` +3. Start the development server: + ```bash + npm run dev + ``` + +## 🌟 Project Highlights +* **Zero Layout Shift**: Optimized loading skeletons for a premium first-load experience. +* **RTL/LTR Support**: Fully localized interface for Arabic and English users. +* **Performance**: Lightweight bundle with optimized asset delivery. + +## 🔮 Future Improvements +* [ ] Full Offline Data Persistence (Service Worker). +* [ ] Support for Baladiyas (Sub-provinces). +* [ ] Multi-language Expansion (French support). +* [ ] Advanced Analytics & Insights. + +## 👤 Author +**Haroune-dev** + +--- diff --git a/web/Miqaat/app/blocks/__global/footer-information.module.css b/web/Miqaat/app/blocks/__global/footer-information.module.css new file mode 100644 index 0000000..ad934a9 --- /dev/null +++ b/web/Miqaat/app/blocks/__global/footer-information.module.css @@ -0,0 +1,174 @@ +.root { + background-color: #0b1120; /* very dark navy */ + color: #f8fafc; +} + +.brand { + text-decoration: none; + color: #f8fafc; +} + +.brandText { + font-family: var(--family-display); + font-size: 1.75rem; + font-weight: 700; +} + +:global([lang="ar"]) .brandText { + font-family: var(--family-brand-ar); + font-weight: 700; + font-size: 2rem; +} + +.logoImg { + width: 2.25rem; + height: 2.25rem; + border-radius: var(--radius-sm); + object-fit: cover; + background: white; + padding: 2px; +} + +.slogan { + font-size: var(--text-sm); + color: #94a3b8; + opacity: 0.8; + max-width: 500px; + text-align: center; + margin: 0; +} + +.gridTitle { + font-size: 1.1rem; + font-weight: 700; + margin: 0; +} + +.gridLink { + display: flex; + align-items: center; + padding: var(--space-3) var(--space-4); + border-radius: var(--radius-lg); + color: #94a3b8; + text-decoration: none; + transition: all 0.3s; +} + +.gridLink:hover { + background: rgba(255, 255, 255, 0.05); + color: #f8fafc; +} + +.gridLink svg { + color: #94a3b8; + transition: color 0.3s; +} + +.gridLink:hover svg { + color: #f8fafc; +} + +.linkText { + flex: 1; + margin: 0 var(--space-4); + font-weight: 500; + font-size: var(--text-lg); +} + +.chevron { + opacity: 0.5; +} + +.contactDesc { + color: #94a3b8; + font-size: var(--text-md); + margin: 0; + text-align: center; +} + +.contactButton { + display: flex; + align-items: center; + gap: var(--space-2); + padding: var(--space-1) var(--space-4); + background: rgba(255, 255, 255, 0.05); + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: var(--radius-md); + color: #38bdf8; + text-decoration: none; + font-weight: 600; + font-size: var(--text-xs); + transition: all 0.3s; +} + +.contactButton:hover { + background: rgba(56, 189, 248, 0.1); + border-color: #38bdf8; + transform: translateY(-2px); +} + +.boxIcon { + width: 2rem; + height: 2rem; + background: rgba(255, 255, 255, 0.05); + border-radius: var(--radius-sm); + display: flex; + align-items: center; + justify-content: center; + transition: all 0.3s; +} + +.boxIcon svg { + color: #94a3b8; + transition: color 0.3s, transform 0.3s; +} + +.boxIcon:hover { + background: rgba(255, 255, 255, 0.1); +} + +.boxIcon:hover svg { + color: #f8fafc; + transform: scale(1.1); +} + +.copyLine1 { + font-size: var(--text-base); + font-weight: 600; + margin: 0; + color: #f8fafc; + opacity: 0.8; + white-space: nowrap; +} + +.copyLine2 { + font-size: var(--text-sm); + margin: var(--space-1) 0 0; + color: #64748b; + white-space: nowrap; +} + +.scrollTop { + width: 2.25rem; + height: 2.25rem; + background: rgba(255, 255, 255, 0.05); + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + color: #38bdf8; + cursor: pointer; + transition: all 0.3s; +} + +.scrollTop:hover { + background: rgba(56, 189, 248, 0.1); + transform: translateY(-4px); +} + +@media (max-width: 850px) { + .brandText { + font-size: 2.5rem; + } +} diff --git a/web/Miqaat/app/blocks/__global/footer-information.tsx b/web/Miqaat/app/blocks/__global/footer-information.tsx new file mode 100644 index 0000000..c014236 --- /dev/null +++ b/web/Miqaat/app/blocks/__global/footer-information.tsx @@ -0,0 +1,108 @@ +import { Mail, ChevronRight, ArrowUp } from "lucide-react"; +import { Link } from "react-router"; +import classnames from "classnames"; +import { useLanguage } from "~/i18n/language-context"; +import style from "./footer-information.module.css"; + +export interface FooterInformationProps { + className?: string; +} + +const GithubIcon = ({ size = 20 }: { size?: number }) => ( + + + +); + +const LinkedinIcon = ({ size = 20 }: { size?: number }) => ( + + + +); + +export function FooterInformation({ className }: FooterInformationProps) { + const { t } = useLanguage(); + + const scrollToTop = () => { + if (typeof window !== 'undefined') { + window.scrollTo({ top: 0, behavior: 'smooth' }); + } + }; + + return ( +
+
+ {/* Top Header */} +
+ + {t("nav.logo.prayer")} + Logo + +

{t("footer.slogan")}

+
+ + {/* Main Sections */} +
+
+ {/* Links Section */} +
+

{t("footer.links")}

+ +
+ + {/* Contact Section */} +
+

{t("footer.contact")}

+
+

{t("footer.contactDesc")}

+ + + {t("footer.sendMessage")} + +
+
+
+
+ + {/* Bottom Bar */} +
+
+ +
+ +
+

haroune zeraib © 2026

+

{t("footer.subCopy")}

+
+ +
+ +
+
+
+
+ ); +} diff --git a/web/Miqaat/app/blocks/__global/navigation-header.module.css b/web/Miqaat/app/blocks/__global/navigation-header.module.css new file mode 100644 index 0000000..d45744f --- /dev/null +++ b/web/Miqaat/app/blocks/__global/navigation-header.module.css @@ -0,0 +1,152 @@ +.root { + display: flex; + align-items: center; + justify-content: space-between; + min-height: 64px; + padding: var(--space-4) 24px; + background-color: color-mix(in srgb, var(--color-bg-card) 85%, transparent); + backdrop-filter: blur(8px); + -webkit-backdrop-filter: blur(8px); + border-bottom: 1px solid var(--color-border); + box-shadow: 0 4px 6px -1px rgba(0,0,0,0.05), 0 2px 4px -1px rgba(0,0,0,0.03); + position: sticky; + top: 0; + z-index: 100; +} + +.logo { + display: flex; + align-items: center; + gap: var(--space-3); + text-decoration: none; + color: var(--color-text); +} + +.logoIcon { + display: flex; + align-items: center; + justify-content: center; + width: 2.75rem; + height: 2.75rem; + background: var(--color-primary); + border-radius: var(--radius-md); + color: #fff; + flex-shrink: 0; +} + +.logoText { + font-family: var(--family-display); + font-size: var(--text-2xl); + font-weight: 700; + color: var(--color-primary); + letter-spacing: 0.01em; +} + +:global([lang="ar"]) .logoText { + font-family: var(--family-brand-ar); + font-weight: 700; + font-size: 2.25rem; +} + +.navWrapper { + display: flex; +} + +.nav { + display: flex; + align-items: center; + gap: var(--space-5); +} + +.navLink { + position: relative; + display: flex; + align-items: center; + gap: var(--space-2); + padding: var(--space-2) var(--space-3); + border-radius: var(--radius-sm); + font-size: var(--text-base); + font-weight: 500; + color: var(--color-text-muted); + text-decoration: none; + transition: color 0.3s ease; +} + +.navLink::after { + content: ''; + position: absolute; + bottom: 0; + left: 0; + width: 0%; + height: 2px; + background-color: var(--color-primary); + transition: width 0.3s ease; + border-radius: 2px; +} + +.navLink:hover { + color: var(--color-text); +} + +.navLink:hover::after { + width: 100%; +} + +.navLinkActive { + color: var(--color-primary); + font-weight: 600; +} + +.navLinkActive::after { + width: 100%; +} + +.menuToggle { + display: none; + background: none; + border: none; + color: var(--color-text); + cursor: pointer; + padding: var(--space-2); + align-items: center; + justify-content: center; +} + +@media (max-width: 768px) { + .menuToggle { + display: flex; + } + + .navWrapper { + position: absolute; + top: 100%; + left: 0; + right: 0; + background: var(--color-bg-card); + border-bottom: 1px solid var(--color-border); + box-shadow: 0 4px 6px -1px rgba(0,0,0,0.05); + padding: 0 24px; + display: flex; + flex-direction: column; + max-height: 0; + overflow: hidden; + transition: max-height 0.3s ease-in-out, padding 0.3s ease-in-out; + } + + .navWrapperOpen { + max-height: 300px; + padding: var(--space-4) 24px; + } + + .nav { + flex-direction: column; + align-items: flex-start; + width: 100%; + gap: var(--space-3); + } + + .navLink { + padding: var(--space-3) 0; + width: 100%; + } +} diff --git a/web/Miqaat/app/blocks/__global/navigation-header.tsx b/web/Miqaat/app/blocks/__global/navigation-header.tsx new file mode 100644 index 0000000..570ef79 --- /dev/null +++ b/web/Miqaat/app/blocks/__global/navigation-header.tsx @@ -0,0 +1,68 @@ +import { NavLink, Link, useLocation } from "react-router"; +import { Settings, MapPin, CalendarDays, Menu, X } from "lucide-react"; +import classnames from "classnames"; +import { useState, useEffect } from "react"; +import { useLanguage } from "~/i18n/language-context"; +import style from "./navigation-header.module.css"; + +export interface NavigationHeaderProps { + className?: string; +} + +export function NavigationHeader({ className }: NavigationHeaderProps) { + const { t } = useLanguage(); + const [isMenuOpen, setIsMenuOpen] = useState(false); + const location = useLocation(); + + useEffect(() => { + setIsMenuOpen(false); + }, [location]); + + return ( + + ); +} diff --git a/web/Miqaat/app/blocks/calendar/calendar-grid.module.css b/web/Miqaat/app/blocks/calendar/calendar-grid.module.css new file mode 100644 index 0000000..15c627c --- /dev/null +++ b/web/Miqaat/app/blocks/calendar/calendar-grid.module.css @@ -0,0 +1,183 @@ +.root { + width: 100%; +} + +.tableWrapper { + background: var(--color-bg-card); + border-radius: var(--radius-xl); + padding: var(--space-6); + box-shadow: var(--shadow-lg); + overflow-x: auto; + transition: transform 0.3s ease, box-shadow 0.3s ease; +} + +.tableWrapper:hover { + transform: translateY(-4px); + box-shadow: var(--shadow-xl); +} + +.table { + width: 100%; + border-collapse: collapse; + background: transparent; + font-size: var(--text-base); + min-width: max-content; +} + +.headerRow { + background: var(--color-primary); +} + +.th { + padding: var(--space-4) var(--space-3); + text-align: center; + font-weight: 700; + font-size: var(--text-xs); + text-transform: uppercase; + letter-spacing: 0.1em; + color: var(--color-text-inverse); + white-space: nowrap; +} + +.th:first-child { + width: 200px; /* Slightly more space for the full date */ +} + +.row { + border-bottom: 1px solid var(--color-border-light); + transition: background 0.15s; +} + +.row:last-child { + border-bottom: none; +} + +.row:hover { + background: var(--color-highlight); +} + +.rowToday { + background: var(--color-highlight); + font-weight: 600; +} + +.rowToday:hover { + background: var(--color-highlight); +} + +.td { + padding: var(--space-4) var(--space-3); + text-align: center; + color: var(--color-text); + font-family: var(--family-mono); + white-space: nowrap; + font-size: var(--text-base); +} + +.dayCell { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: var(--space-2); +} + +.dayInfo { + display: flex; + flex-direction: column; + line-height: 1.2; + gap: 2px; +} + +.dayName { + font-weight: 700; + color: var(--color-primary); + font-size: var(--text-base); +} + +.dateText { + font-size: var(--text-xs); + color: var(--color-text-muted); + font-weight: 500; +} + +.todayBadge { + display: inline-block; + padding: 0.125rem 0.5rem; + border-radius: var(--radius-full); + background: var(--color-accent); + color: var(--color-text-inverse); + font-size: 0.625rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.05em; +} + +@media (max-width: 480px) { + .th, + .td { + padding: var(--space-2) var(--space-4); + font-size: var(--text-xs); + } +} + +/* ── Print Styles ────────────────────────────────────── */ +@media print { + .root { + width: 100%; + } + + .tableWrapper { + border: 1px solid #ccc; + box-shadow: none; + overflow: visible; + } + + .table { + min-width: 0; + font-size: 10pt; + } + + .headerRow { + background: #1a5276 !important; + -webkit-print-color-adjust: exact; + print-color-adjust: exact; + } + + .th { + color: #fff !important; + -webkit-print-color-adjust: exact; + print-color-adjust: exact; + padding: 4pt 6pt; + } + + .row { + border-bottom: 1px solid #ddd; + } + + .row:hover { + background: transparent; + } + + .rowToday { + background: #f0f4f8 !important; + -webkit-print-color-adjust: exact; + print-color-adjust: exact; + } + + .td { + padding: 4pt 6pt; + color: #000; + } + + .dayCell { + color: #1a5276; + } + + .todayBadge { + background: #c9a84c; + color: #fff; + -webkit-print-color-adjust: exact; + print-color-adjust: exact; + } +} diff --git a/web/Miqaat/app/blocks/calendar/calendar-grid.tsx b/web/Miqaat/app/blocks/calendar/calendar-grid.tsx new file mode 100644 index 0000000..53a8514 --- /dev/null +++ b/web/Miqaat/app/blocks/calendar/calendar-grid.tsx @@ -0,0 +1,75 @@ +import classnames from "classnames"; +import type { DayPrayerTimes } from "~/services/api"; +import { useLanguage } from "~/i18n/language-context"; +import type { TranslationKey } from "~/i18n/translations"; +import style from "./calendar-grid.module.css"; +import { formatTime } from "~/utils/time-utils"; + + +export interface CalendarGridProps { + className?: string; + data: DayPrayerTimes[]; + timeFormat: "12h" | "24h"; +} + +const PRAYER_COLUMNS = ["Fajr", "Sunrise", "Duha", "Dhuhr", "Asr", "Maghrib", "Isha"] as const; + + +export function CalendarGrid({ className, data, timeFormat }: CalendarGridProps) { + const { t, locale } = useLanguage(); + const today = new Date(); + const todayStr = `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, "0")}-${String(today.getDate()).padStart(2, "0")}`; + + return ( +
+
+ + + + + {PRAYER_COLUMNS.map((name) => { + const key = `prayer.${name}` as TranslationKey; + return ( + + ); + })} + + + + {data.map((row) => { + const isToday = row.date === todayStr; + return ( + + + {PRAYER_COLUMNS.map((name) => { + const prayer = row.times.find((p) => p.name === name); + return ( + + ); + })} + + ); + })} + +
{t("calendar.day")} + {t(key)} +
+
+ + {new Date(row.date).toLocaleDateString(locale === "ar" ? "ar-DZ" : "en-US", { weekday: "long" })} + + + {new Date(row.date).toLocaleDateString(locale === "ar" ? "ar-DZ" : "en-US", { day: "numeric", month: "long" })} + +
+ {isToday && {t("calendar.today")}} +
+ {prayer ? formatTime(prayer.time, timeFormat, locale) : "—"} +
+
+
+ ); +} diff --git a/web/Miqaat/app/blocks/home/additional-info-section.module.css b/web/Miqaat/app/blocks/home/additional-info-section.module.css new file mode 100644 index 0000000..bea60dd --- /dev/null +++ b/web/Miqaat/app/blocks/home/additional-info-section.module.css @@ -0,0 +1,49 @@ +.root { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); + gap: var(--space-5); +} + +.card { + border-radius: var(--radius-lg); + padding: var(--space-8) var(--space-5); + box-shadow: var(--shadow-sm); + display: flex; + flex-direction: column; + align-items: flex-start; + gap: var(--space-3); + transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1); +} + +.card:hover { + transform: translateY(-4px); + box-shadow: var(--shadow-md); + border-color: var(--color-border); +} + +.iconBox { + display: flex; + align-items: center; + justify-content: center; + width: 2.5rem; + height: 2.5rem; + border-radius: var(--radius-md); + background: var(--color-highlight); + color: var(--color-primary); +} + +.label { + font-size: var(--text-sm); + text-transform: uppercase; + letter-spacing: 0.05em; + color: var(--color-text-muted); + font-weight: 800; +} + +.value { + font-family: var(--family-body); + font-size: var(--text-xl); + font-weight: 700; + color: var(--color-text); + line-height: 1; +} diff --git a/web/Miqaat/app/blocks/home/additional-info-section.tsx b/web/Miqaat/app/blocks/home/additional-info-section.tsx new file mode 100644 index 0000000..d0c7833 --- /dev/null +++ b/web/Miqaat/app/blocks/home/additional-info-section.tsx @@ -0,0 +1,76 @@ +import { Sunrise, Sunset, Moon, Sparkles, Clock } from "lucide-react"; +import classnames from "classnames"; +import { useAppContext } from "~/context/app-context"; +import { useLanguage } from "~/i18n/language-context"; +import style from "./additional-info-section.module.css"; +import { formatMinutesToTime } from "~/utils/time-utils"; + +function parseTimeToMinutes(timeStr: string): number { + const [h, m] = timeStr.split(":").map(Number); + return h * 60 + m; +} + + +export interface AdditionalInfoSectionProps { + className?: string; +} + + +export function AdditionalInfoSection({ className }: AdditionalInfoSectionProps) { + const { prayerTimes, timeFormat } = useAppContext(); + const { t, locale } = useLanguage(); + + const sunrise = prayerTimes.find((p) => p.name === "Sunrise"); + const maghrib = prayerTimes.find((p) => p.name === "Maghrib"); + const fajr = prayerTimes.find((p) => p.name === "Fajr"); + + let midnightStr = "--:--"; + let lastThirdStr = "--:--"; + + if (maghrib && fajr) { + const maghribMin = parseTimeToMinutes(maghrib.time); + let fajrMin = parseTimeToMinutes(fajr.time); + + // Fajr is the next day + if (fajrMin <= maghribMin) { + fajrMin += 1440; + } + + const nightDuration = fajrMin - maghribMin; + + const midnightMin = maghribMin + nightDuration / 2; + const lastThirdMin = maghribMin + (2 * nightDuration) / 3; + + midnightStr = formatMinutesToTime(midnightMin, timeFormat, locale); + lastThirdStr = formatMinutesToTime(lastThirdMin, timeFormat, locale); + } + + return ( +
+ {sunrise && ( +
+
+
{t("info.sunrise")}
+
{formatMinutesToTime(parseTimeToMinutes(sunrise.time), timeFormat, locale)}
+
+ )} + {maghrib && ( +
+
+
{t("info.sunset")}
+
{formatMinutesToTime(parseTimeToMinutes(maghrib.time), timeFormat, locale)}
+
+ )} +
+
+
{t("info.midnight")}
+
{midnightStr}
+
+
+
+
{t("info.lastThird")}
+
{lastThirdStr}
+
+
+ ); +} \ No newline at end of file diff --git a/web/Miqaat/app/blocks/home/current-prayer-highlight.module.css b/web/Miqaat/app/blocks/home/current-prayer-highlight.module.css new file mode 100644 index 0000000..003bd5a --- /dev/null +++ b/web/Miqaat/app/blocks/home/current-prayer-highlight.module.css @@ -0,0 +1,110 @@ +.root { + background: var(--color-bg-card); + border-radius: var(--radius-lg); + padding: var(--space-6) var(--space-6); + box-shadow: var(--shadow-md), var(--shadow-accent-glow); + border: 2px solid var(--color-accent); + display: flex; + flex-direction: column; + align-items: center; + gap: var(--space-4); + text-align: center; +} + +.header { + display: inline-flex; + align-items: center; + justify-content: center; + background: var(--color-accent-muted); + padding: var(--space-2) var(--space-6); + border-radius: var(--radius-full); + color: #5d4a1f; + /* لون غامق يتناسب مع الذهبي لزيادة التباين */ + border: 1px solid rgba(var(--color-accent), 0.3); + margin-bottom: var(--space-2); +} + +.headerLabel { + font-size: var(--text-base); + letter-spacing: 0.05em; + font-weight: 900; +} + +.content { + display: flex; + flex-direction: column; + align-items: center; + gap: var(--space-3); +} + +.iconWrapper { + display: flex; + align-items: center; + justify-content: center; + width: 3.5rem; + height: 3.5rem; + background: linear-gradient(135deg, var(--color-accent), var(--color-accent-light)); + border-radius: var(--radius-md); + color: #1a2b3c; + flex-shrink: 0; +} + +.name { + font-family: var(--family-display); + font-size: var(--text-2xl); + font-weight: 700; + color: var(--color-text); + line-height: 1.2; +} + +.footer { + display: flex; + flex-direction: column; + align-items: center; + gap: var(--space-1); +} + +.timeLabel { + font-size: var(--text-sm); + color: var(--color-text); + text-transform: uppercase; + letter-spacing: 0.08em; + font-weight: 700; + opacity: 0.7; +} + +.time { + font-family: var(--family-mono); + font-size: 3rem; + font-weight: 700; + color: var(--color-accent); + display: flex; + flex-direction: row; + align-items: baseline; + justify-content: center; + gap: var(--space-3); + line-height: 1; + direction: rtl; +} + +.periodPart { + font-size: 1.5rem; + font-weight: 600; + margin-top: 4px; +} + +:global([lang="ar"]) .periodPart { + font-family: var(--family-brand-ar); + font-size: 2.5rem; + margin-top: 0; +} + +@media (max-width: 480px) { + .root { + padding: var(--space-5) var(--space-4); + } + + .name { + font-size: var(--text-xl); + } +} \ No newline at end of file diff --git a/web/Miqaat/app/blocks/home/current-prayer-highlight.tsx b/web/Miqaat/app/blocks/home/current-prayer-highlight.tsx new file mode 100644 index 0000000..a687da2 --- /dev/null +++ b/web/Miqaat/app/blocks/home/current-prayer-highlight.tsx @@ -0,0 +1,78 @@ +import { Moon, Sun, Cloud, Sunrise, Sunset, Star, AlertTriangle, SunDim } from "lucide-react"; +import classnames from "classnames"; +import { useAppContext } from "~/context/app-context"; +import { useLanguage } from "~/i18n/language-context"; +import { usePrayerStatus } from "~/hooks/use-prayer-status"; +import type { TranslationKey } from "~/i18n/translations"; +import style from "./current-prayer-highlight.module.css"; +import { formatTime } from "~/utils/time-utils"; + + +export interface CurrentPrayerHighlightProps { + className?: string; +} + +const PRAYER_ICONS: Record = { + moon: , + sun: , + "sun-dim": , + sunrise: , + sunset: , + "cloud-sun": , + star: , +}; + + +export function CurrentPrayerHighlight({ className }: CurrentPrayerHighlightProps) { + const { currentPrayer, prayerTimes, timeFormat } = useAppContext(); + const { t, locale } = useLanguage(); + const prayerStatus = usePrayerStatus(prayerTimes); + + if (!currentPrayer) return null; + + const prayerKey = `prayer.${currentPrayer.name}` as TranslationKey; + let displayName = t(prayerKey); + let displayIcon = PRAYER_ICONS[currentPrayer.icon] ?? ; + + if (prayerStatus === "forbidden") { + displayName = t("home.forbiddenPrayer"); + displayIcon = ; + } else if (prayerStatus === "duha") { + displayName = t("home.duha"); + displayIcon = ; + } + + return ( +
+
+ {t("home.currentPrayer")} +
+ +
+
+ {displayIcon} +
+
{displayName}
+
+ +
+
{t("home.prayerTime")}
+
+ {(() => { + const timeStr = formatTime(currentPrayer.time, timeFormat, locale); + const parts = timeStr.split(" "); + if (parts.length > 1) { + return ( + <> + {parts[0]} + {parts[1]} + + ); + } + return {timeStr}; + })()} +
+
+
+ ); +} diff --git a/web/Miqaat/app/blocks/home/current-time-card.module.css b/web/Miqaat/app/blocks/home/current-time-card.module.css new file mode 100644 index 0000000..d7e9fe6 --- /dev/null +++ b/web/Miqaat/app/blocks/home/current-time-card.module.css @@ -0,0 +1,72 @@ +.root { + background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary-dark) 100%); + border-radius: var(--radius-xl); + padding: var(--space-8) var(--space-8); + color: var(--color-text-inverse); + box-shadow: var(--shadow-lg), var(--shadow-glow); + text-align: center; + position: relative; + overflow: hidden; +} + +.root::before { + content: ""; + position: absolute; + top: -40%; + right: -10%; + width: 280px; + height: 280px; + background: rgba(255, 255, 255, 0.05); + border-radius: 50%; + pointer-events: none; +} + +.root::after { + content: ""; + position: absolute; + bottom: -30%; + left: -5%; + width: 200px; + height: 200px; + background: rgba(255, 255, 255, 0.04); + border-radius: 50%; + pointer-events: none; +} + +.timeWrapper { + position: relative; + z-index: 1; +} + +.time { + font-family: var(--family-mono); + font-size: var(--text-4xl); + font-weight: 300; + line-height: 1; + letter-spacing: -0.02em; + margin-bottom: var(--space-2); + direction: ltr; +} + +.date { + font-size: var(--text-base); + opacity: 0.85; + margin-bottom: var(--space-2); +} + +.hijri { + font-family: var(--family-body); + font-size: var(--text-md); + color: var(--color-accent-light); + font-weight: 600; + opacity: 1; +} + +@media (max-width: 480px) { + .root { + padding: var(--space-6) var(--space-5); + } + .time { + font-size: var(--text-3xl); + } +} diff --git a/web/Miqaat/app/blocks/home/current-time-card.tsx b/web/Miqaat/app/blocks/home/current-time-card.tsx new file mode 100644 index 0000000..eae5ed0 --- /dev/null +++ b/web/Miqaat/app/blocks/home/current-time-card.tsx @@ -0,0 +1,40 @@ +import classnames from "classnames"; +import { useClock } from "~/hooks/use-clock"; +import { useAppContext } from "~/context/app-context"; +import { useLanguage } from "~/i18n/language-context"; +import style from "./current-time-card.module.css"; + +export interface CurrentTimeCardProps { + className?: string; +} + +export function CurrentTimeCard({ className }: CurrentTimeCardProps) { + const { timeFormat } = useAppContext(); + const { locale } = useLanguage(); + const { timeOnly, period, hijriDate } = useClock(timeFormat, locale); + + return ( +
+
+
+ {period && ( + + {period} + + )} + {timeOnly} +
+
{hijriDate}
+
+
+ ); +} diff --git a/web/Miqaat/app/blocks/home/location-display.module.css b/web/Miqaat/app/blocks/home/location-display.module.css new file mode 100644 index 0000000..adeaa45 --- /dev/null +++ b/web/Miqaat/app/blocks/home/location-display.module.css @@ -0,0 +1,65 @@ +.root { + display: flex; + align-items: center; + justify-content: space-between; + padding: var(--space-4) var(--space-5); + background: var(--color-bg-card); + border-radius: var(--radius-lg); + box-shadow: var(--shadow-sm); + border: 1px solid var(--color-border-light); +} + +.locationInfo { + display: flex; + align-items: center; + gap: var(--space-3); +} + +.icon { + display: flex; + align-items: center; + justify-content: center; + width: 2.5rem; + height: 2.5rem; + background: var(--color-highlight); + border-radius: var(--radius-md); + color: var(--color-primary); + flex-shrink: 0; +} + +.text { + display: flex; + flex-direction: column; + gap: 0.125rem; +} + +.city { + font-size: var(--text-md); + font-weight: 600; + color: var(--color-text); +} + +.country { + font-size: var(--text-sm); + color: var(--color-text-muted); +} + +.changeBtn { + display: flex; + align-items: center; + gap: var(--space-2); + padding: var(--space-2) var(--space-4); + border-radius: var(--radius-full); + border: 1.5px solid var(--color-primary); + background: transparent; + color: var(--color-primary); + font-size: var(--text-sm); + font-weight: 500; + cursor: pointer; + transition: background 0.2s, color 0.2s; +} + +.changeBtn:hover { + background: var(--color-primary); + color: var(--color-text-inverse); +} diff --git a/web/Miqaat/app/blocks/home/location-display.tsx b/web/Miqaat/app/blocks/home/location-display.tsx new file mode 100644 index 0000000..a4570af --- /dev/null +++ b/web/Miqaat/app/blocks/home/location-display.tsx @@ -0,0 +1,32 @@ +import { Link } from "react-router"; +import { MapPin, Navigation } from "lucide-react"; +import classnames from "classnames"; +import { useAppContext } from "~/context/app-context"; +import { useLanguage } from "~/i18n/language-context"; +import style from "./location-display.module.css"; + +export interface LocationDisplayProps { + className?: string; +} + +export function LocationDisplay({ className }: LocationDisplayProps) { + const { location } = useAppContext(); + const { t, locale } = useLanguage(); + return ( +
+
+
+ +
+
+ {locale === "ar" ? (location.cityAr || location.city) : location.city} + {locale === "ar" ? (location.countryAr || location.country) : location.country} +
+
+ + + {t("location.change")} + +
+ ); +} diff --git a/web/Miqaat/app/blocks/home/next-prayer-countdown.module.css b/web/Miqaat/app/blocks/home/next-prayer-countdown.module.css new file mode 100644 index 0000000..68a9648 --- /dev/null +++ b/web/Miqaat/app/blocks/home/next-prayer-countdown.module.css @@ -0,0 +1,109 @@ +.root { + background: var(--color-bg-card); + border-radius: var(--radius-lg); + padding: var(--space-6) var(--space-6); + box-shadow: var(--shadow-md); + border: 1px solid var(--color-border-light); + display: flex; + flex-direction: column; + align-items: center; +} + +.header { + display: inline-flex; + align-items: center; + justify-content: center; + gap: var(--space-2); + background: var(--color-highlight); + padding: var(--space-2) var(--space-6); + border-radius: var(--radius-full); + margin: 0 auto var(--space-5) auto; + color: var(--color-primary); + border: 1px solid var(--color-border-light); +} + +.headerLabel { + font-size: var(--text-base); + letter-spacing: 0.05em; + color: var(--color-primary); + font-weight: 900; +} + +.prayerName { + font-family: var(--family-display); + font-size: var(--text-2xl); + font-weight: 600; + color: var(--color-primary); + margin-bottom: var(--space-5); +} + +.countdown { + display: flex; + flex-direction: row; + direction: ltr; + align-items: center; + justify-content: center; + gap: var(--space-3); + margin-bottom: var(--space-4); +} + +.unit { + display: flex; + flex-direction: column; + align-items: center; + gap: var(--space-1); +} + +.digits { + font-family: var(--family-mono); + font-size: var(--text-3xl); + font-weight: 700; + color: var(--color-primary); + background: var(--color-highlight); + border-radius: var(--radius-md); + min-width: 4rem; + padding: var(--space-2) var(--space-3); + line-height: 1; + letter-spacing: 0.02em; +} + +.unitLabel { + font-size: var(--text-sm); + text-transform: uppercase; + letter-spacing: 0.08em; + color: var(--color-text); + font-weight: 600; + opacity: 0.7; +} + +.separator { + font-family: var(--family-mono); + font-size: var(--text-2xl); + color: var(--color-text-muted); + margin-bottom: var(--space-5); + font-weight: 700; +} + +.prayerTime { + font-size: var(--text-lg); + color: var(--color-text); + font-weight: 500; + display: flex; + align-items: center; + justify-content: center; + gap: var(--space-2); + white-space: nowrap; +} + +.prayerTime strong { + color: var(--color-primary); + font-family: var(--family-mono); + font-weight: 700; +} + +@media (max-width: 480px) { + .digits { + font-size: var(--text-2xl); + min-width: 3rem; + } +} \ No newline at end of file diff --git a/web/Miqaat/app/blocks/home/next-prayer-countdown.tsx b/web/Miqaat/app/blocks/home/next-prayer-countdown.tsx new file mode 100644 index 0000000..3d3c430 --- /dev/null +++ b/web/Miqaat/app/blocks/home/next-prayer-countdown.tsx @@ -0,0 +1,78 @@ +import { Clock } from "lucide-react"; +import classnames from "classnames"; +import { useAppContext } from "~/context/app-context"; +import { useCountdown } from "~/hooks/use-countdown"; +import { useLanguage } from "~/i18n/language-context"; +import type { TranslationKey } from "~/i18n/translations"; +import style from "./next-prayer-countdown.module.css"; +import { formatTime } from "~/utils/time-utils"; + + +export interface NextPrayerCountdownProps { + className?: string; +} + + +export function NextPrayerCountdown({ className }: NextPrayerCountdownProps) { + const { nextPrayer, timeFormat } = useAppContext(); + const { hours, minutes, seconds } = useCountdown(nextPrayer?.time ?? null); + const { t, locale } = useLanguage(); + + if (!nextPrayer) return null; + + const prayerKey = `prayer.${nextPrayer.name}` as TranslationKey; + + return ( +
+
+ + {t("home.nextPrayer")} +
+
{t(prayerKey)}
+
+ {hours !== "00" && ( + <> +
+ {hours} + {t("home.hours")} +
+ : + + )} + {(hours !== "00" || minutes !== "00") && ( + <> +
+ {minutes} + {t("home.minutes")} +
+ : + + )} +
+ {seconds} + {t("home.seconds")} +
+
+
+ {t("home.startsAt")} + + {(() => { + const timeStr = formatTime(nextPrayer.time, timeFormat, locale); + const parts = timeStr.split(" "); + if (parts.length > 1) { + // In RTL, the first element goes to the right and the second goes to the left. + // So parts[0] (time) is right, parts[1] (AM/PM) is left. + return ( + <> + {parts[0]} + {parts[1]} + + ); + } + return {timeStr}; + })()} + +
+
+ ); +} diff --git a/web/Miqaat/app/blocks/home/prayer-times-grid.module.css b/web/Miqaat/app/blocks/home/prayer-times-grid.module.css new file mode 100644 index 0000000..1d1df9d --- /dev/null +++ b/web/Miqaat/app/blocks/home/prayer-times-grid.module.css @@ -0,0 +1,152 @@ +.wrapper { + display: flex; + flex-direction: column; + gap: var(--space-5); + align-items: center; + width: 100%; +} + +.sectionTitle { + font-size: var(--text-base); + color: var(--color-text); + font-weight: 700; + text-align: center; + letter-spacing: 0.05em; + opacity: 0.9; +} + +.root { + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: var(--space-4); + width: 100%; + max-width: 1400px; +} + +.card { + position: relative; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: var(--space-2); + background: var(--color-bg-card); + border: 1px solid var(--color-border-light); + border-radius: var(--radius-lg); + padding: var(--space-8) var(--space-2); + transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1); + box-shadow: var(--shadow-sm); + min-width: 160px; + flex: 1; + max-width: 200px; +} + +.card:hover { + transform: translateY(-6px); + box-shadow: var(--shadow-md); + border-color: var(--color-border); +} + +.cardActive { + background: linear-gradient(145deg, var(--color-accent), var(--color-accent-light)); + border-color: transparent; + color: #1a2b3c; + transform: scale(1.08); + box-shadow: var(--shadow-lg), var(--shadow-accent-glow); + z-index: 10; +} + +.cardActive:hover { + transform: scale(1.08) translateY(-4px); +} + + +.activeBadge { + position: absolute; + top: -10px; + background: var(--color-bg-card); + color: var(--color-accent); + font-size: 0.7rem; + font-weight: 700; + padding: 4px 12px; + border-radius: var(--radius-full); + border: 1px solid var(--color-accent); + box-shadow: var(--shadow-sm); +} + +.iconWrapper { + color: var(--color-primary); + margin-bottom: var(--space-2); +} + +.cardActive .iconWrapper { + color: #1a2b3c; +} + + +.prayerName { + font-family: var(--family-display); + font-size: var(--text-lg); + font-weight: 600; + color: var(--color-text); + margin-bottom: var(--space-1); +} + +.cardActive .prayerName { + color: #1a2b3c; +} + +.prayerTime { + font-family: var(--family-mono); + font-size: var(--text-2xl); + font-weight: 700; + color: var(--color-primary); + letter-spacing: -0.02em; + direction: ltr; + text-align: center; + display: flex; + flex-direction: column; + align-items: center; + gap: 0; + line-height: 1.1; +} + +.periodPart { + font-size: 1rem; + font-weight: 500; + margin-top: 2px; +} + +:global([lang="ar"]) .periodPart { + font-family: var(--family-brand-ar); + font-size: 1.25rem; +} + +.cardActive .prayerTime { + color: #1a2b3c; +} + +@media (max-width: 900px) { + .root { + gap: var(--space-4); + } +} + +@media (max-width: 480px) { + .root { + gap: var(--space-3); + } + + .card { + min-width: 140px; + } + + .cardActive { + transform: scale(1.04); + } + + .cardActive:hover { + transform: scale(1.04) translateY(-3px); + } +} \ No newline at end of file diff --git a/web/Miqaat/app/blocks/home/prayer-times-grid.tsx b/web/Miqaat/app/blocks/home/prayer-times-grid.tsx new file mode 100644 index 0000000..588f1da --- /dev/null +++ b/web/Miqaat/app/blocks/home/prayer-times-grid.tsx @@ -0,0 +1,83 @@ +import { Moon, Sun, Cloud, Sunrise, Sunset, Star, SunDim } from "lucide-react"; +import classnames from "classnames"; +import { useAppContext } from "~/context/app-context"; +import { useLanguage } from "~/i18n/language-context"; +import type { TranslationKey } from "~/i18n/translations"; +import style from "./prayer-times-grid.module.css"; +import { formatTime } from "~/utils/time-utils"; + + +export interface PrayerTimesGridProps { + className?: string; +} + +const PRAYER_ICONS: Record = { + moon: , + sun: , + "sun-dim": , + sunrise: , + sunset: , + "cloud-sun": , + star: , +}; + + +export function PrayerTimesGrid({ className }: PrayerTimesGridProps) { + const { prayerTimes, currentPrayer, timeFormat } = useAppContext(); + const { t, locale } = useLanguage(); + + // Filter for only the 5 obligatory prayers + Duha (excluding Sunrise) + const mainPrayers = ["Fajr", "Duha", "Dhuhr", "Asr", "Maghrib", "Isha"]; + const displayPrayers = prayerTimes.filter((p) => mainPrayers.includes(p.name)); + + return ( +
+
— {t("home.schedule")} —
+
+ {displayPrayers.map((prayer) => { + const isActive = prayer.isPrayer && currentPrayer?.name === prayer.name; + const prayerKey = `prayer.${prayer.name}` as TranslationKey; + + return ( +
+ {isActive && ( +
+ {t("home.now")} +
+ )} +
+ {PRAYER_ICONS[prayer.icon] ?? } +
+
+ {t(prayerKey)} +
+
+ {(() => { + const timeStr = formatTime(prayer.time, timeFormat, locale); + const parts = timeStr.split(" "); + if (parts.length > 1) { + return ( + <> + {parts[0]} + {parts[1]} + + ); + } + return {timeStr}; + })()} +
+
+ ); + })} +
+
+ ); +} diff --git a/web/Miqaat/app/blocks/location-selection/gps-location-button.module.css b/web/Miqaat/app/blocks/location-selection/gps-location-button.module.css new file mode 100644 index 0000000..34825a8 --- /dev/null +++ b/web/Miqaat/app/blocks/location-selection/gps-location-button.module.css @@ -0,0 +1,43 @@ +.root { +} + +.btn { + width: 100%; + display: flex; + align-items: center; + justify-content: center; + gap: var(--space-3); + padding: var(--space-4) var(--space-6); + min-height: 56px; + background: var(--color-bg-card); + border: 2px dashed var(--color-primary); + border-radius: var(--radius-xl); + color: var(--color-primary); + font-size: var(--text-md); + font-weight: 700; + cursor: pointer; + transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); +} + +.btn:hover { + background: var(--color-highlight); +} + +.btnLoading { + opacity: 0.7; + cursor: wait; +} + +.btnSuccess { + border-color: var(--color-success); + color: var(--color-success); + border-style: solid; +} + +.spinner { + animation: spin 1s linear infinite; +} + +@keyframes spin { + to { transform: rotate(360deg); } +} diff --git a/web/Miqaat/app/blocks/location-selection/gps-location-button.tsx b/web/Miqaat/app/blocks/location-selection/gps-location-button.tsx new file mode 100644 index 0000000..746fccf --- /dev/null +++ b/web/Miqaat/app/blocks/location-selection/gps-location-button.tsx @@ -0,0 +1,66 @@ +import { Navigation, Loader, CheckCircle } from "lucide-react"; +import classnames from "classnames"; +import { useLanguage } from "~/i18n/language-context"; +import style from "./gps-location-button.module.css"; + +export interface GPSLocationButtonProps { + className?: string; + isDetecting: boolean; + isSuccess: boolean; + onDetect: () => void; + onClear?: () => void; +} + +export function GPSLocationButton({ + className, + isDetecting, + isSuccess, + onDetect, + onClear, +}: GPSLocationButtonProps) { + const { t } = useLanguage(); + + if (isSuccess) { + return ( +
+
+ + {t("location.gps.success")} +
+
+ ); + } + + return ( +
+ +
+ ); +} diff --git a/web/Miqaat/app/blocks/location-selection/search-header.module.css b/web/Miqaat/app/blocks/location-selection/search-header.module.css new file mode 100644 index 0000000..db8c05d --- /dev/null +++ b/web/Miqaat/app/blocks/location-selection/search-header.module.css @@ -0,0 +1,24 @@ +.root { + display: flex; + flex-direction: column; + gap: var(--space-2); +} + +.title { + font-family: var(--family-display); + font-size: var(--text-3xl); + font-weight: 600; + color: var(--color-primary); +} + +:global([lang="ar"]) .title { + font-family: var(--family-brand-ar); + font-size: 3rem; + font-weight: 700; +} + +.subtitle { + font-size: var(--text-sm); + color: var(--color-text-muted); + line-height: 1.5; +} diff --git a/web/Miqaat/app/blocks/location-selection/search-header.tsx b/web/Miqaat/app/blocks/location-selection/search-header.tsx new file mode 100644 index 0000000..d9087f2 --- /dev/null +++ b/web/Miqaat/app/blocks/location-selection/search-header.tsx @@ -0,0 +1,24 @@ +import classnames from "classnames"; +import { useLanguage } from "~/i18n/language-context"; +import style from "./search-header.module.css"; + +export interface SearchHeaderProps { + className?: string; +} + +export function SearchHeader({ className }: SearchHeaderProps) { + const { t, locale } = useLanguage(); + return ( +
+

+ {t("location.title")} +

+

+ {t("location.subtitle")} +

+
+ ); +} diff --git a/web/Miqaat/app/blocks/location-selection/wilaya-baladiya-selector.module.css b/web/Miqaat/app/blocks/location-selection/wilaya-baladiya-selector.module.css new file mode 100644 index 0000000..758f340 --- /dev/null +++ b/web/Miqaat/app/blocks/location-selection/wilaya-baladiya-selector.module.css @@ -0,0 +1,134 @@ +.root { + display: flex; + flex-direction: column; + gap: var(--space-8); +} + +.fieldGroup { + display: flex; + flex-direction: column; + gap: var(--space-2); +} + +.label { + font-weight: 600; + font-size: var(--text-sm); + color: var(--color-text); + display: flex; + align-items: center; + gap: var(--space-2); +} + +.labelIcon { + color: var(--color-primary); + flex-shrink: 0; +} + +.select { + width: 100%; + padding: var(--space-4) var(--space-5); + padding-right: 2.75rem; + min-height: 56px; + border: 2px solid var(--color-border); + border-radius: var(--radius-xl); + background: var(--color-bg-card); + color: var(--color-text); + font-size: var(--text-md); + font-family: var(--family-body); + outline: none; + transition: all 0.2s ease; + cursor: pointer; + appearance: none; + background-image: url("data:image/svg+xml,%3Csvg width='12' height='8' viewBox='0 0 12 8' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1.5L6 6.5L11 1.5' stroke='%235d7a8e' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: right var(--space-4) center; +} + +.select:focus { + border-color: var(--color-primary); + box-shadow: 0 0 0 3px rgba(26, 82, 118, 0.12); +} + +.select:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.loadingText { + display: flex; + align-items: center; + gap: var(--space-2); + font-size: var(--text-sm); + color: var(--color-text-muted); + padding: var(--space-2) 0; +} + +.spinner { + animation: spin 1s linear infinite; +} + +@keyframes spin { + to { transform: rotate(360deg); } +} + +.confirmBtn { + width: 100%; + padding: var(--space-4) var(--space-6); + min-height: 56px; + background: var(--color-primary); + color: var(--color-text-inverse); + border: none; + border-radius: var(--radius-xl); + font-size: var(--text-md); + font-weight: 700; + font-family: var(--family-body); + cursor: pointer; + transition: all 0.2s ease; + display: flex; + align-items: center; + justify-content: center; + gap: var(--space-2); + margin-top: var(--space-4); + box-shadow: var(--shadow-md); +} + +.confirmBtn:hover:not(:disabled) { + background: var(--color-primary-dark); +} + +.confirmBtn:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.errorContainer { + margin-top: var(--space-3); + padding: var(--space-4); + background: rgba(231, 76, 60, 0.1); + border: 1px solid rgba(231, 76, 60, 0.2); + border-radius: var(--radius-md); + text-align: center; +} + +.errorText { + color: #e74c3c; + font-size: var(--text-sm); + font-weight: 500; + margin-bottom: var(--space-3); +} + +.retryBtn { + background: #e74c3c; + color: white; + border: none; + padding: var(--space-2) var(--space-4); + border-radius: var(--radius-sm); + font-size: var(--text-xs); + font-weight: 600; + cursor: pointer; + transition: background 0.2s; +} + +.retryBtn:hover { + background: #c0392b; +} diff --git a/web/Miqaat/app/blocks/location-selection/wilaya-baladiya-selector.tsx b/web/Miqaat/app/blocks/location-selection/wilaya-baladiya-selector.tsx new file mode 100644 index 0000000..e8c6a3f --- /dev/null +++ b/web/Miqaat/app/blocks/location-selection/wilaya-baladiya-selector.tsx @@ -0,0 +1,176 @@ +import { MapPin, Loader, CheckCircle, Search, ChevronDown } from "lucide-react"; +import classnames from "classnames"; +import { useState, useRef, useEffect } from "react"; +import type { Wilaya } from "~/data/prayer-data"; +import { useLanguage } from "~/i18n/language-context"; +import styles from "./wilaya-baladiya-selector.module.css"; + +export interface WilayaSelectorProps { + className?: string; + wilayas: Wilaya[]; + selectedWilaya: Wilaya | null; + isLoadingWilayas: boolean; + onWilayaChange: (wilaya: Wilaya) => void; + onConfirm: () => void; + canConfirm: boolean; + fetchError: string | null; + onRetry: () => void; + onClear: () => void; +} + +export function WilayaSelector({ + className, + wilayas, + selectedWilaya, + isLoadingWilayas, + onWilayaChange, + onConfirm, + canConfirm, + fetchError, + onRetry, + onClear, +}: WilayaSelectorProps) { + const { t } = useLanguage(); + const [isOpen, setIsOpen] = useState(false); + const [searchQuery, setSearchQuery] = useState(""); + const dropdownRef = useRef(null); + + useEffect(() => { + const handleClickOutside = (event: MouseEvent) => { + if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { + setIsOpen(false); + } + }; + document.addEventListener("mousedown", handleClickOutside); + return () => document.removeEventListener("mousedown", handleClickOutside); + }, []); + + const filteredWilayas = wilayas.filter(w => + w.name.toLowerCase().includes(searchQuery.toLowerCase()) || + w.nameAr.includes(searchQuery) || + w.id.toString().includes(searchQuery) + ); + + return ( +
+
+ + + {isLoadingWilayas ? ( +
+ {t("location.wilaya.loading")} + +
+ ) : ( +
+ + + {isOpen && ( +
+
+
+ + setSearchQuery(e.target.value)} + autoFocus + /> +
+
+
+ {filteredWilayas.length > 0 ? ( + filteredWilayas.map((w) => ( + + )) + ) : ( +
+ + لا توجد نتائج مطابقة لبحثك +
+ )} +
+
+ )} +
+ )} + + {fetchError && ( +
+

{fetchError}

+ +
+ )} +
+ + {canConfirm && ( +
+ + {onClear && ( + + )} +
+ )} +
+ ); +} diff --git a/web/Miqaat/app/blocks/settings/language-toggle.module.css b/web/Miqaat/app/blocks/settings/language-toggle.module.css new file mode 100644 index 0000000..68a722c --- /dev/null +++ b/web/Miqaat/app/blocks/settings/language-toggle.module.css @@ -0,0 +1,78 @@ +.root { + background: var(--color-bg-card); + border-radius: var(--radius-lg); + padding: var(--space-6); + box-shadow: var(--shadow-sm); + border: 1px solid var(--color-border-light); + display: flex; + flex-direction: column; + gap: var(--space-4); + transition: transform 0.2s, box-shadow 0.2s; + height: 100%; +} + +.root:hover { + transform: translateY(-2px); + box-shadow: var(--shadow-md); +} + +.header { + display: flex; + align-items: center; + gap: var(--space-3); +} + +.iconBox { + display: flex; + align-items: center; + justify-content: center; + width: 2.25rem; + height: 2.25rem; + border-radius: var(--radius-sm); + background: var(--color-highlight); + color: var(--color-primary); + flex-shrink: 0; +} + +.title { + font-weight: 600; + font-size: var(--text-base); + color: var(--color-text); +} + +.options { + display: flex; + gap: var(--space-2); +} + +.option { + flex: 1; + padding: var(--space-3) var(--space-4); + border: 1.5px solid var(--color-border); + border-radius: var(--radius-md); + background: var(--color-bg-card); + color: var(--color-text-muted); + font-size: var(--text-sm); + font-weight: 500; + font-family: var(--family-body); + cursor: pointer; + transition: all 0.2s; + text-align: center; +} + +.option:hover { + border-color: var(--color-primary); + color: var(--color-primary); + background: var(--color-highlight); +} + +.optionActive { + border-color: var(--color-primary); + background: var(--color-primary); + color: var(--color-text-inverse); +} + +.optionActive:hover { + background: var(--color-primary-dark); + color: var(--color-text-inverse); +} \ No newline at end of file diff --git a/web/Miqaat/app/blocks/settings/language-toggle.tsx b/web/Miqaat/app/blocks/settings/language-toggle.tsx new file mode 100644 index 0000000..4548427 --- /dev/null +++ b/web/Miqaat/app/blocks/settings/language-toggle.tsx @@ -0,0 +1,47 @@ +import { Globe } from "lucide-react"; +import classnames from "classnames"; +import { useLanguage } from "~/i18n/language-context"; +import type { Locale } from "~/i18n/translations"; +import style from "./language-toggle.module.css"; + +export interface LanguageToggleProps { + className?: string; + value: Locale; + onChange: (locale: Locale) => void; +} + +export function LanguageToggle({ className, value, onChange }: LanguageToggleProps) { + const { t } = useLanguage(); + + const options: { value: Locale; label: string }[] = [ + { value: "en", label: "English" }, + { value: "ar", label: "العربية" }, + ]; + + return ( +
+
+
+ +
+ {t("settings.language")} +
+

+ {t("settings.language.desc" as any)} +

+
+ {options.map((opt) => ( + + ))} +
+
+ ); +} + diff --git a/web/Miqaat/app/blocks/settings/notification-toggle.module.css b/web/Miqaat/app/blocks/settings/notification-toggle.module.css new file mode 100644 index 0000000..2a52a3c --- /dev/null +++ b/web/Miqaat/app/blocks/settings/notification-toggle.module.css @@ -0,0 +1,241 @@ +.root { + background: var(--color-bg-card); + border-radius: var(--radius-lg); + box-shadow: var(--shadow-sm); + border: 1px solid var(--color-border-light); + display: flex; + flex-direction: column; + transition: transform 0.2s, box-shadow 0.2s; +} + +.root:hover { + transform: translateY(-2px); + box-shadow: var(--shadow-md); +} + +.mainRow { + display: flex; + align-items: center; + justify-content: space-between; + gap: var(--space-4); + padding: var(--space-6); + border-radius: var(--radius-lg); + transition: background 0.2s; +} + +.mainRowClickable { + cursor: pointer; +} + +.mainRowClickable:hover { + background: var(--color-highlight); +} + +.header { + display: flex; + align-items: center; + gap: var(--space-4); +} + +.iconBox { + display: flex; + align-items: center; + justify-content: center; + width: 2.5rem; + height: 2.5rem; + border-radius: var(--radius-md); + background: var(--color-highlight); + color: var(--color-primary); + flex-shrink: 0; +} + +.info { + display: flex; + flex-direction: column; + gap: 0.125rem; +} + +.title { + font-weight: 600; + font-size: var(--text-md); + color: var(--color-text); +} + +.desc { + font-size: var(--text-sm); + color: var(--color-text-muted); +} + +.actions { + display: flex; + align-items: center; + gap: var(--space-3); +} + +.chevron { + color: var(--color-text-muted); + display: flex; + align-items: center; +} + +.toggle { + position: relative; + width: 3rem; + height: 1.625rem; + border-radius: var(--radius-full); + background: var(--color-border); + border: none; + cursor: pointer; + transition: background 0.25s; + flex-shrink: 0; +} + +.smallToggle { + width: 2.5rem; + height: 1.375rem; +} + +.toggle:disabled { + opacity: 0.4; + cursor: not-allowed; +} + +.toggleActive { + background: var(--color-primary); +} + +.toggleThumb { + position: absolute; + top: 3px; + left: 3px; + width: 1.125rem; + height: 1.125rem; + border-radius: 50%; + background: #fff; + transition: transform 0.25s; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15); +} + +.smallToggle .toggleThumb { + top: 2px; + left: 2px; + width: 1.125rem; + height: 1.125rem; +} + +.toggleActive .toggleThumb { + transform: translateX(1.375rem); +} + +.smallToggle.toggleActive .toggleThumb { + transform: translateX(1.125rem); +} + +.prayersList { + display: flex; + flex-direction: column; + border-top: 1px solid var(--color-border-light); + padding: var(--space-2) var(--space-6) var(--space-4); + background: var(--color-bg-body); + border-bottom-left-radius: var(--radius-lg); + border-bottom-right-radius: var(--radius-lg); +} + +.prayerRow { + display: flex; + align-items: center; + justify-content: space-between; + padding: var(--space-3) 0; + border-bottom: 1px solid var(--color-border-light); +} + +.prayerRow:last-child { + border-bottom: none; +} + +.prayerName { + font-size: var(--text-base); + color: var(--color-text); + font-weight: 500; +} + +.iconBoxError { + background: rgba(231, 76, 60, 0.1); + color: var(--color-error); +} + +.toggleDisabled { + background: var(--color-border-light) !important; + opacity: 0.5; +} + +.successMessage { + padding: var(--space-4) var(--space-6); + background: rgba(39, 174, 96, 0.05); + color: #27ae60; + font-size: var(--text-sm); + border-top: 1px solid var(--color-border-light); + display: flex; + flex-direction: column; + gap: var(--space-1); +} + +.successContent { + display: flex; + align-items: center; + gap: var(--space-2); + font-weight: 600; +} + +.successMessage small { + display: block; + font-size: var(--text-xs); + opacity: 0.8; + font-weight: 400; + padding-left: 1.375rem; +} + +.blockedMessage { + padding: var(--space-4) var(--space-6); + background: rgba(231, 76, 60, 0.05); + color: var(--color-error); + font-size: var(--text-sm); + display: flex; + flex-direction: column; + gap: var(--space-2); + border-top: 1px solid var(--color-border-light); + animation: slideDown 0.3s ease; +} + +.blockedTitle { + font-weight: 700; + display: flex; + align-items: center; + gap: var(--space-2); +} + +.blockedDesc { + opacity: 0.9; + line-height: 1.5; + padding-left: 1.5rem; +} + +.unsupportedMessage { + padding: var(--space-4) var(--space-6); + background: var(--color-highlight); + color: var(--color-text-muted); + font-size: var(--text-sm); + text-align: center; + border-top: 1px solid var(--color-border-light); +} + +@keyframes slideDown { + from { + opacity: 0; + transform: translateY(-10px); + } + to { + opacity: 1; + transform: translateY(0); + } +} \ No newline at end of file diff --git a/web/Miqaat/app/blocks/settings/notification-toggle.tsx b/web/Miqaat/app/blocks/settings/notification-toggle.tsx new file mode 100644 index 0000000..a69d448 --- /dev/null +++ b/web/Miqaat/app/blocks/settings/notification-toggle.tsx @@ -0,0 +1,150 @@ +import { Bell, BellOff, ChevronDown, ChevronUp, AlertCircle, Info } from "lucide-react"; +import classnames from "classnames"; +import { useState } from "react"; +import { useLanguage } from "~/i18n/language-context"; +import { useNotificationPermission } from "~/hooks/use-notification-permission"; +import style from "./notification-toggle.module.css"; +import type { PrayerName } from "~/data/prayer-data"; + +export interface NotificationToggleProps { + className?: string; + value: boolean; + onChange: (enabled: boolean) => void; + preferences?: Record; + onPreferenceChange?: (prayerName: string, enabled: boolean) => void; +} + +const PRAYERS: PrayerName[] = ["Fajr", "Dhuhr", "Asr", "Maghrib", "Isha"]; + +export function NotificationToggle({ className, value, onChange, preferences = {}, onPreferenceChange }: NotificationToggleProps) { + const { t } = useLanguage(); + const [expanded, setExpanded] = useState(false); + const { permission, isGranted, isDenied, isUnsupported, requestPermission } = useNotificationPermission(); + + const handleToggle = async (e: React.MouseEvent) => { + e.stopPropagation(); + + if (isUnsupported) return; + + if (!value) { + // Turning on: Check permission first + if (permission === "default") { + const result = await requestPermission(); + if (result !== "granted") { + return; // Do not toggle on if denied or dismissed + } + } else if (isDenied) { + // We cannot request again if denied, UI should explain this + return; + } + } + + onChange(!value); + if (!value) { + setExpanded(true); + } + }; + + const showBlockedMessage = isDenied && value; // User had them on but now blocked + const showEnableMessage = !isGranted && !isDenied && !isUnsupported; + + return ( +
+
value && setExpanded(!expanded)} + > +
+
+ {value && isGranted ? : } +
+
+
{t("settings.notifications")}
+
+ {isDenied + ? t("settings.notifications.denied") + : isUnsupported + ? t("settings.notifications.unsupported") + : t("settings.notifications.desc")} +
+
+
+
+ {value && ( +
+ {expanded ? : } +
+ )} + +
+
+ + {isDenied && ( +
+
+ + {t("settings.notifications.blocked.title") || "Notifications Blocked"} +
+
+ {t("settings.notifications.blocked.guide") || "Your browser is blocking notifications. Please click the lock icon in your address bar to allow them for this site."} +
+
+ )} + + {isUnsupported && ( +
+ {t("settings.notifications.unsupported")} +
+ )} + + {value && isGranted && ( +
+
+ + {t("settings.notifications.scheduled")} +
+ {t("settings.notifications.limitation")} +
+ )} + + {value && expanded && isGranted && onPreferenceChange && ( +
+ {PRAYERS.map((prayer) => { + const isEnabled = preferences[prayer] !== false; // true by default + return ( +
+ {t(`prayer.${prayer}` as any)} + +
+ ); + })} +
+ )} +
+ ); +} + diff --git a/web/Miqaat/app/blocks/settings/settings-actions.module.css b/web/Miqaat/app/blocks/settings/settings-actions.module.css new file mode 100644 index 0000000..5438005 --- /dev/null +++ b/web/Miqaat/app/blocks/settings/settings-actions.module.css @@ -0,0 +1,110 @@ +.root { + display: flex; + flex-direction: column; + gap: var(--space-3); + width: 100%; +} + +.buttons { + display: flex; + gap: var(--space-4); + width: 100%; + flex-direction: row; +} + +.saveBtn { + flex: 1; + padding: var(--space-4) var(--space-6); + background: var(--color-primary); + color: var(--color-text-inverse); + border-radius: var(--radius-md); + font-weight: 600; + font-size: var(--text-base); + border: none; + cursor: pointer; + transition: background-color 0.3s ease, transform 0.2s ease; + text-align: center; +} + +.saveBtn:hover:not(:disabled) { + background-color: var(--color-primary-dark); + transform: translateY(-1px); +} + +.saveBtn:disabled { + background: var(--color-border); + color: var(--color-text-muted); + cursor: not-allowed; + transform: none; +} + +.saveBtnLoading { + opacity: 0.8; + cursor: wait; +} + +.loaderContainer { + display: flex; + align-items: center; + justify-content: center; + gap: var(--space-2); +} + +.resetBtn { + flex: 1; + padding: var(--space-4) var(--space-6); + background: transparent; + color: var(--color-text-muted); + border-radius: var(--radius-md); + font-weight: 600; + font-size: var(--text-base); + border: 1.5px solid var(--color-border); + cursor: pointer; + transition: border-color 0.3s ease, color 0.3s ease, background-color 0.3s ease, transform 0.2s ease; + text-align: center; +} + +.resetBtn:hover:not(:disabled) { + border-color: var(--color-text); + color: var(--color-text); + background-color: rgba(0, 0, 0, 0.03); + transform: translateY(-1px); +} + +.resetBtn:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +@media (max-width: 600px) { + .buttons { + flex-direction: column; + } +} + +.dirtyIndicator { + display: flex; + align-items: center; + justify-content: center; + gap: var(--space-2); + text-align: center; + font-size: var(--text-xs); + color: var(--color-warning); + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.05em; + padding: var(--space-1) 0; + animation: fadeIn 0.3s ease; +} + +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(-4px); + } + + to { + opacity: 1; + transform: translateY(0); + } +} \ No newline at end of file diff --git a/web/Miqaat/app/blocks/settings/settings-actions.tsx b/web/Miqaat/app/blocks/settings/settings-actions.tsx new file mode 100644 index 0000000..8ebcfc8 --- /dev/null +++ b/web/Miqaat/app/blocks/settings/settings-actions.tsx @@ -0,0 +1,55 @@ +import { useState } from "react"; +import { AlertCircle, CheckCircle, Loader } from "lucide-react"; +import classnames from "classnames"; +import { useLanguage } from "~/i18n/language-context"; +import style from "./settings-actions.module.css"; + +export interface SettingsActionsProps { + className?: string; + onSave: () => void; + onReset: () => void; + isDirty?: boolean; + isSaving?: boolean; +} + +export function SettingsActions({ className, onSave, onReset, isDirty, isSaving }: SettingsActionsProps) { + const { t } = useLanguage(); + + return ( +
+
+ + +
+ {isDirty && !isSaving && ( +
+ + {t("settings.unsavedChanges")} +
+ )} +
+ ); +} + + diff --git a/web/Miqaat/app/blocks/settings/theme-toggle.module.css b/web/Miqaat/app/blocks/settings/theme-toggle.module.css new file mode 100644 index 0000000..90510eb --- /dev/null +++ b/web/Miqaat/app/blocks/settings/theme-toggle.module.css @@ -0,0 +1,92 @@ +.root { + background: var(--color-bg-card); + border-radius: var(--radius-lg); + padding: var(--space-6); + box-shadow: var(--shadow-sm); + border: 1px solid var(--color-border-light); + transition: transform 0.2s, box-shadow 0.2s; + height: 100%; + display: flex; + flex-direction: column; +} + +.root:hover { + transform: translateY(-2px); + box-shadow: var(--shadow-md); +} + +.sectionTitle { + font-size: var(--text-md); + font-weight: 600; + color: var(--color-text); + margin-bottom: var(--space-2); +} + +.sectionDesc { + font-size: var(--text-sm); + color: var(--color-text-muted); + margin-bottom: var(--space-5); +} + +.options { + display: flex; + gap: var(--space-3); + flex-wrap: wrap; + flex: 1; + align-content: stretch; +} + +.option { + flex: 1; + min-width: 130px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: var(--space-3); + padding: var(--space-5) var(--space-4); + border-radius: var(--radius-md); + border: 1.5px solid var(--color-border); + cursor: pointer; + transition: border-color 0.2s, background 0.2s; + text-align: center; +} + +.option:hover { + border-color: var(--color-primary); + background: var(--color-highlight); +} + +.optionSelected { + border-color: var(--color-primary); + background: var(--color-highlight); +} + +.previewBox { + width: 64px; + height: 40px; + border-radius: var(--radius-sm); + border: 1.5px solid var(--color-border); + display: flex; + align-items: center; + justify-content: center; + font-size: 1.25rem; +} + +.previewLight { + background: #f0f4f8; +} + +.previewDark { + background: #0d1b2a; +} + +.previewSystem { + background: linear-gradient(135deg, #f0f4f8 50%, #0d1b2a 50%); +} + +.label { + font-size: var(--text-sm); + font-weight: 600; + color: var(--color-text); +} \ No newline at end of file diff --git a/web/Miqaat/app/blocks/settings/theme-toggle.tsx b/web/Miqaat/app/blocks/settings/theme-toggle.tsx new file mode 100644 index 0000000..cc7a65d --- /dev/null +++ b/web/Miqaat/app/blocks/settings/theme-toggle.tsx @@ -0,0 +1,46 @@ +import classnames from "classnames"; +import { useLanguage } from "~/i18n/language-context"; +import style from "./theme-toggle.module.css"; + +type ColorScheme = "light" | "dark" | "system"; + +export interface ThemeToggleProps { + className?: string; + value: ColorScheme; + onChange: (scheme: ColorScheme) => void; +} + +export function ThemeToggle({ className, value, onChange }: ThemeToggleProps) { + const { t } = useLanguage(); + + const options = [ + { id: "light" as const, label: t("settings.theme.light"), emoji: "☀️", previewClass: style.previewLight }, + { id: "dark" as const, label: t("settings.theme.dark"), emoji: "🌙", previewClass: style.previewDark }, + { id: "system" as const, label: t("settings.theme.system"), emoji: "💻", previewClass: style.previewSystem }, + ]; + + return ( +
+
{t("settings.theme")}
+

{t("settings.theme.desc")}

+
+ {options.map((opt) => ( +
onChange(opt.id)} + role="radio" + aria-checked={value === opt.id} + aria-label={`${opt.label} theme`} + tabIndex={0} + onKeyDown={(e) => e.key === "Enter" && onChange(opt.id)} + > +
{opt.emoji}
+
{opt.label}
+
+ ))} +
+
+ ); +} + diff --git a/web/Miqaat/app/blocks/settings/time-format-toggle.module.css b/web/Miqaat/app/blocks/settings/time-format-toggle.module.css new file mode 100644 index 0000000..4c01cca --- /dev/null +++ b/web/Miqaat/app/blocks/settings/time-format-toggle.module.css @@ -0,0 +1,76 @@ +.root { + background: var(--color-bg-card); + border-radius: var(--radius-lg); + padding: var(--space-6); + box-shadow: var(--shadow-sm); + border: 1px solid var(--color-border-light); + transition: transform 0.2s, box-shadow 0.2s; + height: 100%; +} + +.root:hover { + transform: translateY(-2px); + box-shadow: var(--shadow-md); +} + +.sectionTitle { + font-size: var(--text-md); + font-weight: 600; + color: var(--color-text); + margin-bottom: var(--space-2); +} + +.sectionDesc { + font-size: var(--text-sm); + color: var(--color-text-muted); + margin-bottom: var(--space-5); +} + +.options { + display: flex; + gap: var(--space-3); + flex-wrap: wrap; +} + +.option { + flex: 1; + min-width: 120px; + display: flex; + flex-direction: column; + align-items: center; + gap: var(--space-3); + padding: var(--space-5) var(--space-4); + border-radius: var(--radius-md); + border: 1.5px solid var(--color-border); + cursor: pointer; + transition: border-color 0.2s, background 0.2s; + text-align: center; +} + +.option:hover { + border-color: var(--color-primary); + background: var(--color-highlight); +} + +.optionSelected { + border-color: var(--color-primary); + background: var(--color-highlight); +} + +.preview { + font-family: var(--family-display); + font-size: var(--text-xl); + font-weight: 700; + color: var(--color-primary); +} + +.label { + font-size: var(--text-sm); + font-weight: 600; + color: var(--color-text); +} + +.subLabel { + font-size: var(--text-xs); + color: var(--color-text-muted); +} \ No newline at end of file diff --git a/web/Miqaat/app/blocks/settings/time-format-toggle.tsx b/web/Miqaat/app/blocks/settings/time-format-toggle.tsx new file mode 100644 index 0000000..4296e3c --- /dev/null +++ b/web/Miqaat/app/blocks/settings/time-format-toggle.tsx @@ -0,0 +1,47 @@ +import classnames from "classnames"; +import { useLanguage } from "~/i18n/language-context"; +import style from "./time-format-toggle.module.css"; + +export interface TimeFormatToggleProps { + className?: string; + value: "12h" | "24h"; + onChange: (format: "12h" | "24h") => void; +} + +export function TimeFormatToggle({ className, value, onChange }: TimeFormatToggleProps) { + const { t } = useLanguage(); + return ( +
+
{t("settings.timeFormat")}
+

{t("settings.timeFormat.desc")}

+
+
onChange("12h")} + role="radio" + aria-checked={value === "12h"} + aria-label="12-hour format (AM/PM)" + tabIndex={0} + onKeyDown={(e) => e.key === "Enter" && onChange("12h")} + > +
5:30 PM
+
{t("settings.timeFormat.12h")}
+
{t("settings.timeFormat.12h.desc")}
+
+
onChange("24h")} + role="radio" + aria-checked={value === "24h"} + aria-label="24-hour format (military)" + tabIndex={0} + onKeyDown={(e) => e.key === "Enter" && onChange("24h")} + > +
17:30
+
{t("settings.timeFormat.24h")}
+
{t("settings.timeFormat.24h.desc")}
+
+
+
+ ); +} diff --git a/web/Miqaat/app/components/error-boundary/error-boundary.module.css b/web/Miqaat/app/components/error-boundary/error-boundary.module.css new file mode 100644 index 0000000..7d7d46d --- /dev/null +++ b/web/Miqaat/app/components/error-boundary/error-boundary.module.css @@ -0,0 +1,59 @@ +.errorBoundary { + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + padding: 2rem; +} + +.errorContainer { + text-align: center; + max-width: 70%; + width: 100%; + padding: 2.5rem; +} + +.errorTitle { + font-weight: bold; + margin-bottom: 0.5rem; + font-size: 3rem; + color: #333; +} + +.errorStackWrapper { + position: relative; +} + +.copyButton { + position: absolute; + top: 0.5rem; + right: 0.5rem; + padding: 0.5rem 0.75rem; + background: #e5e5e5; + border: 1px solid #d4d4d4; + border-radius: 0.25rem; + cursor: pointer; + font-size: 0.75rem; + font-weight: 500; + color: #333; +} + +.copyButton:hover { + background: #d4d4d4; +} + +.copyButton:active { + background: #c4c4c4; +} + +.errorStack { + margin-top: 1rem; + text-align: start; + overflow: auto; + font-size: 0.875rem; + padding: 1rem; + background: #f5f5f5; + border-radius: 0.375rem; + border: 1px solid #e5e5e5; + max-height: 20rem; +} diff --git a/web/Miqaat/app/components/error-boundary/error-boundary.tsx b/web/Miqaat/app/components/error-boundary/error-boundary.tsx new file mode 100644 index 0000000..965d1f3 --- /dev/null +++ b/web/Miqaat/app/components/error-boundary/error-boundary.tsx @@ -0,0 +1,42 @@ +import { isRouteErrorResponse } from "react-router"; +import type { Route } from "../../+types/root"; +import styles from "./error-boundary.module.css"; + +export function ErrorBoundary({ error }: Route.ErrorBoundaryProps) { + let message = "Oops!"; + let details = "An unexpected error occurred."; + let stack: string | undefined; + + if (isRouteErrorResponse(error)) { + message = error.status === 404 ? "404" : "Error"; + details = error.status === 404 ? "The requested page could not be found." : error.statusText || details; + } else if (import.meta.env.DEV && error && error instanceof Error) { + details = error.message; + stack = error.stack; + } + + return ( +
+
+

{message}

+

{details}

+ + {stack && ( +
+ +
+              {stack}
+            
+
+ )} +
+
+ ); +} diff --git a/web/Miqaat/app/components/loading-skeleton/loading-skeleton.tsx b/web/Miqaat/app/components/loading-skeleton/loading-skeleton.tsx new file mode 100644 index 0000000..75b3187 --- /dev/null +++ b/web/Miqaat/app/components/loading-skeleton/loading-skeleton.tsx @@ -0,0 +1,24 @@ +import classnames from "classnames"; + +export interface LoadingSkeletonProps { + className?: string; + /** Number of skeleton rows to render */ + rows?: number; +} + +export function LoadingSkeleton({ className, rows = 6 }: LoadingSkeletonProps) { + return ( +
+
+ {Array.from({ length: rows }).map((_, i) => ( +
+ ))} +
+ ); +} diff --git a/web/Miqaat/app/components/toast/toast.module.css b/web/Miqaat/app/components/toast/toast.module.css new file mode 100644 index 0000000..7cb62ff --- /dev/null +++ b/web/Miqaat/app/components/toast/toast.module.css @@ -0,0 +1,88 @@ +.overlay { + position: fixed; + top: var(--space-4); + left: 50%; + transform: translateX(-50%); + z-index: 9999; + max-width: 90vw; + pointer-events: auto; +} + +.root { + display: flex; + align-items: flex-start; + gap: var(--space-3); + padding: var(--space-4) var(--space-5); + background: var(--color-bg-card); + border: 1.5px solid var(--color-border); + border-radius: var(--radius-lg); + box-shadow: var(--shadow-lg); + animation: slideIn 0.3s ease-out; + max-width: 420px; + width: max-content; +} + +.rootError { + border-color: var(--color-warning); +} + +.rootSuccess { + border-color: var(--color-success); +} + +.icon { + flex-shrink: 0; + margin-top: 0.125rem; +} + +.iconError { + color: var(--color-warning); +} + +.iconSuccess { + color: var(--color-success); +} + +.content { + flex: 1; + min-width: 0; +} + +.title { + font-weight: 600; + font-size: var(--text-base); + color: var(--color-text); + margin-bottom: var(--space-1); +} + +.message { + font-size: var(--text-sm); + color: var(--color-text-muted); + line-height: 1.5; +} + +.closeBtn { + flex-shrink: 0; + background: none; + border: none; + cursor: pointer; + color: var(--color-text-muted); + padding: var(--space-1); + border-radius: var(--radius-sm); + transition: color 0.2s; +} + +.closeBtn:hover { + color: var(--color-text); +} + +@keyframes slideIn { + from { + opacity: 0; + transform: translateY(-1rem); + } + to { + opacity: 1; + transform: translateY(0); + } +} diff --git a/web/Miqaat/app/components/toast/toast.tsx b/web/Miqaat/app/components/toast/toast.tsx new file mode 100644 index 0000000..a27cac8 --- /dev/null +++ b/web/Miqaat/app/components/toast/toast.tsx @@ -0,0 +1,55 @@ +import { useEffect } from "react"; +import { AlertTriangle, CheckCircle, X } from "lucide-react"; +import classnames from "classnames"; +import styles from "./toast.module.css"; + +export interface ToastProps { + className?: string; + message: string; + title?: string; + type?: "error" | "success"; + duration?: number; + onClose: () => void; +} + +export function Toast({ + className, + message, + title, + type = "error", + duration = 5000, + onClose, +}: ToastProps) { + useEffect(() => { + const timer = setTimeout(onClose, duration); + return () => clearTimeout(timer); + }, [duration, onClose]); + + const isError = type === "error"; + + return ( +
+
+
+ {isError ? : } +
+
+ {title &&
{title}
} +
{message}
+
+ +
+
+ ); +} diff --git a/web/Miqaat/app/context/app-context.tsx b/web/Miqaat/app/context/app-context.tsx new file mode 100644 index 0000000..9995fb6 --- /dev/null +++ b/web/Miqaat/app/context/app-context.tsx @@ -0,0 +1,20 @@ +import { createContext, useContext, type ReactNode } from "react"; +import { usePrayerTimes, type PrayerAppState } from "~/hooks/use-prayer-times"; +import { useNotifications } from "~/hooks/use-notifications"; + +const AppContext = createContext(null); + +export function AppProvider({ children }: { children: ReactNode }) { + const state = usePrayerTimes(); + + // Wire up browser notifications + useNotifications(state.prayerTimes, state.notificationsEnabled, state.notificationPreferences); + + return {children}; +} + +export function useAppContext(): PrayerAppState { + const ctx = useContext(AppContext); + if (!ctx) throw new Error("useAppContext must be used within AppProvider"); + return ctx; +} diff --git a/web/Miqaat/app/data/prayer-data.ts b/web/Miqaat/app/data/prayer-data.ts new file mode 100644 index 0000000..d1f1237 --- /dev/null +++ b/web/Miqaat/app/data/prayer-data.ts @@ -0,0 +1,37 @@ +export type PrayerName = "Fajr" | "Sunrise" | "Duha" | "Dhuhr" | "Asr" | "Maghrib" | "Isha"; + +export interface PrayerTime { + name: PrayerName; + time: string; // "HH:MM" 24h + label: string; + icon: string; + isPrayer: boolean; // false for Sunrise +} + +export interface Location { + city: string; + cityAr: string; + country: string; + countryAr: string; + timezone: string; + latitude: number; + longitude: number; + cityId: number; +} + + + + + + + +export interface Wilaya { + id: number; + cityId: number; + name: string; + nameAr: string; + latitude: number; + longitude: number; +} + + diff --git a/web/Miqaat/app/hooks/use-clock.ts b/web/Miqaat/app/hooks/use-clock.ts new file mode 100644 index 0000000..0eb786b --- /dev/null +++ b/web/Miqaat/app/hooks/use-clock.ts @@ -0,0 +1,128 @@ +import { useState, useEffect } from "react"; +import { formatTime } from "~/utils/time-utils"; + + +export interface ClockState { + now: Date; + timeString: string; + timeOnly: string; + period: string; + dateString: string; + hijriDate: string; +} + +const HIJRI_MONTHS = { + en: [ + "Muharram", + "Safar", + "Rabi\u02bc al-Awwal", + "Rabi\u02bc al-Thani", + "Jumada al-Awwal", + "Jumada al-Thani", + "Rajab", + "Sha\u02bcban", + "Ramadan", + "Shawwal", + "Dhu al-Qi\u02bcda", + "Dhu al-Hijja", + ], + ar: [ + "محرم", + "صفر", + "ربيع الأول", + "ربيع الآخر", + "جمادى الأولى", + "جمادى الآخرة", + "رجب", + "شعبان", + "رمضان", + "شوال", + "ذو القعدة", + "ذو الحجة", + ] +}; + +/** + * Approximate Gregorian-to-Hijri conversion. + * Accurate to within ±1 day for modern dates. + */ +function toHijri(date: Date): { day: number; month: number; year: number } { + const jd = + Math.floor((14 + date.getMonth() + 1) / 12); + const y = date.getFullYear() + 4800 - jd; + const m = date.getMonth() + 1 + 12 * jd - 3; + let julianDay = + date.getDate() + + Math.floor((153 * m + 2) / 5) + + 365 * y + + Math.floor(y / 4) - + Math.floor(y / 100) + + Math.floor(y / 400) - + 32045; + + const l = julianDay - 1948440 + 10632; + const n = Math.floor((l - 1) / 10631); + const ll = l - 10631 * n + 354; + const j = + Math.floor((10985 - ll) / 5316) * Math.floor((50 * ll) / 17719) + + Math.floor(ll / 5670) * Math.floor((43 * ll) / 15238); + const l2 = + ll - + Math.floor((30 - j) / 15) * Math.floor((17719 * j) / 50) - + Math.floor(j / 16) * Math.floor((15238 * j) / 43) + + 29; + const hijriMonth = Math.floor((24 * l2) / 709); + const hijriDay = l2 - Math.floor((709 * hijriMonth) / 24); + const hijriYear = 30 * n + j - 30; + + return { day: hijriDay, month: hijriMonth, year: hijriYear }; +} + +export function useClock(timeFormat: "12h" | "24h", locale: "en" | "ar" = "en"): ClockState { + const [now, setNow] = useState(new Date()); + + useEffect(() => { + const tick = setInterval(() => setNow(new Date()), 1000); + return () => clearInterval(tick); + }, []); + + const timeParts = `${now.getHours()}:${now.getMinutes()}:${now.getSeconds()}`; + const timeString = formatTime(timeParts, timeFormat, locale); + + const h = now.getHours(); + const m = now.getMinutes(); + const s = now.getSeconds(); + + let timeOnly = ""; + if (timeFormat === "24h") { + timeOnly = `${String(h).padStart(2, "0")}:${String(m).padStart(2, "0")}:${String(s).padStart(2, "0")}`; + } else { + const h12 = h % 12 || 12; + timeOnly = `${h12}:${String(m).padStart(2, "0")}:${String(s).padStart(2, "0")}`; + } + + let period = ""; + if (timeFormat === "12h") { + if (locale === "ar") { + period = h >= 12 ? "مساءً" : "صباحاً"; + } else { + period = h >= 12 ? "PM" : "AM"; + } + } + + const dateString = now.toLocaleDateString(locale === "ar" ? "ar-DZ" : "en-US", { + weekday: "long", + year: "numeric", + month: "long", + day: "numeric", + }); + + const hijri = toHijri(now); + const monthName = HIJRI_MONTHS[locale][hijri.month - 1] ?? ""; + const weekdayName = now.toLocaleDateString(locale === "ar" ? "ar-DZ" : "en-US", { weekday: "long" }); + const hijriDate = locale === "ar" + ? `${weekdayName}، ${hijri.day} ${monthName} ${hijri.year} هـ` + : `${weekdayName}, ${hijri.day} ${monthName} ${hijri.year} AH`; + + return { now, timeString, timeOnly, period, dateString, hijriDate }; +} diff --git a/web/Miqaat/app/hooks/use-countdown.ts b/web/Miqaat/app/hooks/use-countdown.ts new file mode 100644 index 0000000..f8740e8 --- /dev/null +++ b/web/Miqaat/app/hooks/use-countdown.ts @@ -0,0 +1,39 @@ +import { useState, useEffect } from "react"; + +export interface CountdownState { + hours: string; + minutes: string; + seconds: string; + totalSeconds: number; +} + +/** + * Calculates and updates countdown to a target time ("HH:MM" 24h). + */ +export function useCountdown(targetTime: string | null): CountdownState { + const [remaining, setRemaining] = useState(0); + + useEffect(() => { + if (!targetTime) return; + + const calc = () => { + const now = new Date(); + const [h, m] = targetTime.split(":").map(Number); + const target = new Date(); + target.setHours(h, m, 0, 0); + let diff = Math.floor((target.getTime() - now.getTime()) / 1000); + if (diff < 0) diff += 86400; // next day + setRemaining(diff); + }; + + calc(); + const interval = setInterval(calc, 1000); + return () => clearInterval(interval); + }, [targetTime]); + + const hours = String(Math.floor(remaining / 3600)).padStart(2, "0"); + const minutes = String(Math.floor((remaining % 3600) / 60)).padStart(2, "0"); + const seconds = String(remaining % 60).padStart(2, "0"); + + return { hours, minutes, seconds, totalSeconds: remaining }; +} diff --git a/web/Miqaat/app/hooks/use-location-selection.ts b/web/Miqaat/app/hooks/use-location-selection.ts new file mode 100644 index 0000000..f286405 --- /dev/null +++ b/web/Miqaat/app/hooks/use-location-selection.ts @@ -0,0 +1,121 @@ +import { useState, useEffect, useCallback } from "react"; +import type { Wilaya, Location } from "~/data/prayer-data"; +import { fetchWilayas, findNearestLocation } from "~/services/api"; + +export interface LocationSelectionState { + wilayas: Wilaya[]; + selectedWilaya: Wilaya | null; + isLoadingWilayas: boolean; + isDetectingGPS: boolean; + gpsError: string | null; + fetchError: string | null; + selectWilaya: (wilaya: Wilaya | null) => void; + clearSelection: () => void; + detectGPSLocation: () => void; + clearGpsError: () => void; + retryFetch: () => void; + getSelectedLocation: () => Location | null; +} + +export function useLocationSelection(): LocationSelectionState { + const [wilayas, setWilayas] = useState([]); + const [selectedWilaya, setSelectedWilaya] = useState(null); + const [isLoadingWilayas, setIsLoadingWilayas] = useState(true); + const [isDetectingGPS, setIsDetectingGPS] = useState(false); + const [gpsError, setGpsError] = useState(null); + const [fetchError, setFetchError] = useState(null); + + const loadWilayas = useCallback(async (cancelled = false) => { + setIsLoadingWilayas(true); + setFetchError(null); + try { + const data = await fetchWilayas(); + if (!cancelled) setWilayas(data); + } catch { + if (!cancelled) setFetchError("Failed to load cities. Please check your connection and try again."); + } finally { + if (!cancelled) setIsLoadingWilayas(false); + } + }, []); + + // Fetch wilayas on mount + useEffect(() => { + let cancelled = false; + loadWilayas(cancelled); + return () => { cancelled = true; }; + }, [loadWilayas]); + + const retryFetch = useCallback(() => { + loadWilayas(); + }, [loadWilayas]); + + const selectWilaya = useCallback((wilaya: Wilaya | null) => { + setSelectedWilaya(wilaya); + setGpsError(null); + }, []); + + const clearSelection = useCallback(() => { + setSelectedWilaya(null); + setGpsError(null); + }, []); + + const clearGpsError = useCallback(() => { + setGpsError(null); + }, []); + + const detectGPSLocation = useCallback(() => { + if (!navigator.geolocation) { + setGpsError("GPS is not available on this device. Please select your Wilaya manually."); + return; + } + setIsDetectingGPS(true); + setGpsError(null); + navigator.geolocation.getCurrentPosition( + async (pos) => { + try { + const result = await findNearestLocation(pos.coords.latitude, pos.coords.longitude); + if (result) { + setSelectedWilaya(result.wilaya); + } + } catch { + setGpsError("Could not determine your location. Please select your Wilaya manually."); + } finally { + setIsDetectingGPS(false); + } + }, + () => { + setIsDetectingGPS(false); + setGpsError("Location access was denied. Please select your Wilaya from the dropdown below."); + }, + ); + }, []); + + const getSelectedLocation = useCallback((): Location | null => { + if (!selectedWilaya) return null; + return { + city: selectedWilaya.name, + cityAr: selectedWilaya.nameAr, + country: "Algeria", + countryAr: "الجزائر", + timezone: "Africa/Algiers", + latitude: selectedWilaya.latitude, + longitude: selectedWilaya.longitude, + cityId: selectedWilaya.cityId, + }; + }, [selectedWilaya]); + + return { + wilayas, + selectedWilaya, + isLoadingWilayas, + isDetectingGPS, + gpsError, + fetchError, + selectWilaya, + clearSelection, + detectGPSLocation, + clearGpsError, + retryFetch, + getSelectedLocation, + }; +} diff --git a/web/Miqaat/app/hooks/use-notification-permission.ts b/web/Miqaat/app/hooks/use-notification-permission.ts new file mode 100644 index 0000000..6f7274c --- /dev/null +++ b/web/Miqaat/app/hooks/use-notification-permission.ts @@ -0,0 +1,52 @@ +import { useState, useEffect, useCallback } from "react"; + +export type PermissionStatus = NotificationPermission | "unsupported"; + +/** + * Hook to manage and request browser notification permissions. + * Provides a clean interface for UI components to handle different permission states. + */ +export function useNotificationPermission() { + const [permission, setPermission] = useState("default"); + + const updatePermission = useCallback(() => { + if (typeof window === "undefined" || !("Notification" in window)) { + setPermission("unsupported"); + return; + } + setPermission(Notification.permission); + }, []); + + useEffect(() => { + updatePermission(); + + // Some browsers allow changing permissions without reload (rare but possible via settings) + // We can't easily listen to permission changes, but we check on focus. + window.addEventListener("focus", updatePermission); + return () => window.removeEventListener("focus", updatePermission); + }, [updatePermission]); + + const requestPermission = useCallback(async () => { + if (typeof window === "undefined" || !("Notification" in window)) { + return "unsupported"; + } + + if (Notification.permission === "denied") { + return "denied"; + } + + const result = await Notification.requestPermission(); + setPermission(result); + return result; + }, []); + + return { + permission, + isGranted: permission === "granted", + isDenied: permission === "denied", + isUnsupported: permission === "unsupported", + isDefault: permission === "default", + requestPermission, + refresh: updatePermission, + }; +} diff --git a/web/Miqaat/app/hooks/use-notifications.ts b/web/Miqaat/app/hooks/use-notifications.ts new file mode 100644 index 0000000..46acf5f --- /dev/null +++ b/web/Miqaat/app/hooks/use-notifications.ts @@ -0,0 +1,85 @@ +import { useEffect, useRef, useCallback } from "react"; +import type { PrayerTime } from "~/data/prayer-data"; + +/** + * Robust frontend notification scheduler. + * Uses periodic polling and visibility checks to ensure notifications fire + * even if the browser throttles background timers. + * + * Note: Since this is a frontend-only React app without a Service Worker push implementation, + * notifications will only work while the tab is open. + */ +export function useNotifications( + prayerTimes: PrayerTime[], + enabled: boolean, + preferences: Record = {}, +): void { + const firedNotifications = useRef>(new Set()); + + const checkAndFireNotifications = useCallback(() => { + if (!enabled || prayerTimes.length === 0) return; + if (typeof window === "undefined" || !("Notification" in window)) return; + if (Notification.permission !== "granted") return; + + const now = new Date(); + const nowMs = now.getTime(); + const todayStr = now.toISOString().split("T")[0]; // Use local date string + + for (const prayer of prayerTimes) { + if (!prayer.isPrayer) continue; // skip Sunrise + if (preferences[prayer.name] === false) continue; + + const [h, m] = prayer.time.split(":").map(Number); + const target = new Date(); + target.setHours(h, m, 0, 0); + + // Notify 1 minute before + const notifyMs = target.getTime() - 60_000; + + // Delay is positive if we've passed the target notification time + const delay = nowMs - notifyMs; + + const uniqueKey = `${todayStr}-${prayer.name}`; + + // If we are past the notification time but within a 5-minute grace period + if (delay >= 0 && delay < 5 * 60_000) { + if (!firedNotifications.current.has(uniqueKey)) { + new Notification("Prayer Time Approaching", { + body: `${prayer.name} prayer in 1 minute`, + icon: "/favicon.svg", + tag: `prayer-${prayer.name}`, + }); + firedNotifications.current.add(uniqueKey); + } + } + } + }, [prayerTimes, enabled, preferences]); + + useEffect(() => { + if (!enabled) return; + + // Run an initial check immediately + checkAndFireNotifications(); + + // Use setInterval (10 seconds) instead of setTimeout to combat browser throttling + // This acts as a time-sync mechanism that naturally checks the system clock. + const intervalId = setInterval(checkAndFireNotifications, 10_000); + + // Add focus listeners to instantly catch up on missed notifications + // when the user switches back to the tab. + const handleVisibility = () => { + if (document.visibilityState === "visible") { + checkAndFireNotifications(); + } + }; + + window.addEventListener("focus", checkAndFireNotifications); + document.addEventListener("visibilitychange", handleVisibility); + + return () => { + clearInterval(intervalId); + window.removeEventListener("focus", checkAndFireNotifications); + document.removeEventListener("visibilitychange", handleVisibility); + }; + }, [checkAndFireNotifications, enabled]); +} diff --git a/web/Miqaat/app/hooks/use-prayer-status.ts b/web/Miqaat/app/hooks/use-prayer-status.ts new file mode 100644 index 0000000..69f20e6 --- /dev/null +++ b/web/Miqaat/app/hooks/use-prayer-status.ts @@ -0,0 +1,52 @@ +import { useState, useEffect } from "react"; +import type { PrayerTime } from "~/data/prayer-data"; + +export type PrayerStatus = "forbidden" | "duha" | null; + +/** + * Determines the current prayer status based on Sunrise and Dhuhr times. + * + * Timeline: + * - Sunrise → Sunrise + 15 min: "forbidden" (nafl prayer prohibited) + * - Sunrise + 15 min → Dhuhr - 15 min: "duha" (Duha prayer time) + * - Dhuhr - 15 min → Dhuhr: "forbidden" (nafl prayer prohibited) + * - Otherwise: null + */ +export function usePrayerStatus(prayerTimes: PrayerTime[]): PrayerStatus { + const [status, setStatus] = useState(null); + + useEffect(() => { + if (prayerTimes.length === 0) return; + + const sunrise = prayerTimes.find((p) => p.name === "Sunrise"); + const dhuhr = prayerTimes.find((p) => p.name === "Dhuhr"); + if (!sunrise || !dhuhr) return; + + const [sunH, sunM] = sunrise.time.split(":").map(Number); + const sunriseMinutes = sunH * 60 + sunM; + + const [dhuH, dhuM] = dhuhr.time.split(":").map(Number); + const dhuhrMinutes = dhuH * 60 + dhuM; + + const calc = () => { + const now = new Date(); + const nowMinutes = now.getHours() * 60 + now.getMinutes(); + + if (nowMinutes >= sunriseMinutes && nowMinutes < sunriseMinutes + 15) { + setStatus("forbidden"); + } else if (nowMinutes >= sunriseMinutes + 15 && nowMinutes < dhuhrMinutes - 15) { + setStatus("duha"); + } else if (nowMinutes >= dhuhrMinutes - 15 && nowMinutes < dhuhrMinutes) { + setStatus("forbidden"); + } else { + setStatus(null); + } + }; + + calc(); + const interval = setInterval(calc, 15000); // re-check every 15 seconds + return () => clearInterval(interval); + }, [prayerTimes]); + + return status; +} diff --git a/web/Miqaat/app/hooks/use-prayer-times.ts b/web/Miqaat/app/hooks/use-prayer-times.ts new file mode 100644 index 0000000..81bee20 --- /dev/null +++ b/web/Miqaat/app/hooks/use-prayer-times.ts @@ -0,0 +1,193 @@ +import { useState, useEffect, useCallback } from "react"; +import type { PrayerTime, Location } from "~/data/prayer-data"; +import { fetchPrayerTimes } from "~/services/api"; +import { useLanguage } from "~/i18n/language-context"; + +const STORAGE_KEY_LOCATION = "prayerApp_location"; +const STORAGE_KEY_FORMAT = "prayerApp_timeFormat"; +const STORAGE_KEY_NOTIFICATIONS = "prayerApp_notifications"; +const STORAGE_KEY_NOTIFICATION_PREFS = "prayerApp_notificationPrefs"; + +const DEFAULT_LOCATION: Location = { + city: "Algiers", + cityAr: "الجزائر", + country: "Algeria", + countryAr: "الجزائر", + timezone: "Africa/Algiers", + latitude: 36.75, + longitude: 3.06, + cityId: 27, +}; + + + +function loadFromStorage(key: string, fallback: T): T { + try { + const raw = localStorage.getItem(key); + if (!raw) return fallback; + const parsed = JSON.parse(raw); + + // For location, ensure new fields exist for backward compatibility + if (key === STORAGE_KEY_LOCATION) { + return { ...fallback, ...parsed } as T; + } + + return parsed as T; + } catch { + return fallback; + } +} + +function saveToStorage(key: string, value: T): void { + try { + localStorage.setItem(key, JSON.stringify(value)); + } catch { + // ignore + } +} + +export interface PrayerAppState { + location: Location; + timeFormat: "12h" | "24h"; + prayerTimes: PrayerTime[]; + currentPrayer: PrayerTime | null; + nextPrayer: PrayerTime | null; + isLoading: boolean; + error: string | null; + notificationsEnabled: boolean; + notificationPreferences: Record; + setLocation: (loc: Location) => void; + setTimeFormat: (f: "12h" | "24h") => void; + setNotificationsEnabled: (enabled: boolean) => void; + setNotificationPreference: (prayerName: string, enabled: boolean) => void; + refreshPrayerTimes: () => Promise; +} + +function determineCurrent( + times: PrayerTime[], +): { current: PrayerTime | null; next: PrayerTime | null } { + const now = new Date(); + const nowMinutes = now.getHours() * 60 + now.getMinutes(); + const prayers = times; // Use all events including Sunrise and Duha as timeline boundaries + let current: PrayerTime | null = null; + let next: PrayerTime | null = null; + + for (let i = 0; i < prayers.length; i++) { + const [h, m] = prayers[i].time.split(":").map(Number); + const prayerMinutes = h * 60 + m; + const nextPrayerMinutes = + i + 1 < prayers.length + ? (() => { + const [nh, nm] = prayers[i + 1].time.split(":").map(Number); + return nh * 60 + nm; + })() + : 24 * 60; + + if (nowMinutes >= prayerMinutes && nowMinutes < nextPrayerMinutes) { + current = prayers[i]; + next = i + 1 < prayers.length ? prayers[i + 1] : prayers[0]; + break; + } + } + + if (!current) { + current = prayers[prayers.length - 1] ?? null; + next = prayers[0] ?? null; + } + + return { current, next }; +} + +export function usePrayerTimes(): PrayerAppState { + const { t } = useLanguage(); + const [location, setLocationState] = useState( + () => loadFromStorage(STORAGE_KEY_LOCATION, DEFAULT_LOCATION), + ); + const [timeFormat, setFormatState] = useState<"12h" | "24h">( + () => loadFromStorage<"12h" | "24h">(STORAGE_KEY_FORMAT, "12h"), + ); + const [notificationsEnabled, setNotificationsEnabledState] = useState( + () => loadFromStorage(STORAGE_KEY_NOTIFICATIONS, false), + ); + const [notificationPreferences, setNotificationPreferencesState] = useState>( + () => loadFromStorage>(STORAGE_KEY_NOTIFICATION_PREFS, {}), + ); + + const [prayerTimes, setPrayerTimes] = useState([]); + const [currentPrayer, setCurrentPrayer] = useState(null); + const [nextPrayer, setNextPrayer] = useState(null); + const [isLoading, setIsLoading] = useState(true); + const [error, setError] = useState(null); + + const loadPrayerTimes = useCallback(async () => { + setIsLoading(true); + setError(null); + try { + const times = await fetchPrayerTimes(location.cityId); + setPrayerTimes(times); + const { current, next } = determineCurrent(times); + setCurrentPrayer(current); + setNextPrayer(next); + } catch { + setError(t("error.fetchPrayer") ?? "Failed to fetch prayer times. Please try again."); + } finally { + setIsLoading(false); + } + }, [location, t]); + + // Fetch on mount and when location changes + useEffect(() => { + loadPrayerTimes(); + }, [loadPrayerTimes]); + + // Recalculate current/next prayer every minute + useEffect(() => { + if (prayerTimes.length === 0) return; + const interval = setInterval(() => { + const { current, next } = determineCurrent(prayerTimes); + setCurrentPrayer(current); + setNextPrayer(next); + }, 60000); + return () => clearInterval(interval); + }, [prayerTimes]); + + const setLocation = (loc: Location) => { + setLocationState(loc); + saveToStorage(STORAGE_KEY_LOCATION, loc); + }; + + + + const setTimeFormat = (f: "12h" | "24h") => { + setFormatState(f); + saveToStorage(STORAGE_KEY_FORMAT, f); + }; + + const setNotificationsEnabled = (enabled: boolean) => { + setNotificationsEnabledState(enabled); + saveToStorage(STORAGE_KEY_NOTIFICATIONS, enabled); + }; + + const setNotificationPreference = (prayerName: string, enabled: boolean) => { + const newPrefs = { ...notificationPreferences, [prayerName]: enabled }; + setNotificationPreferencesState(newPrefs); + saveToStorage(STORAGE_KEY_NOTIFICATION_PREFS, newPrefs); + }; + + return { + location, + timeFormat, + prayerTimes, + currentPrayer, + nextPrayer, + isLoading, + error, + notificationsEnabled, + notificationPreferences, + setLocation, + setTimeFormat, + setNotificationsEnabled, + setNotificationPreference, + refreshPrayerTimes: loadPrayerTimes, + }; +} diff --git a/web/Miqaat/app/hooks/use-settings-draft.ts b/web/Miqaat/app/hooks/use-settings-draft.ts new file mode 100644 index 0000000..82707f0 --- /dev/null +++ b/web/Miqaat/app/hooks/use-settings-draft.ts @@ -0,0 +1,109 @@ +import { useState, useEffect, useCallback, useMemo } from "react"; +import { useAppContext } from "~/context/app-context"; +import { useLanguage } from "~/i18n/language-context"; +import { useColorScheme } from "@dazl/color-scheme/react"; +import type { Locale } from "~/i18n/translations"; + +type ColorScheme = "light" | "dark" | "system"; + +/** + * Hook to manage draft settings state before persisting to global context/localStorage. + * Now includes Language and Theme to ensure a unified "Save" experience. + */ +export function useSettingsDraft() { + const context = useAppContext(); + const { locale, setLocale } = useLanguage(); + const { configScheme, setColorScheme } = useColorScheme(); + + // Draft state initialized from current values + const [draftFormat, setDraftFormat] = useState(context.timeFormat); + const [draftNotifications, setDraftNotifications] = useState(context.notificationsEnabled); + const [draftPrefs, setDraftPrefs] = useState(context.notificationPreferences); + const [draftLocale, setDraftLocale] = useState(locale); + const [draftTheme, setDraftTheme] = useState(configScheme); + + // Sync draft with global state if it changes externally + useEffect(() => { + setDraftFormat(context.timeFormat); + setDraftNotifications(context.notificationsEnabled); + setDraftPrefs(context.notificationPreferences); + setDraftLocale(locale); + setDraftTheme(configScheme); + }, [context.timeFormat, context.notificationsEnabled, context.notificationPreferences, locale, configScheme]); + + // Determine if there are unsaved changes across ALL settings + const isDirty = useMemo(() => { + const isFormatDirty = draftFormat !== context.timeFormat; + const isNotifDirty = draftNotifications !== context.notificationsEnabled; + const isLocaleDirty = draftLocale !== locale; + const isThemeDirty = draftTheme !== configScheme; + const isPrefsDirty = JSON.stringify(draftPrefs) !== JSON.stringify(context.notificationPreferences); + + return isFormatDirty || isNotifDirty || isLocaleDirty || isThemeDirty || isPrefsDirty; + }, [draftFormat, draftNotifications, draftPrefs, draftLocale, draftTheme, context, locale, configScheme]); + + /** + * Persists ALL draft settings to their respective global providers. + */ + const save = async () => { + try { + // Premium feedback delay + await new Promise((resolve) => setTimeout(resolve, 800)); + + // Persist to context / storage + context.setTimeFormat(draftFormat); + context.setNotificationsEnabled(draftNotifications); + setLocale(draftLocale); + setColorScheme(draftTheme); + + // Batch sync prayer-specific notification preferences + Object.entries(draftPrefs).forEach(([prayer, enabled]) => { + if (context.notificationPreferences[prayer] !== enabled) { + context.setNotificationPreference(prayer, enabled); + } + }); + + return { success: true }; + } catch (error) { + console.error("Failed to save settings:", error); + return { success: false, error: "Critical error: Could not save settings to storage." }; + } + }; + + const discard = useCallback(() => { + setDraftFormat(context.timeFormat); + setDraftNotifications(context.notificationsEnabled); + setDraftPrefs(context.notificationPreferences); + setDraftLocale(locale); + setDraftTheme(configScheme); + }, [context, locale, configScheme]); + + const resetToDefaults = useCallback(() => { + setDraftFormat("12h"); + setDraftNotifications(false); + setDraftPrefs({}); + setDraftLocale("en"); + setDraftTheme("system"); + }, []); + + const setNotificationPreference = useCallback((prayerName: string, enabled: boolean) => { + setDraftPrefs((prev) => ({ ...prev, [prayerName]: enabled })); + }, []); + + return { + draftFormat, + setDraftFormat, + draftNotifications, + setDraftNotifications, + draftPrefs, + setNotificationPreference, + draftLocale, + setDraftLocale, + draftTheme, + setDraftTheme, + isDirty, + save, + discard, + resetToDefaults, + }; +} diff --git a/web/Miqaat/app/i18n/language-context.tsx b/web/Miqaat/app/i18n/language-context.tsx new file mode 100644 index 0000000..b3b856e --- /dev/null +++ b/web/Miqaat/app/i18n/language-context.tsx @@ -0,0 +1,63 @@ +import { createContext, useContext, useState, useCallback, type ReactNode } from "react"; +import { translations, type Locale, type TranslationKey } from "./translations"; + +const STORAGE_KEY = "prayerApp_language"; + +interface LanguageContextValue { + locale: Locale; + dir: "ltr" | "rtl"; + setLocale: (locale: Locale) => void; + t: (key: TranslationKey, vars?: Record) => string; +} + +const LanguageContext = createContext(null); + +function loadLocale(): Locale { + try { + const raw = localStorage.getItem(STORAGE_KEY); + if (raw === "ar" || raw === "en") return raw; + } catch { + // ignore + } + return "en"; +} + +export function LanguageProvider({ children }: { children: ReactNode }) { + const [locale, setLocaleState] = useState(loadLocale); + + const setLocale = useCallback((l: Locale) => { + setLocaleState(l); + try { + localStorage.setItem(STORAGE_KEY, l); + } catch { + // ignore + } + }, []); + + const dir = locale === "ar" ? "rtl" : "ltr"; + + const t = useCallback( + (key: TranslationKey, vars?: Record): string => { + let str = translations[locale][key] ?? translations.en[key] ?? key; + if (vars) { + for (const [k, v] of Object.entries(vars)) { + str = str.replace(`{${k}}`, v); + } + } + return str; + }, + [locale], + ); + + return ( + + {children} + + ); +} + +export function useLanguage(): LanguageContextValue { + const ctx = useContext(LanguageContext); + if (!ctx) throw new Error("useLanguage must be used within LanguageProvider"); + return ctx; +} diff --git a/web/Miqaat/app/i18n/translations.ts b/web/Miqaat/app/i18n/translations.ts new file mode 100644 index 0000000..ac3c8a2 --- /dev/null +++ b/web/Miqaat/app/i18n/translations.ts @@ -0,0 +1,249 @@ +export type Locale = "en" | "ar"; + +export type TranslationKey = keyof typeof en; + +const en = { + // Navigation + "nav.home": "Home", + "nav.location": "Location", + "nav.calendar": "Calendar", + "nav.settings": "Settings", + "nav.logo.prayer": "miqaat", + "nav.logo.times": "", + + // Location page + "location.title": "Choose Location", + "location.subtitle": "Select your Wilaya in Algeria to get accurate prayer times.", + "location.wilaya.label": "Wilaya (Province)", + "location.wilaya.placeholder": "— Select a Wilaya —", + "location.wilaya.loading": "Loading wilayas…", + "location.confirm": "Confirm Location", + "location.or": "OR", + "location.gps.detect": "Use my GPS location", + "location.gps.detecting": "Detecting location...", + "location.gps.success": "Location detected!", + "location.gps.error.title": "GPS Unavailable", + "location.gps.error.unavailable": "GPS is not available on this device. Please select your Wilaya manually.", + "location.gps.error.failed": "Could not determine your location. Please select your Wilaya manually.", + "location.gps.error.denied": "Location access was denied. Please select your Wilaya from the dropdown below.", + "location.change": "Change Location", + + // Home page + "home.currentPrayer": "Current Prayer", + "home.prayerTime": "Prayer Time", + "home.nextPrayer": "Next Prayer", + "home.hours": "Hours", + "home.minutes": "Minutes", + "home.seconds": "Seconds", + "home.startsAt": "Starts at", + "home.schedule": "Today's Prayer Schedule", + "home.now": "Now", + "home.forbiddenPrayer": "Forbidden prayer times (except fard)", + "home.duha": "Prayer of Duha", + + // Prayer names + "prayer.Fajr": "Fajr", + "prayer.Sunrise": "Sunrise", + "prayer.Duha": "Duha", + "prayer.Dhuhr": "Dhuhr", + "prayer.Asr": "Asr", + "prayer.Maghrib": "Maghrib", + "prayer.Isha": "Isha", + + // Additional info + "info.sunrise": "Sunrise", + "info.sunset": "Sunset", + "info.hijriDate": "Hijri Date", + "info.timezone": "Timezone", + "info.midnight": "Midnight", + "info.lastThird": "Last Third of the Night", + + // Calendar page + "calendar.title": "Prayer Times Calendar", + "calendar.weekTitle": "Weekly Prayer Calendar", + "calendar.day": "Day", + "calendar.today": "Today", + "calendar.weekly": "Weekly", + "calendar.monthly": "Monthly", + "calendar.print": "Print", + "calendar.error": "Failed to load calendar data. Please check your connection.", + + // Settings page + "settings.title": "Settings", + + "settings.theme": "Appearance", + "settings.theme.desc": "Choose the app appearance. \"System\" follows your device settings.", + "settings.theme.light": "Light", + "settings.theme.dark": "Dark", + "settings.theme.system": "System", + "settings.timeFormat": "Time Format", + "settings.timeFormat.desc": "Choose how prayer times are displayed throughout the app.", + "settings.timeFormat.12h": "12-Hour", + "settings.timeFormat.12h.desc": "AM / PM format", + "settings.timeFormat.24h": "24-Hour", + "settings.timeFormat.24h.desc": "Military format", + "settings.notifications": "Prayer Notifications", + "settings.notifications.desc": "Receive a notification 1 minute before each prayer", + "settings.notifications.enabled": "Enabled", + "settings.notifications.disabled": "Disabled", + "settings.notifications.denied": "Notifications blocked by browser", + "settings.notifications.unsupported": "Notifications are not supported in this browser", + "settings.notifications.limitation": "Note: Notifications only work while the app is open in a tab.", + "settings.notifications.scheduled": "Notifications scheduled for today's prayers.", + "settings.notifications.blocked.title": "Notifications Blocked", + "settings.notifications.blocked.guide": "Your browser is blocking notifications. Please click the lock icon in your address bar to allow them for this site.", + + "settings.language": "Language", + "settings.language.desc": "Choose your preferred language for the app interface.", + "settings.save": "Save Settings", + "settings.reset": "Reset to Defaults", + "settings.unsavedChanges": "You have unsaved changes", + "settings.saving": "Saving...", + "settings.saved": "Settings saved successfully", + "settings.reset.success": "Settings reset to defaults", + + + // Footer + "footer.privacy": "Privacy Policy", + "footer.terms": "Terms of Service", + "footer.about": "About", + "footer.links": "Links", + "footer.contact": "Contact", + "footer.slogan": "A site to display prayer times in Algerian Wilayas", + "footer.contactDesc": "You can leave a message for me", + "footer.sendMessage": "Send a Message", + "footer.subCopy": "Miqaat - Prayer times in Algeria", + "footer.copy": "PrayerTimes App. All rights reserved.", + + // Notifications + "notification.title": "Prayer Time Approaching", + "notification.body": "{prayer} prayer in 1 minute", + + // Errors + "error.fetchPrayer": "Failed to fetch prayer times. Please check your connection.", + "error.retry": "Try Again", +} as const; + +const ar: Record = { + // Navigation + "nav.home": "الرئيسية", + "nav.location": "الموقع", + "nav.calendar": "التقويم", + "nav.settings": "الإعدادات", + "nav.logo.prayer": "ميقات", + "nav.logo.times": "", + + // Location page + "location.title": "اختر الموقع", + "location.subtitle": "اختر ولايتك لتحصل على اوقات الصلاة حسب مركز الولاية", + "location.wilaya.label": "الولاية", + "location.wilaya.placeholder": "— اختر ولاية —", + "location.wilaya.loading": "جاري تحميل الولايات…", + "location.confirm": "تأكيد الموقع", + "location.or": "أو", + "location.gps.detect": "استخدم موقعي GPS", + "location.gps.detecting": "جاري تحديد الموقع...", + "location.gps.success": "تم تحديد الموقع!", + "location.gps.error.title": "GPS غير متوفر", + "location.gps.error.unavailable": "خدمة GPS غير متوفرة على هذا الجهاز. يرجى اختيار ولايتك يدوياً.", + "location.gps.error.failed": "تعذر تحديد موقعك. يرجى اختيار ولايتك يدوياً.", + "location.gps.error.denied": "تم رفض الوصول إلى الموقع. يرجى اختيار ولايتك من القائمة أدناه.", + "location.change": "تغيير الموقع", + + // Home page + "home.currentPrayer": "الصلاة الحالية", + "home.prayerTime": "وقت الصلاة", + "home.nextPrayer": "الصلاة القادمة", + "home.hours": "ساعات", + "home.minutes": "دقائق", + "home.seconds": "ثواني", + "home.startsAt": "تبدأ في", + "home.schedule": "مواقيت الصلاة اليوم", + "home.now": "الآن", + "home.forbiddenPrayer": "وقت نهي (الا الفريضة)", + "home.duha": "صلاة الضحى", + + // Prayer names + "prayer.Fajr": "الفجر", + "prayer.Sunrise": "الشروق", + "prayer.Duha": "الضحى", + "prayer.Dhuhr": "الظهر", + "prayer.Asr": "العصر", + "prayer.Maghrib": "المغرب", + "prayer.Isha": "العشاء", + + // Additional info + "info.sunrise": "الشروق", + "info.sunset": "الغروب", + "info.hijriDate": "التاريخ الهجري", + "info.timezone": "المنطقة الزمنية", + "info.midnight": "منتصف الليل", + "info.lastThird": "ثلث الليل الأخير", + + // Calendar page + "calendar.title": "تقويم أوقات الصلاة", + "calendar.weekTitle": "تقويم الصلاة الأسبوعي", + "calendar.day": "اليوم", + "calendar.today": "اليوم", + "calendar.weekly": "أسبوعي", + "calendar.monthly": "شهري", + "calendar.print": "طباعة", + "calendar.error": "فشل في تحميل بيانات التقويم. يرجى التحقق من الاتصال.", + + // Settings page + "settings.title": "الإعدادات", + + "settings.theme": "المظهر", + "settings.theme.desc": "اختر مظهر التطبيق. \"النظام\" يتبع إعدادات جهازك.", + "settings.theme.light": "فاتح", + "settings.theme.dark": "داكن", + "settings.theme.system": "النظام", + "settings.timeFormat": "تنسيق الوقت", + "settings.timeFormat.desc": "اختر كيف يتم عرض أوقات الصلاة في التطبيق.", + "settings.timeFormat.12h": "12 ساعة", + "settings.timeFormat.12h.desc": "تنسيق صباحي/مسائي", + "settings.timeFormat.24h": "24 ساعة", + "settings.timeFormat.24h.desc": "تنسيق 24 ساعة", + "settings.notifications": "إشعارات الصلاة", + "settings.notifications.desc": "تلقي إشعار قبل دقيقة واحدة من كل صلاة", + "settings.notifications.enabled": "مفعّل", + "settings.notifications.disabled": "معطّل", + "settings.notifications.denied": "الإشعارات محظورة من المتصفح", + "settings.notifications.unsupported": "الإشعارات غير مدعومة في هذا المتصفح", + "settings.notifications.limitation": "ملاحظة: تعمل الإشعارات فقط أثناء فتح التطبيق في علامة تبويب.", + "settings.notifications.scheduled": "تمت جدولة الإشعارات لصلوات اليوم.", + "settings.notifications.blocked.title": "الإشعارات محظورة", + "settings.notifications.blocked.guide": "متصفحك يحظر الإشعارات. يرجى الضغط على أيقونة القفل في شريط العنوان للسماح بالتنبيهات لهذا الموقع.", + + "settings.language": "اللغة", + "settings.language.desc": "اختر لغتك المفضلة لواجهة التطبيق.", + "settings.save": "حفظ الإعدادات", + "settings.reset": "إعادة تعيين", + "settings.unsavedChanges": "لديك تغييرات غير محفوظة", + "settings.saving": "جاري الحفظ...", + "settings.saved": "تم حفظ الإعدادات بنجاح", + "settings.reset.success": "تمت إعادة الإعدادات الافتراضية", + + + // Footer + "footer.privacy": "سياسة الخصوصية", + "footer.terms": "شروط الخدمة", + "footer.about": "حول", + "footer.links": "روابط", + "footer.contact": "تواصل", + "footer.slogan": "موقع لعرض أوقات الصلاة في ولايات الجزائر", + "footer.contactDesc": "يمكنك ترك رسالة لي", + "footer.sendMessage": "أرسل رسالة", + "footer.subCopy": "ميقات - أوقات الصلاة في الجزائر", + "footer.copy": "جميع الحقوق محفوظة.", + + // Notifications + "notification.title": "اقتراب وقت الصلاة", + "notification.body": "صلاة {prayer} بعد دقيقة واحدة", + + // Errors + "error.fetchPrayer": "فشل في تحميل بيانات التقويم. يرجى التحقق من الاتصال.", + "error.retry": "إعادة المحاولة", +}; + +export const translations: Record> = { en, ar }; diff --git a/web/Miqaat/app/root.module.css b/web/Miqaat/app/root.module.css new file mode 100644 index 0000000..c1e6227 --- /dev/null +++ b/web/Miqaat/app/root.module.css @@ -0,0 +1,12 @@ +.body { + background: var(--color-bg); + color: var(--color-text); + font-family: var(--family-body); + min-height: 100vh; + display: flex; + flex-direction: column; +} + +.pageContent { + flex: 1; +} diff --git a/web/Miqaat/app/root.tsx b/web/Miqaat/app/root.tsx new file mode 100644 index 0000000..4a4ef4d --- /dev/null +++ b/web/Miqaat/app/root.tsx @@ -0,0 +1,69 @@ +import { Links, Meta, Outlet, Scripts, ScrollRestoration } from "react-router"; +import type { Route } from "./+types/root"; +import colorSchemeApi from "@dazl/color-scheme/client?url"; +import { ErrorBoundary as ErrorBoundaryRoot } from "~/components/error-boundary/error-boundary"; +import "./styles/reset.css"; +import "./styles/global.css"; +import "./styles/theme.css"; +import { useColorScheme } from "@dazl/color-scheme/react"; + +import styles from "./root.module.css"; +import { NavigationHeader } from "./blocks/__global/navigation-header"; +import { FooterInformation } from "./blocks/__global/footer-information"; +import { AppProvider } from "./context/app-context"; +import { LanguageProvider, useLanguage } from "./i18n/language-context"; + +export const links: Route.LinksFunction = () => [ + { rel: "icon", href: "/logo.jpg", type: "image/jpeg" }, + { rel: "manifest", href: "/manifest.json" }, + { rel: "preconnect", href: "https://fonts.googleapis.com" }, + { rel: "preconnect", href: "https://fonts.gstatic.com", crossOrigin: "anonymous" }, + { + rel: "stylesheet", + href: "https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@300;400;600;700&family=DM+Sans:wght@400;500;600&family=Roboto+Mono:wght@400;500;600;700&family=Noto+Sans+Arabic:wght@400;500;600;700&family=Changa:wght@200..800&display=swap", + }, +]; + +function InnerLayout({ children }: { children: React.ReactNode }) { + const { locale, dir } = useLanguage(); + const { rootCssClass, resolvedScheme } = useColorScheme(); + return ( + + + + + {locale === "ar" ? "ميقات" : "miqaat"} + + + + + + +
+ +
+
{children}
+
+ +
+
+ + + + + ); +} + +export function Layout({ children }: { children: React.ReactNode }) { + return ( + + {children} + + ); +} + +export default function App() { + return ; +} + +export const ErrorBoundary = ErrorBoundaryRoot; diff --git a/web/Miqaat/app/routes.ts b/web/Miqaat/app/routes.ts new file mode 100644 index 0000000..4501445 --- /dev/null +++ b/web/Miqaat/app/routes.ts @@ -0,0 +1,8 @@ +import { type RouteConfig, index, route } from "@react-router/dev/routes"; + +export default [ + index("routes/home.tsx"), + route("/location", "routes/location-selection.tsx"), + route("/settings", "routes/settings.tsx"), + route("/calendar", "routes/calendar.tsx"), +] satisfies RouteConfig; diff --git a/web/Miqaat/app/routes/calendar.module.css b/web/Miqaat/app/routes/calendar.module.css new file mode 100644 index 0000000..eb62d8a --- /dev/null +++ b/web/Miqaat/app/routes/calendar.module.css @@ -0,0 +1,228 @@ +.root { + max-width: 1400px; + margin: 0 auto; + padding: var(--space-6) var(--space-8); + display: flex; + flex-direction: column; + gap: var(--space-6); + width: 100%; +} + +.pageTitle { + font-family: var(--family-display); + font-size: var(--text-3xl); + font-weight: 600; + color: var(--color-primary); +} + +:global([lang="ar"]) .pageTitle { + font-family: var(--family-brand-ar); + font-size: 3rem; + font-weight: 700; +} + +/* ── Toolbar: Toggle + Print ─────────────────────────── */ +.toolbar { + display: flex; + align-items: center; + justify-content: space-between; + gap: var(--space-4); + flex-wrap: wrap; +} + +.viewToggle { + display: flex; + background: var(--color-bg-muted); + border-radius: var(--radius-lg); + overflow: hidden; + border: 1px solid var(--color-border-light); + padding: 2px; +} + +.toggleBtn { + padding: var(--space-2) var(--space-6); + font-size: var(--text-sm); + font-weight: 600; + background: transparent; + color: var(--color-text-muted); + border: none; + cursor: pointer; + transition: all 200ms ease-in-out; + white-space: nowrap; + border-radius: var(--radius-md); +} + +.toggleBtn:hover { + color: var(--color-text); + background: rgba(0, 0, 0, 0.05); + transform: scale(1.02); +} + +.toggleBtnActive { + background: var(--color-primary); + color: var(--color-text-inverse); + box-shadow: var(--shadow-sm); +} + +.toggleBtnActive:hover { + background: var(--color-primary-dark); + color: var(--color-text-inverse); +} + +.printBtn { + display: flex; + align-items: center; + gap: var(--space-2); + padding: var(--space-2) var(--space-6); + font-size: var(--text-sm); + font-weight: 600; + border: none; + border-radius: var(--radius-lg); + background: var(--color-primary); + color: var(--color-text-inverse); + cursor: pointer; + transition: all 200ms ease-in-out; + white-space: nowrap; + box-shadow: var(--shadow-md); +} + +.printBtn:hover { + background: var(--color-primary-dark); + transform: translateY(-2px) scale(1.02); + box-shadow: var(--shadow-lg); +} + +/* ── Month Navigation ────────────────────────────────── */ +.monthNav { + display: flex; + align-items: center; + justify-content: center; + gap: var(--space-6); + background: var(--color-bg-card); + padding: var(--space-4); + border-radius: var(--radius-full); + width: fit-content; + margin: 0 auto; + box-shadow: var(--shadow-sm); +} + +.monthBtn { + display: flex; + align-items: center; + justify-content: center; + width: 2.5rem; + height: 2.5rem; + border: none; + border-radius: var(--radius-full); + background: var(--color-bg-muted); + color: var(--color-text); + font-size: var(--text-xl); + cursor: pointer; + transition: all 200ms ease-in-out; +} + +.monthBtn:hover { + background: var(--color-highlight); + color: var(--color-primary); + transform: scale(1.15); +} + +.monthLabel { + font-family: var(--family-display); + font-size: var(--text-xl); + font-weight: 600; + color: var(--color-text); + min-width: 200px; + text-align: center; +} + +/* ── Responsive ──────────────────────────────────────── */ +@media (max-width: 480px) { + .root { + padding: var(--space-4) var(--space-2); + gap: var(--space-3); + } + .pageTitle { + font-size: var(--text-xl); + } + .toolbar { + flex-direction: column; + align-items: stretch; + } + .viewToggle { + width: 100%; + } + .toggleBtn { + flex: 1; + text-align: center; + } + .printBtn { + justify-content: center; + } +} + +/* ── Print Styles ────────────────────────────────────── */ +@media print { + .toolbar, + .monthBtn, + .printBtn { + display: none !important; + } + + .root { + padding: 0; + max-width: 100%; + } + + .pageTitle { + font-size: 1.5rem; + text-align: center; + margin-bottom: 0.5rem; + } + + .monthNav { + justify-content: center; + margin-bottom: 0.5rem; + } + + .monthLabel { + font-size: 1.25rem; + } +} + +.errorContainer { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: var(--space-4); + padding: var(--space-10) var(--space-4); + background: var(--color-bg-card); + border: 1.5px solid var(--color-border-light); + border-radius: var(--radius-lg); + margin-top: var(--space-4); +} + +.errorText { + color: #e74c3c; + font-size: var(--text-base); + font-weight: 500; + text-align: center; +} + +.retryBtn { + background: var(--color-primary); + color: var(--color-text-inverse); + border: none; + padding: var(--space-3) var(--space-6); + border-radius: var(--radius-md); + font-size: var(--text-sm); + font-weight: 600; + cursor: pointer; + transition: all 200ms ease-in-out; +} + +.retryBtn:hover { + background: var(--color-primary-dark); + transform: scale(1.05); +} diff --git a/web/Miqaat/app/routes/calendar.tsx b/web/Miqaat/app/routes/calendar.tsx new file mode 100644 index 0000000..df855b4 --- /dev/null +++ b/web/Miqaat/app/routes/calendar.tsx @@ -0,0 +1,150 @@ +import { useState, useEffect, useCallback } from "react"; +import { Printer } from "lucide-react"; +import { useAppContext } from "~/context/app-context"; +import { useLanguage } from "~/i18n/language-context"; +import { fetchMonthlyPrayerTimes, type DayPrayerTimes } from "~/services/api"; +import { CalendarGrid } from "../blocks/calendar/calendar-grid"; +import { LoadingSkeleton } from "~/components/loading-skeleton/loading-skeleton"; +import styles from "./calendar.module.css"; + +type ViewMode = "weekly" | "monthly"; + +function getWeekRange(date: Date): { start: number; end: number } { + const dayOfWeek = date.getDay(); // 0=Sun + const dateNum = date.getDate(); + const start = dateNum - dayOfWeek; + const end = start + 6; + return { start, end }; +} + +export default function Calendar() { + const { location, timeFormat } = useAppContext(); + const { t, locale } = useLanguage(); + const [monthData, setMonthData] = useState([]); + const [isLoading, setIsLoading] = useState(true); + const [error, setError] = useState(null); + const [retryCount, setRetryCount] = useState(0); + const [viewMode, setViewMode] = useState("monthly"); + const [currentDate, setCurrentDate] = useState(() => new Date()); + + useEffect(() => { + let cancelled = false; + setIsLoading(true); + setError(null); + fetchMonthlyPrayerTimes( + location.cityId, + currentDate.getFullYear(), + currentDate.getMonth(), + ).then((data) => { + if (!cancelled) { + setMonthData(data); + setIsLoading(false); + } + }).catch(() => { + if (!cancelled) { + setError(t("calendar.error") ?? "Failed to load calendar data."); + setIsLoading(false); + } + }); + return () => { cancelled = true; }; + }, [location, currentDate.getFullYear(), currentDate.getMonth(), retryCount, t]); + + const monthName = currentDate.toLocaleDateString( + locale === "ar" ? "ar-DZ" : "en-US", + { + month: "long", + year: "numeric", + } + ); + + const handlePrev = () => { + setCurrentDate((prev) => { + const d = new Date(prev); + if (viewMode === "weekly") { + d.setDate(d.getDate() - 7); + } else { + d.setMonth(d.getMonth() - 1); + } + return d; + }); + }; + + const handleNext = () => { + setCurrentDate((prev) => { + const d = new Date(prev); + if (viewMode === "weekly") { + d.setDate(d.getDate() + 7); + } else { + d.setMonth(d.getMonth() + 1); + } + return d; + }); + }; + + const handlePrint = useCallback(() => { + window.print(); + }, []); + + // Filter data based on view mode + const displayData = viewMode === "weekly" + ? (() => { + const { start, end } = getWeekRange(currentDate); + return monthData.filter((d) => d.day >= start && d.day <= end); + })() + : monthData; + + const title = viewMode === "weekly" ? t("calendar.weekTitle") : t("calendar.title"); + + return ( +
+

{title}

+ + {/* View mode toggle + Print */} +
+
+ + +
+ +
+ +
+ + {monthName} + +
+ {isLoading ? ( + + ) : error ? ( +
+

{error}

+ +
+ ) : ( + + )} +
+ ); +} diff --git a/web/Miqaat/app/routes/home.module.css b/web/Miqaat/app/routes/home.module.css new file mode 100644 index 0000000..7f7bbcd --- /dev/null +++ b/web/Miqaat/app/routes/home.module.css @@ -0,0 +1,65 @@ +.root { + max-width: 1400px; + margin: 0 auto; + padding: var(--space-6) var(--space-4); + display: flex; + flex-direction: column; + gap: var(--space-6); +} + +.topGrid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: var(--space-6); + align-items: stretch; +} + +.errorContainer { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: var(--space-8); + background: var(--color-bg-card); + border-radius: var(--radius-lg); + border: 1px solid var(--color-border-light); + box-shadow: var(--shadow-sm); + margin-top: var(--space-4); + gap: var(--space-4); +} + +.errorText { + color: var(--color-warning); + font-size: var(--text-base); + text-align: center; +} + +.retryBtn { + background: var(--color-primary); + color: var(--color-bg); + border: none; + border-radius: var(--radius-md); + padding: var(--space-2) var(--space-6); + font-family: var(--family-display); + font-size: var(--text-base); + font-weight: 600; + cursor: pointer; + transition: all 0.2s; +} + +.retryBtn:hover { + background: var(--color-primary-light); + transform: translateY(-2px); +} + +@media (max-width: 768px) { + .root { + padding: var(--space-4) var(--space-3); + gap: var(--space-4); + } + + .topGrid { + grid-template-columns: 1fr; + gap: var(--space-4); + } +} \ No newline at end of file diff --git a/web/Miqaat/app/routes/home.tsx b/web/Miqaat/app/routes/home.tsx new file mode 100644 index 0000000..640d764 --- /dev/null +++ b/web/Miqaat/app/routes/home.tsx @@ -0,0 +1,44 @@ +import { useAppContext } from "~/context/app-context"; +import { useLanguage } from "~/i18n/language-context"; +import { LoadingSkeleton } from "~/components/loading-skeleton/loading-skeleton"; +import { LocationDisplay } from "../blocks/home/location-display"; +import { CurrentTimeCard } from "../blocks/home/current-time-card"; +import { CurrentPrayerHighlight } from "../blocks/home/current-prayer-highlight"; +import { NextPrayerCountdown } from "../blocks/home/next-prayer-countdown"; +import { PrayerTimesGrid } from "../blocks/home/prayer-times-grid"; +import { AdditionalInfoSection } from "../blocks/home/additional-info-section"; +import styles from "./home.module.css"; + +export default function Home() { + const { isLoading, error, refreshPrayerTimes } = useAppContext(); + const { t } = useLanguage(); + + return ( +
+ + + {isLoading ? ( + + ) : error ? ( +
+

{error}

+ +
+ ) : ( + <> +
+ + +
+ + + + )} +
+ ); +} diff --git a/web/Miqaat/app/routes/location-selection.tsx b/web/Miqaat/app/routes/location-selection.tsx new file mode 100644 index 0000000..c95f787 --- /dev/null +++ b/web/Miqaat/app/routes/location-selection.tsx @@ -0,0 +1,89 @@ +import { useState, useCallback } from "react"; +import { useNavigate } from "react-router"; +import { SearchHeader } from "../blocks/location-selection/search-header"; +import { GPSLocationButton } from "../blocks/location-selection/gps-location-button"; +import { WilayaSelector } from "../blocks/location-selection/wilaya-baladiya-selector"; +import { Toast } from "~/components/toast/toast"; +import { useAppContext } from "~/context/app-context"; +import { useLocationSelection } from "~/hooks/use-location-selection"; +import { useLanguage } from "~/i18n/language-context"; + +export default function LocationSelection() { + const navigate = useNavigate(); + const { t } = useLanguage(); + const { setLocation } = useAppContext(); + const locationState = useLocationSelection(); + const [gpsSuccess, setGpsSuccess] = useState(false); + + const handleGPSDetect = useCallback(() => { + locationState.detectGPSLocation(); + }, [locationState]); + + // Show success state when GPS finds a location + const isGPSSuccess = + gpsSuccess || + (!locationState.isDetectingGPS && + !locationState.gpsError && + locationState.selectedWilaya !== null); + + const handleConfirm = () => { + const loc = locationState.getSelectedLocation(); + if (loc) { + setLocation(loc); + setGpsSuccess(true); + navigate("/"); + } + }; + + const canConfirm = locationState.selectedWilaya !== null; + + return ( +
+ {/* Decorative backgrounds */} +
+
+ +
+ + +
+ + +
+
+ + {t("location.or") || "أو"} + +
+
+ + +
+ + {locationState.gpsError && ( + + )} +
+
+ ); +} diff --git a/web/Miqaat/app/routes/settings.module.css b/web/Miqaat/app/routes/settings.module.css new file mode 100644 index 0000000..c1163b7 --- /dev/null +++ b/web/Miqaat/app/routes/settings.module.css @@ -0,0 +1,81 @@ +.root { + max-width: 1400px; + margin: 0 auto; + padding: var(--space-6) var(--space-4); + display: flex; + flex-direction: column; + gap: var(--space-6); +} + +.pageTitle { + font-family: var(--family-display); + font-size: var(--text-3xl); + font-weight: 600; + color: var(--color-primary); + text-align: center; +} + +:global([lang="ar"]) .pageTitle { + font-family: var(--family-brand-ar); + font-size: 3rem; + font-weight: 700; +} + +.grid { + display: flex; + flex-direction: column; + gap: var(--space-6); +} + +.topSection { + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-areas: + "time theme" + "lang theme"; + gap: var(--space-6); +} + +.timeFormatArea { + grid-area: time; +} + +.languageArea { + grid-area: lang; +} + +.themeArea { + grid-area: theme; +} + +.bottomSection { + width: 100%; +} + +.actionsBox { + margin-top: var(--space-4); + background: var(--color-bg-card); + padding: var(--space-6); + border-radius: var(--radius-lg); + box-shadow: var(--shadow-sm); + border: 1px solid var(--color-border-light); +} + +@media (max-width: 768px) { + .topSection { + grid-template-columns: 1fr; + grid-template-areas: + "time" + "theme" + "lang"; + } +} + +@media (max-width: 480px) { + .root { + padding: var(--space-4) var(--space-3); + } + .actionsBox { + padding: var(--space-4); + } +} \ No newline at end of file diff --git a/web/Miqaat/app/routes/settings.tsx b/web/Miqaat/app/routes/settings.tsx new file mode 100644 index 0000000..0f6cdf8 --- /dev/null +++ b/web/Miqaat/app/routes/settings.tsx @@ -0,0 +1,121 @@ +import { useState } from "react"; +import { useAppContext } from "~/context/app-context"; +import { useLanguage } from "~/i18n/language-context"; +import { useSettingsDraft } from "~/hooks/use-settings-draft"; +import { Toast } from "~/components/toast/toast"; + +import { TimeFormatToggle } from "../blocks/settings/time-format-toggle"; +import { ThemeToggle } from "../blocks/settings/theme-toggle"; +import { NotificationToggle } from "../blocks/settings/notification-toggle"; +import { LanguageToggle } from "../blocks/settings/language-toggle"; +import { SettingsActions } from "../blocks/settings/settings-actions"; +import styles from "./settings.module.css"; + +const DEFAULT_LOCATION = { + city: "Algiers", + cityAr: "الجزائر", + country: "Algeria", + countryAr: "الجزائر", + timezone: "Africa/Algiers", + latitude: 36.75, + longitude: 3.06, + cityId: 27, +}; + +export default function Settings() { + const { setLocation } = useAppContext(); + const { t } = useLanguage(); + + const { + draftFormat, + setDraftFormat, + draftNotifications, + setDraftNotifications, + draftPrefs, + setNotificationPreference, + draftLocale, + setDraftLocale, + draftTheme, + setDraftTheme, + isDirty, + save, + resetToDefaults, + } = useSettingsDraft(); + + const [isSaving, setIsSaving] = useState(false); + const [toast, setToast] = useState<{ message: string; type: "success" | "error" } | null>(null); + + const handleSave = async () => { + setIsSaving(true); + const result = await save(); + setIsSaving(false); + + if (result.success) { + setToast({ message: t("settings.saved") || "Settings saved successfully", type: "success" }); + } else { + setToast({ message: result.error || "Failed to save settings", type: "error" }); + } + }; + + const handleReset = () => { + resetToDefaults(); + setLocation(DEFAULT_LOCATION); + setToast({ message: t("settings.reset.success") || "Settings reset to defaults", type: "success" }); + }; + + return ( +
+

{t("settings.title")}

+ +
+
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+
+ +
+ +
+ + {toast && ( + setToast(null)} + /> + )} +
+ ); +} + diff --git a/web/Miqaat/app/services/api.ts b/web/Miqaat/app/services/api.ts new file mode 100644 index 0000000..2e150bb --- /dev/null +++ b/web/Miqaat/app/services/api.ts @@ -0,0 +1,225 @@ +import type { PrayerTime, Wilaya } from "~/data/prayer-data"; +import { + fetchCities, + fetchDailyPrayerTimes, + fetchPrayerTimesRange, + formatDate, + type ApiPrayerTimesEntry, +} from "./prayerApi"; + +/* ------------------------------------------------------------------ */ +/* Static Wilaya Metadata */ +/* The API only returns Arabic city names and IDs. */ +/* This table maps API city IDs → English names + coordinates */ +/* (needed for GPS nearest-city matching and bilingual display). */ +/* ------------------------------------------------------------------ */ + +interface WilayaMeta { + cityId: number; + name: string; + nameAr: string; + latitude: number; + longitude: number; +} + +const WILAYA_META: Record = { + 1: { cityId: 1, name: "Djelfa", nameAr: "الجلفة", latitude: 34.67, longitude: 3.25 }, + 2: { cityId: 2, name: "Tébessa", nameAr: "تبسة", latitude: 35.4, longitude: 8.12 }, + 3: { cityId: 3, name: "Bir El Ater", nameAr: "بئر العاتر", latitude: 34.75, longitude: 8.06 }, + 4: { cityId: 4, name: "Khenchela", nameAr: "خنشلة", latitude: 35.44, longitude: 7.14 }, + 5: { cityId: 5, name: "El Oued", nameAr: "الوادي", latitude: 33.37, longitude: 6.85 }, + 6: { cityId: 6, name: "Batna", nameAr: "باتنة", latitude: 35.56, longitude: 6.17 }, + 7: { cityId: 7, name: "Touggourt", nameAr: "تقرت", latitude: 33.1, longitude: 6.06 }, + 8: { cityId: 8, name: "Biskra", nameAr: "بسكرة", latitude: 34.85, longitude: 5.73 }, + 10: { cityId: 10, name: "Bou Saâda", nameAr: "بوسعادة", latitude: 35.21, longitude: 4.17 }, + 11: { cityId: 11, name: "Ain El Melh", nameAr: "عين الملح", latitude: 34.84, longitude: 2.89 }, + 12: { cityId: 12, name: "Hassi R'Mel", nameAr: "حاسي الرمل", latitude: 32.93, longitude: 3.27 }, + 13: { cityId: 13, name: "Laghouat", nameAr: "الأغواط", latitude: 33.8, longitude: 2.88 }, + 14: { cityId: 14, name: "Ain Oussera", nameAr: "عين وسارة", latitude: 35.45, longitude: 2.9 }, + 15: { cityId: 15, name: "Tissemsilt", nameAr: "تيسمسيلت", latitude: 35.61, longitude: 1.81 }, + 16: { cityId: 16, name: "Tiaret", nameAr: "تيارت", latitude: 35.37, longitude: 1.32 }, + 17: { cityId: 17, name: "El Bayadh", nameAr: "البيض", latitude: 33.69, longitude: 1.02 }, + 18: { cityId: 18, name: "Saïda", nameAr: "سعيدة", latitude: 34.83, longitude: 0.15 }, + 19: { cityId: 19, name: "Mascara", nameAr: "معسكر", latitude: 35.4, longitude: 0.14 }, + 20: { cityId: 20, name: "Naâma", nameAr: "النعامة", latitude: 33.27, longitude: -0.31 }, + 21: { cityId: 21, name: "Sidi Bel Abbès", nameAr: "سيدي بلعباس", latitude: 35.19, longitude: -0.63 }, + 22: { cityId: 22, name: "Ibn Badis", nameAr: "ابن باديس", latitude: 35.22, longitude: -0.71 }, + 23: { cityId: 23, name: "Tlemcen", nameAr: "تلمسان", latitude: 34.88, longitude: -1.32 }, + 24: { cityId: 24, name: "Aïn Témouchent", nameAr: "عين تموشنت", latitude: 35.3, longitude: -1.14 }, + 25: { cityId: 25, name: "Sebdou", nameAr: "سبدو", latitude: 34.64, longitude: -1.33 }, + 26: { cityId: 26, name: "Maghnia", nameAr: "مغنية", latitude: 34.86, longitude: -1.73 }, + 27: { cityId: 27, name: "Algiers", nameAr: "الجزائر", latitude: 36.75, longitude: 3.06 }, + 28: { cityId: 28, name: "Oran", nameAr: "وهران", latitude: 35.7, longitude: -0.63 }, + 29: { cityId: 29, name: "Mostaganem", nameAr: "مستغانم", latitude: 35.93, longitude: 0.09 }, + 30: { cityId: 30, name: "Relizane", nameAr: "غليزان", latitude: 35.74, longitude: 0.56 }, + 31: { cityId: 31, name: "Chlef", nameAr: "الشلف", latitude: 36.16, longitude: 1.33 }, + 32: { cityId: 32, name: "Aïn Defla", nameAr: "عين الدفلى", latitude: 36.26, longitude: 1.97 }, + 33: { cityId: 33, name: "Tipaza", nameAr: "تيبازة", latitude: 36.59, longitude: 2.45 }, + 34: { cityId: 34, name: "Médéa", nameAr: "المدية", latitude: 36.26, longitude: 2.75 }, + 35: { cityId: 35, name: "Blida", nameAr: "البليدة", latitude: 36.47, longitude: 2.83 }, + 36: { cityId: 36, name: "Boumerdès", nameAr: "بومرداس", latitude: 36.76, longitude: 3.47 }, + 37: { cityId: 37, name: "Bouira", nameAr: "البويرة", latitude: 36.38, longitude: 3.9 }, + 38: { cityId: 38, name: "Dellys", nameAr: "دلس", latitude: 36.91, longitude: 3.91 }, + 39: { cityId: 39, name: "Tizi Ouzou", nameAr: "تيزي وزو", latitude: 36.71, longitude: 4.05 }, + 40: { cityId: 40, name: "M'Sila", nameAr: "المسيلة", latitude: 35.7, longitude: 4.54 }, + 41: { cityId: 41, name: "Bordj Bou Arréridj", nameAr: "برج بوعريريج", latitude: 36.07, longitude: 4.76 }, + 42: { cityId: 42, name: "Béjaïa", nameAr: "بجاية", latitude: 36.75, longitude: 5.08 }, + 43: { cityId: 43, name: "Sétif", nameAr: "سطيف", latitude: 36.19, longitude: 5.41 }, + 44: { cityId: 44, name: "Jijel", nameAr: "جيجل", latitude: 36.82, longitude: 5.77 }, + 45: { cityId: 45, name: "Mila", nameAr: "ميلة", latitude: 36.45, longitude: 6.26 }, + 46: { cityId: 46, name: "Constantine", nameAr: "قسنطينة", latitude: 36.37, longitude: 6.61 }, + 47: { cityId: 47, name: "Skikda", nameAr: "سكيكدة", latitude: 36.88, longitude: 6.91 }, + 48: { cityId: 48, name: "Oum El Bouaghi", nameAr: "أم البواقي", latitude: 35.88, longitude: 7.11 }, + 49: { cityId: 49, name: "Guelma", nameAr: "قالمة", latitude: 36.46, longitude: 7.43 }, + 50: { cityId: 50, name: "Annaba", nameAr: "عنابة", latitude: 36.9, longitude: 7.77 }, + 51: { cityId: 51, name: "Souk Ahras", nameAr: "سوق أهراس", latitude: 36.29, longitude: 7.95 }, + 52: { cityId: 52, name: "El Tarf", nameAr: "الطارف", latitude: 36.77, longitude: 8.31 }, + 53: { cityId: 53, name: "Adrar", nameAr: "أدرار", latitude: 27.87, longitude: -0.29 }, + 54: { cityId: 54, name: "Tindouf", nameAr: "تندوف", latitude: 27.67, longitude: -8.15 }, + 55: { cityId: 55, name: "Béchar", nameAr: "بشار", latitude: 31.62, longitude: -2.22 }, + 56: { cityId: 56, name: "Timimoun", nameAr: "تميمون", latitude: 29.26, longitude: 0.23 }, + 57: { cityId: 57, name: "Reggane", nameAr: "رقان", latitude: 26.72, longitude: 0.17 }, + 58: { cityId: 58, name: "Bordj Badji Mokhtar", nameAr: "برج باجي مختار", latitude: 21.33, longitude: 0.95 }, + 59: { cityId: 59, name: "Beni Abbès", nameAr: "بني عباس", latitude: 30.13, longitude: -2.17 }, + 60: { cityId: 60, name: "Ain Salah", nameAr: "عين صالح", latitude: 27.2, longitude: 2.47 }, + 61: { cityId: 61, name: "El Meniaa", nameAr: "المنيعة", latitude: 30.58, longitude: 2.88 }, + 62: { cityId: 62, name: "Ghardaïa", nameAr: "غرداية", latitude: 32.49, longitude: 3.67 }, + 63: { cityId: 63, name: "Ouargla", nameAr: "ورقلة", latitude: 31.95, longitude: 5.33 }, + 64: { cityId: 64, name: "Tamanrasset", nameAr: "تمنراست", latitude: 22.79, longitude: 5.53 }, + 65: { cityId: 65, name: "Ain Guezzam", nameAr: "عين قزام", latitude: 19.57, longitude: 5.77 }, + 66: { cityId: 66, name: "Illizi", nameAr: "إليزي", latitude: 26.51, longitude: 8.48 }, + 67: { cityId: 67, name: "Djanet", nameAr: "جانت", latitude: 24.55, longitude: 9.48 }, + 68: { cityId: 68, name: "Ain Amenas", nameAr: "عين أمناس", latitude: 28.05, longitude: 9.63 }, + 69: { cityId: 69, name: "Beni Ounif", nameAr: "بني ونيف", latitude: 32.05, longitude: -1.25 }, +}; + +/* ------------------------------------------------------------------ */ +/* API → App Type Mappers */ +/* ------------------------------------------------------------------ */ + +/** + * Normalize time strings from API (e.g. "4:32") to "HH:MM" format. + */ +function normalizeTime(t: string): string { + const [h, m] = t.split(":").map(Number); + return `${String(h).padStart(2, "0")}:${String(m).padStart(2, "0")}`; +} + +/** + * Calculate Duha time as 15 minutes after Sunrise. + */ +function calculateDuha(sunriseTime: string): string { + const [h, m] = sunriseTime.split(":").map(Number); + const totalMinutes = h * 60 + m + 15; + const newH = Math.floor(totalMinutes / 60); + const newM = totalMinutes % 60; + return `${String(newH).padStart(2, "0")}:${String(newM).padStart(2, "0")}`; +} + +/** + * Map an API prayer times entry to the app's PrayerTime[] format. + * Shurooq → Sunrise, Duha → Sunrise + 15 mins. + */ +function mapApiEntryToPrayerTimes(entry: ApiPrayerTimesEntry): PrayerTime[] { + const sunrise = normalizeTime(entry.Shurooq); + const duha = calculateDuha(entry.Shurooq); + + return [ + { name: "Fajr", label: "Fajr", time: normalizeTime(entry.Fajr), icon: "moon", isPrayer: true }, + { name: "Sunrise", label: "Sunrise", time: sunrise, icon: "sunrise", isPrayer: false }, + { name: "Duha", label: "Duha", time: duha, icon: "sun-dim", isPrayer: true }, + { name: "Dhuhr", label: "Dhuhr", time: normalizeTime(entry.Dhuhr), icon: "sun", isPrayer: true }, + { name: "Asr", label: "Asr", time: normalizeTime(entry.Asr), icon: "cloud-sun", isPrayer: true }, + { name: "Maghrib", label: "Maghrib", time: normalizeTime(entry.Maghrib), icon: "sunset", isPrayer: true }, + { name: "Isha", label: "Isha", time: normalizeTime(entry.Isha), icon: "star", isPrayer: true }, + ]; +} + +/* ------------------------------------------------------------------ */ +/* Public API Functions */ +/* ------------------------------------------------------------------ */ + +/** Fetch all wilayas (cities) from the API, enriched with metadata. */ +export async function fetchWilayas(): Promise { + const cities = await fetchCities(); + return cities.map((city, index) => { + const meta = WILAYA_META[city._id]; + return { + id: index + 1, + cityId: city._id, + name: meta?.name ?? city.MADINA_NAME, + nameAr: meta?.nameAr ?? city.MADINA_NAME, + latitude: meta?.latitude ?? 36.75, + longitude: meta?.longitude ?? 3.06, + }; + }); +} + +/** Fetch today's prayer times for a given city. */ +export async function fetchPrayerTimes(cityId: number): Promise { + const entries = await fetchDailyPrayerTimes(cityId); + if (!entries || entries.length === 0) { + throw new Error("No prayer times data returned from API."); + } + return mapApiEntryToPrayerTimes(entries[0]); +} + +/** Fetch prayer times for an entire month. */ +export interface DayPrayerTimes { + date: string; // "YYYY-MM-DD" + day: number; + times: PrayerTime[]; +} + +export async function fetchMonthlyPrayerTimes( + cityId: number, + year: number, + month: number, // 0-indexed +): Promise { + const startDate = `${year}-${String(month + 1).padStart(2, "0")}-01`; + const daysInMonth = new Date(year, month + 1, 0).getDate(); + const endDate = `${year}-${String(month + 1).padStart(2, "0")}-${String(daysInMonth).padStart(2, "0")}`; + + const entries = await fetchPrayerTimesRange(cityId, startDate, endDate); + + return entries.map((entry) => { + const d = new Date(entry.GeoDate); + return { + date: entry.GeoDate, + day: d.getDate(), + times: mapApiEntryToPrayerTimes(entry), + }; + }); +} + +/** Find the nearest wilaya for GPS coordinates using static metadata. */ +export async function findNearestLocation( + lat: number, + lng: number, +): Promise<{ wilaya: Wilaya } | null> { + // Use the static metadata table for distance calculations + const entries = Object.values(WILAYA_META); + let nearest: WilayaMeta | null = null; + let minDist = Infinity; + + for (const meta of entries) { + const dist = Math.hypot(meta.latitude - lat, meta.longitude - lng); + if (dist < minDist) { + minDist = dist; + nearest = meta; + } + } + + if (!nearest) return null; + + return { + wilaya: { + id: nearest.cityId, + cityId: nearest.cityId, + name: nearest.name, + nameAr: nearest.nameAr, + latitude: nearest.latitude, + longitude: nearest.longitude, + }, + }; +} diff --git a/web/Miqaat/app/services/prayerApi.ts b/web/Miqaat/app/services/prayerApi.ts new file mode 100644 index 0000000..a41dc36 --- /dev/null +++ b/web/Miqaat/app/services/prayerApi.ts @@ -0,0 +1,118 @@ +/** + * Adhan DZ API Client + * Raw fetch layer for https://adhan-dz.dexter21767.com/ + * + * This module handles all HTTP communication with the API. + * Response mapping to app types is done in api.ts. + */ + +const API_BASE = "https://adhan-dz.dexter21767.com"; + +/* ------------------------------------------------------------------ */ +/* API Response Types */ +/* ------------------------------------------------------------------ */ + +export interface ApiCity { + _id: number; + ParentId: number | null; + MADINA_NAME: string; +} + +export interface ApiPrayerTimesEntry { + _id: number; + MADINA_ID: number; + GeoDate: string; // "YYYY-MM-DD" + Fajr: string; // "H:MM" or "HH:MM" + Shurooq: string; // Sunrise + Kibla: string; // Duha / sun zenith + Dhuhr: string; + Asr: string; + Maghrib: string; + Isha: string; +} + +/* ------------------------------------------------------------------ */ +/* Error Handling */ +/* ------------------------------------------------------------------ */ + +export class ApiError extends Error { + constructor( + message: string, + public status?: number, + public endpoint?: string, + ) { + super(message); + this.name = "ApiError"; + } +} + +async function handleResponse(res: Response, endpoint: string): Promise { + if (!res.ok) { + let message = `API request failed: ${res.status} ${res.statusText}`; + try { + const body = await res.json(); + if (body?.error) message = body.error; + } catch { + // ignore parse errors + } + throw new ApiError(message, res.status, endpoint); + } + return res.json() as Promise; +} + +/* ------------------------------------------------------------------ */ +/* API Functions */ +/* ------------------------------------------------------------------ */ + +/** + * Fetch all cities from the API. + * Returns the raw city list with Arabic names and parent relationships. + */ +export async function fetchCities(): Promise { + const endpoint = "/cities"; + const res = await fetch(`${API_BASE}${endpoint}`); + return handleResponse(res, endpoint); +} + +/** + * Fetch prayer times for a specific city and single date. + * @param cityId - The city ID from the /cities endpoint + * @param date - Date in YYYY-MM-DD format. Defaults to today. + */ +export async function fetchDailyPrayerTimes( + cityId: number, + date?: string, +): Promise { + const d = date ?? formatDate(new Date()); + const endpoint = `/prayerTimes?cityId=${cityId}&date=${d}`; + const res = await fetch(`${API_BASE}${endpoint}`); + return handleResponse(res, endpoint); +} + +/** + * Fetch prayer times for a city over a date range (max 30 days). + * @param cityId - The city ID + * @param startDate - Start date in YYYY-MM-DD format + * @param endDate - End date in YYYY-MM-DD format + */ +export async function fetchPrayerTimesRange( + cityId: number, + startDate: string, + endDate: string, +): Promise { + const endpoint = `/prayerTimes?cityId=${cityId}&startDate=${startDate}&endDate=${endDate}`; + const res = await fetch(`${API_BASE}${endpoint}`); + return handleResponse(res, endpoint); +} + +/* ------------------------------------------------------------------ */ +/* Helpers */ +/* ------------------------------------------------------------------ */ + +/** Format a Date as YYYY-MM-DD */ +export function formatDate(d: Date): string { + const year = d.getFullYear(); + const month = String(d.getMonth() + 1).padStart(2, "0"); + const day = String(d.getDate()).padStart(2, "0"); + return `${year}-${month}-${day}`; +} diff --git a/web/Miqaat/app/styles/global.css b/web/Miqaat/app/styles/global.css new file mode 100644 index 0000000..bca998a --- /dev/null +++ b/web/Miqaat/app/styles/global.css @@ -0,0 +1,124 @@ +@import "tailwindcss/theme" layer(theme); +@import "tailwindcss/utilities" layer(utilities); + +/* + * ── Tailwind ↔ Design Token Bridge ────────────────────── + * Preflight is intentionally excluded — the project already + * has its own reset.css. + * + * Spacing uses @theme (not inline) so --spacing-* variables + * are emitted and utilities like gap-5, px-6 work at runtime. + * + * Colors use @theme inline because theme.css already defines + * the --color-* variables — no need to emit duplicates. + */ + +/* Spacing must be emitted since no other file defines --spacing-* */ +@theme { + --spacing-1: 0.25rem; + --spacing-2: 0.5rem; + --spacing-3: 0.75rem; + --spacing-4: 1rem; + --spacing-5: 1.25rem; + --spacing-6: 1.5rem; + --spacing-8: 2rem; + --spacing-10: 2.5rem; + --spacing-12: 3rem; + --spacing-16: 4rem; + + /* ── Border Radius ── */ + --radius-sm: 0.5rem; + --radius-md: 0.75rem; + --radius-lg: 1rem; + --radius-xl: 1.5rem; + --radius-full: 9999px; + + /* ── Font Families ── */ + --font-display: "Cormorant Garamond", "Noto Sans Arabic", Georgia, serif; + --font-body: "DM Sans", "Noto Sans Arabic", system-ui, sans-serif; + --font-mono: "Roboto Mono", "Courier New", monospace; + --font-brand-ar: "Changa", system-ui, sans-serif; + + /* ── Font Sizes ── */ + --text-xs: 0.75rem; + --text-sm: 0.875rem; + --text-base: 1rem; + --text-md: 1.125rem; + --text-lg: 1.25rem; + --text-xl: 1.5rem; + --text-2xl: 2rem; + --text-3xl: 2.75rem; + --text-4xl: 3.5rem; +} + +/* Colors reference existing theme.css vars — use inline to avoid duplication */ +@theme inline { + --color-primary: var(--color-primary); + --color-primary-light: var(--color-primary-light); + --color-primary-dark: var(--color-primary-dark); + --color-accent: var(--color-accent); + --color-accent-light: var(--color-accent-light); + --color-accent-muted: var(--color-accent-muted); + --color-bg: var(--color-bg); + --color-bg-card: var(--color-bg-card); + --color-bg-card-alt: var(--color-bg-card-alt); + --color-bg-muted: var(--color-bg-muted); + --color-text: var(--color-text); + --color-text-muted: var(--color-text-muted); + --color-text-inverse: var(--color-text-inverse); + --color-text-accent: var(--color-text-accent); + --color-border: var(--color-border); + --color-border-light: var(--color-border-light); + --color-success: var(--color-success); + --color-warning: var(--color-warning); +} + +/* ── Dark mode: class strategy matching @dazl/color-scheme ── */ +@custom-variant dark (&:where(.dark-theme, .dark-theme *)); + +/* ── RTL variant ── */ +@custom-variant rtl (&:where([dir="rtl"], [dir="rtl"] *)); + +html, body { + overflow-x: hidden; + position: relative; +} + +/* Hide an element visually without hiding it from screen readers. */ +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; +} + +/* ── Print: hide nav + footer globally ───────────────── */ +/* ── Global Micro-interactions ───────────────────────── */ +button { + transition: all 200ms ease-in-out; + cursor: pointer; +} + +button:hover { + transform: scale(1.02); +} + +button:active { + transform: scale(0.98); +} + +@media print { + header, + footer { + display: none !important; + } + + body { + background: #fff !important; + } +} diff --git a/web/Miqaat/app/styles/reset.css b/web/Miqaat/app/styles/reset.css new file mode 100644 index 0000000..a9e50fb --- /dev/null +++ b/web/Miqaat/app/styles/reset.css @@ -0,0 +1,72 @@ +/* Josh Comeau CSS Reset + * Source: https://www.joshwcomeau.com/css/custom-css-reset/ + * Description: A modern CSS reset to improve consistency and control over default styles. + */ + +/* 1. Use a more-intuitive box-sizing model */ +*, +*::before, +*::after { + box-sizing: border-box; +} +/* 2. Remove default margin */ +* { + margin: 0; +} +body { + /* 3. Add accessible line-height */ + line-height: 1.5; + /* 4. Improve text rendering */ + -webkit-font-smoothing: antialiased; +} +/* 5. Improve media defaults */ +img, +picture, +video, +canvas, +svg { + display: block; + max-width: 100%; +} +/* 6. Inherit fonts for form controls */ +input, +button, +textarea, +select { + font: inherit; +} +/* 7. Avoid text overflows */ +p, +h1, +h2, +h3, +h4, +h5, +h6 { + overflow-wrap: break-word; +} +/* 8. Improve line wrapping */ +p { + text-wrap: pretty; +} +h1, +h2, +h3, +h4, +h5, +h6 { + text-wrap: balance; +} + +/* Custom additions to the original Josh Comeau reset by Dazl */ + +a { + text-decoration: none; + color: inherit; +} + +button { + border: none; + cursor: pointer; + background: none; +} diff --git a/web/Miqaat/app/styles/theme.css b/web/Miqaat/app/styles/theme.css new file mode 100644 index 0000000..80a79f4 --- /dev/null +++ b/web/Miqaat/app/styles/theme.css @@ -0,0 +1,104 @@ +/* Prayer Times App – Design Tokens */ + +/* Google Fonts are loaded via root.tsx links */ + +:root { + --family-display: "Cormorant Garamond", "Noto Sans Arabic", Georgia, serif; + --family-brand-ar: "Changa", system-ui, sans-serif; + --family-body: "DM Sans", "Noto Sans Arabic", system-ui, sans-serif; + --family-mono: "Roboto Mono", "Courier New", monospace; + + --text-xs: 0.75rem; + --text-sm: 0.875rem; + --text-base: 1rem; + --text-md: 1.125rem; + --text-lg: 1.25rem; + --text-xl: 1.5rem; + --text-2xl: 2rem; + --text-3xl: 2.75rem; + --text-4xl: 3.5rem; + + --space-1: 0.25rem; + --space-2: 0.5rem; + --space-3: 0.75rem; + --space-4: 1rem; + --space-5: 1.25rem; + --space-6: 1.5rem; + --space-8: 2rem; + --space-10: 2.5rem; + --space-12: 3rem; + --space-16: 4rem; + + --radius-sm: 0.5rem; + --radius-md: 0.75rem; + --radius-lg: 1rem; + --radius-xl: 1.5rem; + --radius-full: 9999px; +} + +/* ── Light Theme ───────────────────────────────────────────────── */ +:root, +:root.light-theme { + --color-primary: #1a5276; + --color-primary-light: #2980b9; + --color-primary-dark: #154360; + --color-accent: #c9a84c; + --color-accent-light: #f4d03f; + --color-accent-muted: #f9e4a0; + + --color-bg: #f0f4f8; + --color-bg-card: #ffffff; + --color-bg-card-alt: #eaf2f8; + --color-bg-muted: #dde8f0; + + --color-text: #1a2b3c; + --color-text-muted: #455a64; + --color-text-inverse: #ffffff; + --color-text-accent: #c9a84c; + + --color-border: #cad8e4; + --color-border-light: #e0eaf0; + + --color-success: #27ae60; + --color-warning: #e67e22; + --color-highlight: rgba(26, 82, 118, 0.08); + + --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.06); + --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.06); + --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.12), 0 4px 8px rgba(0, 0, 0, 0.06); + --shadow-glow: 0 0 20px rgba(26, 82, 118, 0.25); + --shadow-accent-glow: 0 0 16px rgba(201, 168, 76, 0.4); +} + +/* ── Dark Theme ────────────────────────────────────────────────── */ +:root.dark-theme { + --color-primary: #2e86c1; + --color-primary-light: #5dade2; + --color-primary-dark: #1a5276; + --color-accent: #f4d03f; + --color-accent-light: #f9e4a0; + --color-accent-muted: rgba(244, 208, 63, 0.15); + + --color-bg: #0d1b2a; + --color-bg-card: #1a2b3c; + --color-bg-card-alt: #152232; + --color-bg-muted: #0f2030; + + --color-text: #e8f1f8; + --color-text-muted: #a0c4d9; + --color-text-inverse: #0d1b2a; + --color-text-accent: #f4d03f; + + --color-border: #2a4055; + --color-border-light: #1e3248; + + --color-success: #2ecc71; + --color-warning: #f39c12; + --color-highlight: rgba(46, 134, 193, 0.12); + + --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.3), 0 1px 2px rgba(0, 0, 0, 0.2); + --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.35), 0 2px 4px rgba(0, 0, 0, 0.2); + --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.4), 0 4px 8px rgba(0, 0, 0, 0.25); + --shadow-glow: 0 0 20px rgba(46, 134, 193, 0.3); + --shadow-accent-glow: 0 0 16px rgba(244, 208, 63, 0.35); +} diff --git a/web/Miqaat/app/utils/time-utils.ts b/web/Miqaat/app/utils/time-utils.ts new file mode 100644 index 0000000..7f5d21a --- /dev/null +++ b/web/Miqaat/app/utils/time-utils.ts @@ -0,0 +1,42 @@ + +export function formatTime( + timeStr: string, + format: "12h" | "24h", + locale: string = "en" +): string { + const parts = timeStr.split(":"); + const h = Number(parts[0]); + const m = Number(parts[1]); + const s = parts[2] ? Number(parts[2]) : undefined; + + if (format === "24h") { + let res = `${String(h).padStart(2, "0")}:${String(m).padStart(2, "0")}`; + if (s !== undefined) res += `:${String(s).padStart(2, "0")}`; + return res; + } + + const h12 = h % 12 || 12; + const mm = String(m).padStart(2, "0"); + const ss = s !== undefined ? `:${String(s).padStart(2, "0")}` : ""; + + let period = h >= 12 ? "PM" : "AM"; + if (locale === "ar") { + period = h >= 12 ? "مساءً" : "صباحاً"; + } + + return `${h12}:${mm}${ss} ${period}`; +} + +export function formatMinutesToTime( + totalMinutes: number, + format: "12h" | "24h", + locale: string = "en" +): string { + const roundedMinutes = Math.round(totalMinutes); + const normalized = ((roundedMinutes % 1440) + 1440) % 1440; + const h = Math.floor(normalized / 60); + const m = normalized % 60; + + const timeStr = `${String(h).padStart(2, "0")}:${String(m).padStart(2, "0")}`; + return formatTime(timeStr, format, locale); +} diff --git a/web/Miqaat/package-lock.json b/web/Miqaat/package-lock.json new file mode 100644 index 0000000..fe2b424 --- /dev/null +++ b/web/Miqaat/package-lock.json @@ -0,0 +1,4174 @@ +{ + "name": "project", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "project", + "dependencies": { + "@dazl/color-scheme": "^1.2.1", + "@react-router/node": "^7.14.1", + "@react-router/serve": "^7.14.1", + "classnames": "^2.5.1", + "isbot": "^5.1.38", + "lucide-react": "^1.8.0", + "react": "^19.2.5", + "react-dom": "^19.2.5", + "react-router": "^7.14.1" + }, + "devDependencies": { + "@dazl-lib/radix-ui": "^0.1.0", + "@dazl/component-gallery": "^2.0.1", + "@dazl/dev": "^1.4.0", + "@react-router/dev": "^7.14.1", + "@tailwindcss/vite": "^4.2.4", + "@types/node": "24", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "prettier": "^3.8.2", + "tailwindcss": "^4.2.4", + "typescript": "~6.0.2", + "vite": "^7.3.2", + "vite-tsconfig-paths": "^6.1.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/core/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/@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-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "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-compilation-targets/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/@babel/helper-create-class-features-plugin": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", + "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/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/@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-member-expression-to-functions": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" + }, + "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-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.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-replace-supers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "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.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "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-syntax-jsx": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", + "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", + "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz", + "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz", + "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.28.5" + }, + "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/@dazl-lib/radix-ui": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@dazl-lib/radix-ui/-/radix-ui-0.1.0.tgz", + "integrity": "sha512-mKJ3yGJx1vgI+pEgSWArO0Z45MqQdYzOan9wvBUmg9Xz5yhYNGjTlkajN4KOMJnhas8B5h7NGZ2WyPfJdX4SIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@dazl/color-scheme": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@dazl/color-scheme/-/color-scheme-1.2.1.tgz", + "integrity": "sha512-56wbP+lcDUIEnhxIS7cWPXdePXjuzsa6NIUKrsp2cLmu87dPP3VYbrlU3FGg8iT0ezwArrB+gJalwyD8U3qN5Q==", + "license": "MIT" + }, + "node_modules/@dazl/component-gallery": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@dazl/component-gallery/-/component-gallery-2.0.1.tgz", + "integrity": "sha512-dLbjfbFCzYXrgtO7GLga1AGeZLZPaAHhWG9FicoTBEkPKIBP8GKz/Tm+1kknmFVJJudA175vJfxihgbYFv0QCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "zod": "^4.3.6" + }, + "peerDependencies": { + "react": ">=19.0.0" + } + }, + "node_modules/@dazl/dev": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@dazl/dev/-/dev-1.4.0.tgz", + "integrity": "sha512-lDGt7CFT63MFgEuSFczlSDPvxBO8hXEl1Q9F3fGcz+tlIjCQYIefOQSAJ06kD3u/oNYUpvkL6FJa5pXAUNWd7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "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/@mjackson/node-fetch-server": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@mjackson/node-fetch-server/-/node-fetch-server-0.2.0.tgz", + "integrity": "sha512-EMlH1e30yzmTpGLQjlFmaDAjyOeZhng1/XCd7DExR8PNAnG/G1tyruZxEoUe11ClnwGhGrtsdnyyUx1frSzjng==", + "license": "MIT" + }, + "node_modules/@react-router/dev": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@react-router/dev/-/dev-7.14.1.tgz", + "integrity": "sha512-ZBEwods1TxqPVY2SrXDuDCfoaE5VoTMBYrfa/+3MesprY3foSo1jhin9mh4FwmXPXhhmDYKXi2z5UR+oMj8Qjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.7", + "@babel/generator": "^7.27.5", + "@babel/parser": "^7.27.7", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/preset-typescript": "^7.27.1", + "@babel/traverse": "^7.27.7", + "@babel/types": "^7.27.7", + "@react-router/node": "7.14.1", + "@remix-run/node-fetch-server": "^0.13.0", + "arg": "^5.0.1", + "babel-dead-code-elimination": "^1.0.6", + "chokidar": "^4.0.0", + "dedent": "^1.5.3", + "es-module-lexer": "^1.3.1", + "exit-hook": "2.2.1", + "isbot": "^5.1.11", + "jsesc": "3.0.2", + "lodash": "^4.17.21", + "p-map": "^7.0.3", + "pathe": "^1.1.2", + "picocolors": "^1.1.1", + "pkg-types": "^2.3.0", + "prettier": "^3.6.2", + "react-refresh": "^0.14.0", + "semver": "^7.3.7", + "tinyglobby": "^0.2.14", + "valibot": "^1.2.0", + "vite-node": "^3.2.2" + }, + "bin": { + "react-router": "bin.js" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@react-router/serve": "^7.14.1", + "@vitejs/plugin-rsc": "~0.5.21", + "react-router": "^7.14.1", + "react-server-dom-webpack": "^19.2.3", + "typescript": "^5.1.0 || ^6.0.0", + "vite": "^5.1.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "wrangler": "^3.28.2 || ^4.0.0" + }, + "peerDependenciesMeta": { + "@react-router/serve": { + "optional": true + }, + "@vitejs/plugin-rsc": { + "optional": true + }, + "react-server-dom-webpack": { + "optional": true + }, + "typescript": { + "optional": true + }, + "wrangler": { + "optional": true + } + } + }, + "node_modules/@react-router/express": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@react-router/express/-/express-7.14.1.tgz", + "integrity": "sha512-XX/R+/JIIbwTfaXHz1WAJbiPfkd56y7PN9Czg7h6Tvos9TZlmMXmRhxWKRdzfsa8Lp8sq42JjKOBCEEPyH4V1Q==", + "license": "MIT", + "dependencies": { + "@react-router/node": "7.14.1" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "express": "^4.17.1 || ^5", + "react-router": "7.14.1", + "typescript": "^5.1.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@react-router/node": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@react-router/node/-/node-7.14.1.tgz", + "integrity": "sha512-SthTjCwW7otzEAcZwF0RAPMRrDT47B4qHDxZM45rM5K1Gp86ANK/xlXF+DgpLq9qKZf9FbKzxS9hT7FqDeBAOg==", + "license": "MIT", + "dependencies": { + "@mjackson/node-fetch-server": "^0.2.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react-router": "7.14.1", + "typescript": "^5.1.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@react-router/serve": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@react-router/serve/-/serve-7.14.1.tgz", + "integrity": "sha512-3oSNEQqU4ekIQTMqc7c9MJMHzSUAl4knG5mF9+1HaLqvUaYAfZPidqd4JWQKeYwe6Tw6fa79lcvUXqfCSXiEUg==", + "license": "MIT", + "dependencies": { + "@mjackson/node-fetch-server": "^0.2.0", + "@react-router/express": "7.14.1", + "@react-router/node": "7.14.1", + "compression": "^1.8.1", + "express": "^4.19.2", + "get-port": "5.1.1", + "morgan": "^1.10.1", + "source-map-support": "^0.5.21" + }, + "bin": { + "react-router-serve": "bin.js" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react-router": "7.14.1" + } + }, + "node_modules/@remix-run/node-fetch-server": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@remix-run/node-fetch-server/-/node-fetch-server-0.13.0.tgz", + "integrity": "sha512-1EsNo0ZpgXu/90AWoRZf/oE3RVTUS80tiTUpt+hv5pjtAkw7icN4WskDwz/KdAw5ARbJLMhZBrO1NqThmy/McA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", + "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz", + "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz", + "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz", + "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz", + "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz", + "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz", + "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz", + "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz", + "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz", + "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz", + "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz", + "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz", + "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz", + "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz", + "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz", + "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz", + "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz", + "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz", + "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz", + "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz", + "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz", + "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz", + "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz", + "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz", + "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tailwindcss/node": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.4.tgz", + "integrity": "sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.19.0", + "jiti": "^2.6.1", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.2.4" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.4.tgz", + "integrity": "sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.2.4", + "@tailwindcss/oxide-darwin-arm64": "4.2.4", + "@tailwindcss/oxide-darwin-x64": "4.2.4", + "@tailwindcss/oxide-freebsd-x64": "4.2.4", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.4", + "@tailwindcss/oxide-linux-arm64-gnu": "4.2.4", + "@tailwindcss/oxide-linux-arm64-musl": "4.2.4", + "@tailwindcss/oxide-linux-x64-gnu": "4.2.4", + "@tailwindcss/oxide-linux-x64-musl": "4.2.4", + "@tailwindcss/oxide-wasm32-wasi": "4.2.4", + "@tailwindcss/oxide-win32-arm64-msvc": "4.2.4", + "@tailwindcss/oxide-win32-x64-msvc": "4.2.4" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.4.tgz", + "integrity": "sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.4.tgz", + "integrity": "sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.4.tgz", + "integrity": "sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.4.tgz", + "integrity": "sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.4.tgz", + "integrity": "sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.4.tgz", + "integrity": "sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.4.tgz", + "integrity": "sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.4.tgz", + "integrity": "sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.4.tgz", + "integrity": "sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.4.tgz", + "integrity": "sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.8.1", + "@emnapi/runtime": "^1.8.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.1", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.4.tgz", + "integrity": "sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.4.tgz", + "integrity": "sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.4.tgz", + "integrity": "sha512-pCvohwOCspk3ZFn6eJzrrX3g4n2JY73H6MmYC87XfGPyTty4YsCjYTMArRZm/zOI8dIt3+EcrLHAFPe5A4bgtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.2.4", + "@tailwindcss/oxide": "4.2.4", + "tailwindcss": "4.2.4" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "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/node": { + "version": "24.12.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.2.tgz", + "integrity": "sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g==", + "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/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/babel-dead-code-elimination": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/babel-dead-code-elimination/-/babel-dead-code-elimination-1.0.12.tgz", + "integrity": "sha512-GERT7L2TiYcYDtYk1IpD+ASAYXjKbLTDPhBtYj7X1NuRMDTMtAx9kyBenub1Ev41lo91OHCKdmP+egTDmfQ7Ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.23.7", + "@babel/parser": "^7.23.6", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.18", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.18.tgz", + "integrity": "sha512-VSnGQAOLtP5mib/DPyg2/t+Tlv65NTBz83BJBJvmLVHHuKJVaDOBvJJykiT5TR++em5nfAySPccDZDa4oSrn8A==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "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.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001788", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001788.tgz", + "integrity": "sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==", + "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/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/confbox": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz", + "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "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": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "license": "MIT" + }, + "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/dedent": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", + "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.336", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.336.tgz", + "integrity": "sha512-AbH9q9J455r/nLmdNZes0G0ZKcRX73FicwowalLs6ijwOmCJSRRrLX63lcAlzy9ux3dWK1w1+1nsBJEWN11hcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", + "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" + } + }, + "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-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/exit-hook": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", + "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "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/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "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/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true, + "license": "MIT" + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/isbot": { + "version": "5.1.38", + "resolved": "https://registry.npmjs.org/isbot/-/isbot-5.1.38.tgz", + "integrity": "sha512-Cus2702JamTNMEY4zTP+TShgq/3qzjvGcBC4XMOV45BLaxD4iUFENkqu7ZhFeSzwNsCSZLjnGlihDQznnpnEEA==", + "license": "Unlicense", + "engines": { + "node": ">=18" + } + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "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/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "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/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "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/lucide-react": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.8.0.tgz", + "integrity": "sha512-WuvlsjngSk7TnTBJ1hsCy3ql9V9VOdcPkd3PKcSmM34vJD8KG6molxz7m7zbYFgICwsanQWmJ13JlYs4Zp7Arw==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/morgan": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.1.tgz", + "integrity": "sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==", + "license": "MIT", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.1.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/morgan/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/morgan/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "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/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-releases": { + "version": "2.0.37", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.37.tgz", + "integrity": "sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==", + "dev": true, + "license": "MIT" + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/p-map": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz", + "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==", + "license": "MIT" + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true, + "license": "MIT" + }, + "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.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, + "node_modules/pkg-types/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss": { + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.9.tgz", + "integrity": "sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==", + "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/prettier": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.2.tgz", + "integrity": "sha512-8c3mgTe0ASwWAJK+78dpviD+A8EqhndQPUBpNUIPt6+xWlIigCwfN01lWr9MAede4uqXGTEKeQWTvzb3vjia0Q==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.5.tgz", + "integrity": "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.5.tgz", + "integrity": "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.5" + } + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.14.1.tgz", + "integrity": "sha512-5BCvFskyAAVumqhEKh/iPhLOIkfxcEUz8WqFIARCkMg8hZZzDYX9CtwxXA0e+qT8zAxmMC0x3Ckb9iMONwc5jg==", + "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/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/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/rollup": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", + "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", + "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.60.1", + "@rollup/rollup-android-arm64": "4.60.1", + "@rollup/rollup-darwin-arm64": "4.60.1", + "@rollup/rollup-darwin-x64": "4.60.1", + "@rollup/rollup-freebsd-arm64": "4.60.1", + "@rollup/rollup-freebsd-x64": "4.60.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", + "@rollup/rollup-linux-arm-musleabihf": "4.60.1", + "@rollup/rollup-linux-arm64-gnu": "4.60.1", + "@rollup/rollup-linux-arm64-musl": "4.60.1", + "@rollup/rollup-linux-loong64-gnu": "4.60.1", + "@rollup/rollup-linux-loong64-musl": "4.60.1", + "@rollup/rollup-linux-ppc64-gnu": "4.60.1", + "@rollup/rollup-linux-ppc64-musl": "4.60.1", + "@rollup/rollup-linux-riscv64-gnu": "4.60.1", + "@rollup/rollup-linux-riscv64-musl": "4.60.1", + "@rollup/rollup-linux-s390x-gnu": "4.60.1", + "@rollup/rollup-linux-x64-gnu": "4.60.1", + "@rollup/rollup-linux-x64-musl": "4.60.1", + "@rollup/rollup-openbsd-x64": "4.60.1", + "@rollup/rollup-openharmony-arm64": "4.60.1", + "@rollup/rollup-win32-arm64-msvc": "4.60.1", + "@rollup/rollup-win32-ia32-msvc": "4.60.1", + "@rollup/rollup-win32-x64-gnu": "4.60.1", + "@rollup/rollup-win32-x64-msvc": "4.60.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "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": "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/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "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/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/tailwindcss": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.4.tgz", + "integrity": "sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tsconfck": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", + "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", + "dev": true, + "license": "MIT", + "bin": { + "tsconfck": "bin/tsconfck.js" + }, + "engines": { + "node": "^18 || >=20" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "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/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "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/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/valibot": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.3.1.tgz", + "integrity": "sha512-sfdRir/QFM0JaF22hqTroPc5xy4DimuGQVKFrzF1YfGwaS1nJot3Y8VqMdLO2Lg27fMzat2yD3pY5PbAYO39Gg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typescript": ">=5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.2.tgz", + "integrity": "sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==", + "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/vite-node": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite-node/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite-tsconfig-paths": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-6.1.1.tgz", + "integrity": "sha512-2cihq7zliibCCZ8P9cKJrQBkfgdvcFkOOc3Y02o3GWUDLgqjWsZudaoiuOwO/gzTzy17cS5F7ZPo4bsnS4DGkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "globrex": "^0.1.2", + "tsconfck": "^3.0.3" + }, + "peerDependencies": { + "vite": "*" + } + }, + "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/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" + } + } + } +} diff --git a/web/Miqaat/package.json b/web/Miqaat/package.json new file mode 100644 index 0000000..716cf7f --- /dev/null +++ b/web/Miqaat/package.json @@ -0,0 +1,50 @@ +{ + "name": "project", + "private": true, + "type": "module", + "scripts": { + "build": "react-router build", + "dev": "react-router dev", + "start": "react-router-serve ./build/server/index.js", + "typecheck": "react-router typegen && tsc" + }, + "dependencies": { + "@dazl/color-scheme": "^1.2.1", + + "@react-router/node": "^7.14.1", + "@react-router/serve": "^7.14.1", + "classnames": "^2.5.1", + "isbot": "^5.1.38", + "lucide-react": "^1.8.0", + + "react": "^19.2.5", + "react-dom": "^19.2.5", + + "react-router": "^7.14.1" + }, + "devDependencies": { + "@dazl-lib/radix-ui": "^0.1.0", + "@dazl/component-gallery": "^2.0.1", + "@dazl/dev": "^1.4.0", + "@react-router/dev": "^7.14.1", + "@tailwindcss/vite": "^4.2.4", + "@types/node": "24", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "prettier": "^3.8.2", + "tailwindcss": "^4.2.4", + "typescript": "~6.0.2", + "vite": "^7.3.2", + "vite-tsconfig-paths": "^6.1.1" + }, + "prettier": { + "printWidth": 120, + "endOfLine": "auto" + }, + "overrides": { + "vite-tsconfig-paths": { + "typescript": "~6.0.2" + }, + "@radix-ui/react-primitive": "2.1.3" + } +} diff --git a/web/Miqaat/pictures/Pasted image (2).png b/web/Miqaat/pictures/Pasted image (2).png new file mode 100644 index 0000000000000000000000000000000000000000..e5d53c42e9e2ed123f9cd5789ce77138a4d4e9a4 GIT binary patch literal 33526 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

$jRnt3+;{`#tHB{ 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

8ahct+t{>CguI_QV^wQ{E$OWzNVz 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 +p_3BmYS5;k8X{Ni@iqkz_R55#N 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 +p_3BmYS5;k8X{Ni@iqkz_R55#N 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 KG2*wsX8s3 { + event.waitUntil( + caches.open(CACHE_NAME).then((cache) => cache.addAll(STATIC_ASSETS)) + ); + self.skipWaiting(); +}); + +self.addEventListener("activate", (event) => { + event.waitUntil( + caches.keys().then((keys) => + Promise.all( + keys.filter((key) => key !== CACHE_NAME).map((key) => caches.delete(key)) + ) + ) + ); + self.clients.claim(); +}); + +self.addEventListener("fetch", (event) => { + event.respondWith( + caches.match(event.request).then((cached) => { + return cached || fetch(event.request); + }) + ); +}); diff --git a/web/Miqaat/react-router.config.ts b/web/Miqaat/react-router.config.ts new file mode 100644 index 0000000..d792978 --- /dev/null +++ b/web/Miqaat/react-router.config.ts @@ -0,0 +1,10 @@ +import type { Config } from "@react-router/dev/config"; + +export default { + // Config options... + // Server-side render by default, to enable SPA mode set this to `false` + ssr: true, + future: { + unstable_optimizeDeps: true, + }, +} satisfies Config; diff --git a/web/Miqaat/tsconfig.json b/web/Miqaat/tsconfig.json new file mode 100644 index 0000000..438d26f --- /dev/null +++ b/web/Miqaat/tsconfig.json @@ -0,0 +1,21 @@ +{ + "include": ["**/*", "**/.server/**/*", "**/.client/**/*", ".react-router/types/**/*"], + "compilerOptions": { + "lib": ["DOM", "DOM.Iterable", "ES2022"], + "types": ["node", "vite/client"], + "target": "ES2022", + "module": "ES2022", + "moduleResolution": "bundler", + "jsx": "react-jsx", + "rootDirs": [".", "./.react-router/types"], + "paths": { + "~/*": ["./app/*"] + }, + "esModuleInterop": true, + "verbatimModuleSyntax": true, + "noEmit": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": true + } +} diff --git a/web/Miqaat/vite.config.ts b/web/Miqaat/vite.config.ts new file mode 100644 index 0000000..e6ee3c7 --- /dev/null +++ b/web/Miqaat/vite.config.ts @@ -0,0 +1,8 @@ +import { reactRouter } from "@react-router/dev/vite"; +import { defineConfig } from "vite"; +import tsconfigPaths from "vite-tsconfig-paths"; +import tailwindcss from "@tailwindcss/vite"; + +export default defineConfig({ + plugins: [tailwindcss(), reactRouter(), tsconfigPaths()], +});