الگوها
کامپوننتها «چه شکلی» را پاسخ میدهند؛ الگوها «چطور کار میکند» را. هر الگو یک مسئلهٔ تکرارشوندهٔ واقعی محصول را با ترکیبی از کامپوننتها حل میکند — و در اپ مرجع همین الان در حال اجراست.
۱. کلاسهای پنجره — ناوبری واکنشگرا
یک DOM، سه چیدمان ناوبری بر اساس عرض نمایشگر (کلاسهای پنجرهٔ MD3). هیچ نسخهٔ جداگانهای برای موبایل وجود ندارد؛ فقط CSS عوض میکند.
| کلاس | عرض | ناوبری | نمای اولیه | ایجاد |
|---|---|---|---|---|
| compact | <۶۰۰ | نوار پایین ۵تایی + FAB + کشوی بیرونازصفحه | برنامه (فشرده) | فقط FAB و کلید N |
| medium | ۶۰۰–۱۰۲۳ | ریل آیکونی ۸۰px + FAB + کشو از دکمهٔ منو | برنامه | FAB + ریل |
| expanded+ | ≥۱۰۲۴ | سایدبار دائمی ۲۶۴px (سمت راست) + دکمهٔ ایجاد در سایدبار | ماه | دکمهٔ سایدبار + کلید N |
لبهٔ expanded در production وب ۱۰۲۴px است — همراستا با lg در
tailwind.config.js، useIsMobile و منطق نمای اولیه (مختصات دقیق در
UI واکنشگرا و وضعیت پذیرش). پروتوتایپهای
HTML فعلاً لبهٔ ۸۴۰px را نشان میدهند — رفتارِ تجربی، نه قرارداد.
✅ نمای فعال و تاریخ جاری در localStorage ذخیره و بازیابی میشود · عمق لایهٔ
ناوبری: نوار پایین/ریل ← کشو/سایدبار ← دیالوگ، هر عمق فقط یکبار.
❌ همزمان نوار پایین و ریل؛ یا سایدبار باز و کشو روی هم · مخفیکردن اکشن ایجاد
در هیچ کلاسی (فقط جایش عوض میشود).
۲. پیشنمایش سپس ویرایش
کلیک روی هر رویداد، وظیفه یا تقویم، دیالوگ را در حالت نمایش باز میکند: همهٔ دادهها فقطخواندنی، سریعالاسکن، بدون خطر تغییر تصادفی. کاربر با دکمهٔ «ویرایش» به فرم میرسد. مسیر «ایجاد» مستقیم به فرم میرود — پیشنمایش برای موجودهاست.
| گام | محتوا | اکشنها |
|---|---|---|
| ۱ · کلیک | روی چیپ رویداد، ردیف وظیفه، نتیجهٔ جستجو یا کارت تقویم | — |
| ۲ · نمایش | عنوان + تاریخ کامل جلالی (تعطیلی/جمعه قرمز) + ساعت یا «تمامروز» + تقویم با نقطهٔ رنگ + نوع + مکان + مهمانها + یادداشت | حذف (مخرب) · ویرایش (اصلی و تنها) |
| ۳ · ویرایش | همان دیالوگ با فرم پیشپر؛ فوکوس روی عنوان | ذخیره · انصراف · حذف |
جابهجایی حالت با یک اتریبیوت روی دیالوگ — بدون بستن/بازکردن مجدد:
<div class="dialog" data-mode="view|edit">
<!-- view: سطرهای فقطخواندنی + دکمهٔ ویرایش -->
<!-- edit: فرم پیشپر + ذخیره/انصراف -->
</div>
✅ در حالت نمایش فقط یک دکمهٔ اصلی («ویرایش»)؛ حذف در سمت مقابل · Enter = ویرایش، Esc = بستن، تغییر حالت بدون پرش چیدمان. ❌ بازشدن مستقیم فرم ویرایش روی کلیک ساده · دو مرحلهٔ اضافی (نمایش ← «ادامه» ← فرم خالی) — پیشنمایش باید کامل باشد.
۳. دیالوگها، برگهها و منوها
| لایه | ابزار | چه زمانی |
|---|---|---|
| ۱ · منو | .menu | اکشنهای فرعی یک لنگر — بدون محتوای فرمی |
| ۲ · پاپآور انتخاب تاریخ | .dpop | زیر قرص تاریخ؛ Esc اول این را میبندد، بعد دیالوگ را |
| ۳ · دیالوگ/برگه | .dialog | ایجاد/نمایش/ویرایش رویداد و وظیفه، تعارضها، رزرو |
| ۴ · توست | .toast | نتیجهٔ عمل — بدون قطعکردن جریان |
قواعد مشترک: اسکریم ۴۵٪ + بلور ۳px؛ کلیک روی اسکریم = بستن (بهجز وقتی فرم کثیف است: اول تأیید) · قفل اسکرول بدنه و محبوسکردن فوکوس؛ فوکوس به عنصر محرک برمیگردد · حذفِ قابلبازگردانی بهجای دیالوگ تأیید، توستِ «بازگردانی» میدهد · همزمان فقط یک لایه از هر عمق.