# 📅 تقویم من

اپلیکیشن تقویم فارسی (هجری شمسی) با نمای ماهانه، هفتگی و روزانه، مناسبت‌ها و
تعطیلات رسمی ایران، و مدیریت رویدادهای شخصی — کاملاً راست‌چین و واکنش‌گرا.

---

## ✨ امکانات

- 📆 تقویم شمسی (جلالی) به‌صورت پیش‌فرض، با نام روز و ماه و سال به فارسی
- 🗂 سه نمای **ماهانه**، **هفتگی** و **روزانه**
- 🎉 نمایش مناسبت‌ها و تعطیلات رسمی ایران (شمسی و قمری)
- ➕ افزودن، ویرایش و حذف رویداد با عنوان، توضیحات، تاریخ، ساعت، رنگ و یادآوری
- 🔔 یادآوری رویدادها با اعلان مرورگر
- 🔍 جست‌وجوی هم‌زمان در رویدادها و مناسبت‌ها
- 📌 نمایش رویدادهای امروز در صفحهٔ اصلی
- ⚡️ دکمهٔ «امروز» و پیمایش سریع ماه و هفته و روز
- 🎨 هایلایت روز جاری و رنگ متمایز برای روزهای تعطیل
- 🌗 پوستهٔ روشن، تاریک و هماهنگ با سیستم
- 📱 طراحی واکنش‌گرا برای موبایل، تبلت و دسکتاپ
- 💾 ذخیرهٔ دائمی رویدادها و تنظیمات در حافظهٔ مرورگر

---

- 📲 قابل نصب روی گوشی (PWA) و آمادهٔ بسته‌بندی برای کافه‌بازار و گوگل‌پلی
- 🔌 کاملاً آفلاین؛ هیچ داده‌ای از دستگاه خارج نمی‌شود

---

## 🚀 اجرا

```bash
npm install
```

```bash
npm run build
```

```bash
npm start
```

سپس آدرس `http://localhost:3000` را باز کنید.

> روی ویندوز `npm run dev` ممکن است با خطای نیتیو rolldown بسته شود؛ در آن صورت
> از `npm run build` و `npm start` استفاده کنید.

## 📱 ساخت نسخهٔ اندروید

```bash
npm run android:sync
```

```bash
npm run android:open
```

برای مراحل کامل امضا و انتشار، [PUBLISHING.md](PUBLISHING.md) را ببینید.

---

## ⌨️ میان‌برهای صفحه‌کلید

| کلید | کار |
| --- | --- |
| `→` | بازهٔ قبلی |
| `←` | بازهٔ بعدی |
| `T` | رفتن به امروز |
| `N` | رویداد تازه |
| `/` | جست‌وجو |
| `Esc` | بستن پنجره |

---

## 🗂 ساختار پروژه

```
app/
├─ _lib/
│  ├─ jalali.js      تبدیل و ابزارهای تقویم شمسی (توابع خالص و قابل تست)
│  ├─ occasions.js   مناسبت‌ها و تعطیلات رسمی، شمسی و قمری
│  ├─ store.js       نگه‌داری رویدادها و تنظیمات در localStorage
│  └─ reminders.js   یادآوری رویدادها با Notification API
├─ _components/
│  ├─ Modal.jsx           پوستهٔ مشترک پنجره‌های گفت‌وگو
│  ├─ TabBar.jsx          نوار پیمایش پایین صفحه در موبایل
│  ├─ DaySheet.jsx        شیت جزئیات روز در موبایل
│  ├─ MonthView.jsx       نمای ماهانه
│  ├─ WeekView.jsx        نمای هفتگی
│  ├─ DayView.jsx         نمای روزانه (خط زمانی ۲۴ ساعته)
│  ├─ EventDialog.jsx     افزودن و ویرایش رویداد
│  ├─ EventList.jsx       فهرست رویدادهای یک روز
│  ├─ OccasionsPanel.jsx  مناسبت‌های ماه جاری
│  ├─ SearchDialog.jsx    جست‌وجو
│  └─ SettingsDialog.jsx  تنظیمات
├─ layout.jsx        چیدمان ریشه و اعمال پوسته پیش از نخستین ترسیم
├─ page.jsx          صفحهٔ اصلی و چسباندن بخش‌ها به هم
└─ globals.css       شیوه‌نامهٔ سراسری با متغیرهای پوسته
```

---

## 📝 نکته دربارهٔ تاریخ‌های قمری

مناسبت‌های قمری (مانند عاشورا و عید فطر) با **تقویم حسابی قمری** محاسبه
می‌شوند، در حالی که تقویم رسمی ایران بر پایهٔ **رؤیت هلال** است؛ بنابراین گاهی
یک روز اختلاف پیش می‌آید. در بخش **تنظیمات → تقویم → اصلاح روزهای قمری**
می‌توانید این اختلاف را بین ‎−۲ تا ‎+۲ روز تنظیم کنید.

افزودن مناسبت تازه هم ساده است: کافی است یک ورودی به `SOLAR_OCCASIONS` یا
`LUNAR_OCCASIONS` در فایل `app/_lib/occasions.js` اضافه کنید.
