Files
mr_decor/.cursor/rules/components-organization.mdc

149 lines
6.8 KiB
Plaintext

---
alwaysApply: true
description: استانداردهای سازماندهی و مدیریت کامپوننت‌ها در پروژه
---
# استاندارد سازماندهی کامپوننت‌ها
این پروژه از یک ساختار پوشه‌بندی استاندارد برای سازماندهی کامپوننت‌ها استفاده می‌کند.
## ساختار پوشه‌بندی
کامپوننت‌ها در پوشه `components/` بر اساس نوع و کاربردشان سازماندهی شده‌اند:
### 1. `components/layout/`
کامپوننت‌های مرتبط با ساختار کلی صفحه:
- `conditional-layout.tsx` - لایه‌بندی شرطی برای صفحات
- `theme-provider.tsx` - ارائه‌دهنده تم
- `top-progress-bar.tsx` - نوار پیشرفت بالا
### 2. `components/navigation/`
کامپوننت‌های مرتبط با ناوبری و هدر/فوتر:
- `header.tsx` - هدر اصلی
- `header-main.tsx` - هدر اصلی (نسخه tailark)
- `footer.tsx` - فوتر
- `logo.tsx` - لوگو
- `logo-main.tsx` - لوگو اصلی (نسخه tailark)
- `theme-toggle.tsx` - دکمه تغییر تم
### 3. `components/sections/`
کامپوننت‌های بخش‌های مختلف صفحه که به زیرپوشه‌ها تقسیم می‌شوند:
#### `sections/hero/`
بخش‌های Hero:
- `hero-product.tsx` - Hero صفحه محصول
- `hero-partners.tsx` - Hero صفحه همکاران
- `hero-home.tsx` - Hero صفحه اصلی
- `hero-section-main.tsx` - Hero اصلی (نسخه tailark)
- `hero-alternative.tsx` - Hero جایگزین
#### `sections/feature/`
بخش‌های ویژگی‌ها:
- `feature-text-section.tsx` - بخش متن ویژگی
- `feature-grid-with-icons.tsx` - شبکه ویژگی با آیکون
- `feature-carousel-grid.tsx` - شبکه کاروسل ویژگی
- `feature-list-section.tsx` - بخش لیست ویژگی
- `feature-carousel.tsx` - کاروسل ویژگی
- `features-card-grid.tsx` - شبکه کارت ویژگی
- `features-icon-grid.tsx` - شبکه آیکون ویژگی
- `features-primary.tsx` - ویژگی‌های اصلی
#### `sections/cta/`
بخش‌های Call-to-Action:
- `cta-product.tsx` - CTA صفحه محصول
- `cta-home.tsx` - CTA صفحه اصلی
- `cta-default.tsx` - CTA پیش‌فرض
- `cta-alternative.tsx` - CTA جایگزین
#### `sections/other/`
سایر بخش‌های صفحه:
- `timeline-section.tsx` - بخش تایم‌لاین
- `pricing-section.tsx` - بخش قیمت‌گذاری
- `pricing-comparator.tsx` - مقایسه‌کننده قیمت
- `faqs-section.tsx` - بخش سوالات متداول
- `logo-cloud.tsx` - ابر لوگو
- `solutions-showcase.tsx` - نمایش راهکارها
- `apple-cards-carousel.tsx` - کاروسل کارت‌های اپل
- `content-section.tsx` - بخش محتوا
### 4. `components/blog/`
کامپوننت‌های مرتبط با وبلاگ:
- `blog-blockquote.tsx` - نقل قول وبلاگ
- `blog-card.tsx` - کارت وبلاگ
- `blog-collapse-section.tsx` - بخش تاشو وبلاگ
- `blog-post-card.tsx` - کارت پست وبلاگ
- `blog-post-meta.tsx` - متادیتای پست وبلاگ
- `blog-pullquote.tsx` - نقل قول کشیده وبلاگ
- `blog-tip.tsx` - نکته وبلاگ
- `blog-toc.tsx` - فهرست مطالب وبلاگ
- `featured-posts-grid.tsx` - شبکه پست‌های ویژه
### 5. `components/utilities/`
کامپوننت‌های کمکی:
- `scroll-to-top.tsx` - اسکرول به بالا
### 6. `components/ui/`
کامپوننت‌های UI پایه (از shadcn/ui) - این پوشه دست نخورده باقی می‌ماند.
### 7. `components/home-page/`
کامپوننت‌های اختصاصی صفحه اصلی - این پوشه دست نخورده باقی می‌ماند.
### 8. `components/motion-primitives/`
پریمییتیوهای انیمیشن - این پوشه دست نخورده باقی می‌ماند.
## قوانین نام‌گذاری
### نام فایل‌ها
- از نام‌های توصیفی و معنادار استفاده کنید
- از camelCase برای نام فایل‌ها استفاده کنید
- نام فایل باید نوع کامپوننت را مشخص کند (مثلاً `hero-product.tsx` نه `hero47.tsx`)
- برای کامپوننت‌های مشابه، از پسوندهای واضح استفاده کنید (مثلاً `-home`, `-product`, `-alternative`)
### نام Export ها
- نام export باید با نام فایل همخوانی داشته باشد و معنادار باشد
- از PascalCase برای نام کامپوننت‌ها استفاده کنید
- از نام‌های عددی یا غیرمعنادار (مثل Hero47، Feature55) خودداری کنید
- نام export باید نوع و کاربرد کامپوننت را مشخص کند (مثلاً `HeroProduct` نه `Hero47`)
## قوانین Import
هنگام import کردن کامپوننت‌ها، از مسیرهای کامل و نام‌های معنادار استفاده کنید:
```typescript
// ✅ درست
import { HeroProduct } from '@/components/sections/hero/hero-product'
import { FeatureTextSection } from '@/components/sections/feature/feature-text-section'
import { FeatureCarousel } from '@/components/sections/feature/feature-carousel'
import Footer5 from '@/components/navigation/footer'
import CtaHome from '@/components/sections/cta/cta-home'
// ❌ اشتباه
import { Hero47 } from '@/components/hero47'
import { Feature55 } from '@/components/feature55'
import { Feature240 } from '@/components/feature240'
```
## افزودن کامپوننت جدید
هنگام افزودن کامپوننت جدید:
1. **تعیین نوع کامپوننت**: کامپوننت شما در کدام دسته قرار می‌گیرد؟
- Layout → `components/layout/`
- Navigation → `components/navigation/`
- Hero Section → `components/sections/hero/`
- Feature Section → `components/sections/feature/`
- CTA Section → `components/sections/cta/`
- Other Section → `components/sections/other/`
- Blog Component → `components/blog/`
- Utility → `components/utilities/`
2. **نام‌گذاری مناسب**: نام فایل باید توصیفی باشد و نوع کامپوننت را مشخص کند.
3. **به‌روزرسانی این فایل**: اگر دسته جدیدی ایجاد کردید، این فایل را به‌روزرسانی کنید.
## نکات مهم
- **پوشه‌های موجود**: پوشه‌های `ui/`, `home-page/`, و `motion-primitives/` دست نخورده باقی می‌مانند.
- **سازماندهی مداوم**: همیشه کامپوننت‌های جدید را در پوشه مناسب قرار دهید.
- **یکپارچگی**: از قرار دادن فایل‌ها در root پوشه `components/` خودداری کنید (به جز پوشه‌های خاص).