اطلاعات پروفایل (Profile Info)
نمایش اطلاعات پروفایل کاربر با آواتار، نام، یوزرنیم و اطلاعات اضافی
معرفی
کامپوننت Profile Info برای نمایش اطلاعات خلاصه پروفایل کاربر استفاده میشود. این کامپوننت شامل آواتار با حاشیه سفارشی، نام کاربر، نام کاربری (username)، اطلاعات اضافی (مثل زمان یا وضعیت) و دکمه اکشن است.
استفاده پایه
محسن یگانه
mohsene
import { ProfileInfo } from '@parto-system-design/ui';
export default function MyComponent() {
return (
<ProfileInfo
name="محسن یگانه"
username="mohsene"
avatarSrc="https://example.com/avatar.jpg"
infoText="۴:۲۱ ص"
infoIcon={<ClockIcon />}
onActionClick={() => console.log('Action clicked')}
onProfileClick={() => console.log('Profile clicked')}
/>
);
}مثالها
اندازههای مختلف
کامپوننت در سه اندازه sm، md و lg موجود است.
احمد رضایی
ahmad.rezaei
فاطمه کریمی
fateme_karimi
علی محمدی
ali.m
<ProfileInfo
size="sm"
name="احمد رضایی"
username="ahmad.rezaei"
avatarSrc="/avatar.jpg"
infoText="آنلاین"
/>
<ProfileInfo
size="md"
name="فاطمه کریمی"
username="fateme_karimi"
avatarSrc="/avatar.jpg"
infoText="۲ ساعت پیش"
/>
<ProfileInfo
size="lg"
name="علی محمدی"
username="ali.m"
avatarSrc="/avatar.jpg"
infoText="دیروز"
/>حالتهای مختلف (Variants)
کامپوننت در سه variant موجود است: default، dark و transparent.
سارا احمدی
sara_ahmadi
حسین رضایی
hosein.r
مریم جعفری
maryam_jafari
<ProfileInfo
variant="default"
name="سارا احمدی"
username="sara_ahmadi"
infoText="آنلاین"
/>
<ProfileInfo
variant="dark"
name="حسین رضایی"
username="hosein.r"
infoText="۱۰ دقیقه پیش"
/>
<ProfileInfo
variant="transparent"
name="مریم جعفری"
username="maryam_jafari"
infoText="غیرفعال"
/>تعاملی (Interactive)
میتوانید با استفاده از onProfileClick و onActionClick رفتارهای سفارشی اضافه کنید.
رضا کریمی
reza.karimi
نیلوفر صالحی
niloofar_s
امین احمدی
amin_a
const [selected, setSelected] = React.useState<string | null>(null);
<ProfileInfo
name="رضا کریمی"
username="reza.karimi"
avatarSrc="/avatar.jpg"
infoText="آنلاین"
onProfileClick={() => setSelected('reza')}
onActionClick={() => console.log('Menu opened')}
className={selected === 'reza' ? 'ring-2 ring-primary' : ''}
/>بدون تصویر پروفایل
اگر تصویر پروفایل موجود نباشد، میتوانید از initials استفاده کنید.
کاربر جدید
new_user
<ProfileInfo
name="کاربر جدید"
username="new_user"
initials="ک ج"
infoText="تازه عضو شده"
/>Props
ProfileInfo
مثالهای کاربردی
لیست کاربران
const users = [
{
name: 'محسن یگانه',
username: 'mohsene',
avatarSrc: '/avatars/mohsen.jpg',
status: 'آنلاین',
},
{
name: 'علی احمدی',
username: 'ali.a',
avatarSrc: '/avatars/ali.jpg',
status: '۲ ساعت پیش',
},
// ...
];
<div className="space-y-2" dir="rtl">
{users.map((user) => (
<ProfileInfo
key={user.username}
name={user.name}
username={user.username}
avatarSrc={user.avatarSrc}
infoText={user.status}
avatarBorderVariant="gold"
onProfileClick={() => navigate(`/profile/${user.username}`)}
onActionClick={() => openUserMenu(user)}
/>
))}
</div>با منوی Dropdown
import { ProfileInfo } from '@parto-system-design/ui';
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@parto-system-design/ui';
<DropdownMenu>
<DropdownMenuTrigger asChild>
<div>
<ProfileInfo
name="محسن یگانه"
username="mohsene"
avatarSrc="/avatar.jpg"
infoText="۴:۲۱ ص"
infoIcon={<ClockIcon />}
/>
</div>
</DropdownMenuTrigger>
<DropdownMenuContent align="end">
<div dir="rtl">
<DropdownMenuItem>مشاهده پروفایل</DropdownMenuItem>
<DropdownMenuItem>ارسال پیام</DropdownMenuItem>
<DropdownMenuItem>بلاک کردن</DropdownMenuItem>
</div>
</DropdownMenuContent>
</DropdownMenu>در Sidebar
<Sidebar>
<SidebarHeader>
<ProfileInfo
size="sm"
variant="transparent"
name="محسن یگانه"
username="mohsene"
avatarSrc="/avatar.jpg"
infoText="آنلاین"
avatarBorderVariant="primary"
onProfileClick={() => navigate('/profile')}
onActionClick={() => openSettings()}
/>
</SidebarHeader>
{/* ... */}
</Sidebar>در Dialog یا Modal
<Dialog>
<DialogContent>
<div dir="rtl">
<ProfileInfo
size="lg"
variant="transparent"
name="محسن یگانه"
username="mohsene"
avatarSrc="/avatar.jpg"
infoText="عضو از ۱۴۰۲"
avatarBorderVariant="gold"
/>
<div className="mt-4 space-y-2">
<p>ایمیل: mohsen@example.com</p>
<p>شماره تلفن: ۰۹۱۲۳۴۵۶۷۸۹</p>
</div>
</div>
</DialogContent>
</Dialog>نکات مهم
حاشیه آواتار
gold: حاشیه طلایی با گرادیانت (مشابه عکس نمونه) - مناسب برای نمایش پروفایلهای ویژه یا برجستهprimary: حاشیه با رنگ اصلی برند - مناسب برای حالت انتخاب شده یا فعالnone: بدون حاشیه - حالت ساده و مینیمال
اندازهها
sm: مناسب برای Sidebar، منوها و لیستهای فشردهmd: اندازه پیشفرض، مناسب برای اکثر موارد استفادهlg: مناسب برای صفحات پروفایل، Modalها و نمایش جزئیات
RTL Support
کامپوننت به طور کامل از RTL پشتیبانی میکند. برای استفاده در محیط انگلیسی، dir="ltr" را به container اضافه کنید.
<div dir="ltr">
<ProfileInfo
name="Mohsen Yeganeh"
username="mohsene"
avatarSrc="/avatar.jpg"
infoText="4:21 AM"
/>
</div>Accessibility
- کامپوننت از semantic HTML استفاده میکند
- دکمه اکشن دارای
aria-labelاست - برای بهبود دسترسی، میتوانید
aria-labelسفارشی اضافه کنید
<ProfileInfo
name="محسن یگانه"
username="mohsene"
aria-label="پروفایل محسن یگانه"
// ...
/>الهامگیری
این کامپوننت از رابط کاربری شبکههای اجتماعی مدرن مانند Instagram، Twitter و LinkedIn الهام گرفته شده است.