اطلاعات پروفایل (Profile Info)
نمایش اطلاعات پروفایل کاربر با آواتار، نام، یوزرنیم و اطلاعات اضافی
معرفی
کامپوننت Profile Info برای نمایش اطلاعات خلاصه پروفایل کاربر استفاده میشود. این کامپوننت شامل آواتار با حاشیه سفارشی، نام کاربر، نام کاربری (username)، اطلاعات اضافی (مثل زمان یا وضعیت) و دکمه اکشن است.
چه زمانی استفاده کنیم:
- برای نمایش پروفایل کاربر در لیستها، منوها و sidebar
- برای ردیفهای کاربر در جدول یا نتایج جستجو
- وقتی فضای محدود است و نمایش افقی مناسبتر است
چه زمانی استفاده نکنیم:
- وقتی اطلاعات کامل پروفایل نیاز دارید — از
ProfileCardاستفاده کنید
استفاده پایه
محسن یگانه
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="پروفایل محسن یگانه"
// ...
/>راهنمای استفاده
بکنید
- از
size="sm"برای sidebar و لیستهای فشرده استفاده کنید -infoTextرا برای نمایش وضعیت آنلاین یا زمان آخرین فعالیت استفاده کنید -onProfileClickرا برای ناوبری به صفحه پروفایل تعریف کنید
نکنید
- از ProfileInfo برای نمایش عمودی در grid استفاده نکنید — از
ProfileCardاستفاده کنید - بدونnameوusernameاز کامپوننت استفاده نکنید — هر دو الزامی هستند -actionIconرا بدونonActionClickقرار ندهید — دکمه بدون عملکرد گمراهکننده است
دسترسیپذیری
- کامپوننت از semantic HTML استفاده میکند
- دکمه اکشن دارای
aria-labelاست - قابلیت ناوبری با کیبورد پشتیبانی میشود
- برای بهبود دسترسی،
aria-labelسفارشی اضافه کنید
کامپوننتهای مرتبط
- ProfileCard — اگر نمایش عمودی و کاملتر پروفایل در grid یا carousel نیاز دارید، از ProfileCard استفاده کنید
- Avatar — اگر فقط تصویر پروفایل بدون اطلاعات متنی نیاز دارید، از Avatar استفاده کنید