Tablev1.2.1

جدول داده با سرستون‌های راست‌چین، مناسب داشبوردها و فهرست‌های سازمانی؛ انتخاب سطر، مرتب‌سازی، حالت راه‌راه و بارگذاری بدون هیچ وابستگی بیرونی روی همین پنج عنصر استاندارد HTML ساخته شده‌اند.

ری‌اکت ۱۹ و Next.js با پیاده‌سازی دسترس‌پذیری داخلی دیگویو ۳ با Composition API — هنوز برای این کامپوننت پورت نشدهSvelte ۵ با runes — هنوز برای این کامپوننت پورت نشدهانگولار با signals و دایرکتیوهای standalone — هنوز برای این کامپوننت پورت نشده

این کامپوننت فعلاً برای ۱ فریم‌ورک از ۴ فریم‌ورک آماده است.

فهرست فاکتورهای اخیر: مبالغ به تومان
شمارهمشتریتاریخوضعیتمبلغ
INV-001شرکت آریا۲۹ تیر ۱۴۰۵پرداخت‌شده۱۲٬۵۰۰٬۰۰۰ تومان
INV-002فروشگاه نیک۳۱ تیر ۱۴۰۵در انتظار۴٬۳۰۰٬۰۰۰ تومان
INV-003استودیو ماه۳ مرداد ۱۴۰۵پرداخت‌شده۸٬۹۰۰٬۰۰۰ تومان

این نمونه هنوز برای Vue پورت نشده است؛ آنچه می‌بینید نسخهٔ ری‌اکت است.

این نمونه هنوز برای Svelte پورت نشده است؛ آنچه می‌بینید نسخهٔ ری‌اکت است.

این نمونه هنوز برای Angular پورت نشده است؛ آنچه می‌بینید نسخهٔ ری‌اکت است.

نصب

با CLI اختصاصی digdesign کامپوننت را از رجیستری دیگ نصب کنید؛ وابستگی‌ها و فایل‌ها خودکار اضافه می‌شوند.

پکیج‌منیجر پیش‌فرض Node.jsنصب سریع با لینک سخت و دیسک مشترکYarn نسخهٔ ۲ به بالا (Berry)رانتایم و پکیج‌منیجر Bun
npx digdesign@latest add https://docs.digdesign.ir/r/table.json
pnpm dlx digdesign@latest add https://docs.digdesign.ir/r/table.json
yarn dlx digdesign@latest add https://docs.digdesign.ir/r/table.json
bunx --bun digdesign@latest add https://docs.digdesign.ir/r/table.json

این کامپوننت هنوز برای Vue پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Svelte پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Angular پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

استفاده

import {
  Table,
  TableBody,
  TableCell,
  TableHead,
  TableHeader,
  TableRow,
} from "@/components/ui/table"

این کامپوننت هنوز برای Vue پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Svelte پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Angular پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

ترکیب اجزا

ابزارهای جدول (جست‌وجو، فیلتر، تب‌ها) بیرونِ قاب و ۳۲ پیکسل بالای جدول می‌نشینند؛ فقط خودِ جدول با variant="card" قاب می‌گیرد و صفحه‌بندی هم بیرونِ قاب، زیرِ آن.

جدول از اجزای Table، TableHeader، TableBody، TableFooter، TableRow، TableHead، TableCell و TableCaption تشکیل می‌شود؛ همان ساختار HTML استاندارد با استایل راست‌به‌چپ.

انتخاب و مرتب‌سازی هم به همین روش ترکیبی اضافه شده‌اند: TableRow با پراپ value قابل‌انتخاب می‌شود، TableCheckboxCell/TableSelectAllCheckbox چک‌باکس متصل به همان انتخاب را رندر می‌کنند، و TableHead با پراپ sortKey قابل‌مرتب‌سازی می‌شود. هیچ‌کدام به کتابخانهٔ خارجی وابسته نیستند، فقط Context داخلیِ خود Table.

دسترس‌پذیری

  • از عناصر معنایی table استفاده می‌کند؛ صفحه‌خوان‌ها ساختار سطر و ستون را کامل درک می‌کنند.
  • TableCaption توضیح جدول را برای همهٔ کاربران فراهم می‌کند.
  • سطر قابل‌انتخاب aria-selected و ستون قابل‌مرتب‌سازی aria-sort مناسب خودش را می‌گیرد؛ چک‌باکس‌های انتخاب aria-label فارسی دارند.
  • برای عناصر کنش‌پذیر داخل سلول (دکمه، لینک) روی onClick از event.stopPropagation() استفاده کنید تا با تاگل‌شدن انتخاب سطر تداخل نکند.
  • سطر قابل‌انتخاب با کیبورد هم کار می‌کند؛ Tab آن را فوکوس می‌کند و Enter/Space همان انتخاب را تاگل می‌کند، بدون نیاز به موس یا لمس.

مرجع API

Table

ویژگینوعپیش‌فرضتوضیح
color"default" | "primary" | "success" | "warning" | "destructive" | "info""default"رنگ پس‌زمینه و نوارِ لبهٔ سطرِ انتخاب‌شده؛ default خاکستری‌آبیِ muted با نوارِ primary.
variant"plain" | "card""plain"card جدول را در قابِ گرد با حاشیه می‌گذارد.
layout"auto" | "fixed""auto"fixed عرضِ ستون‌ها را از سرستون می‌گیرد؛ با مرتب‌سازی و فیلتر ستون‌ها پرش نمی‌کنند. به هر TableHead عرض بدهید.
size"default" | "compact""default"تراکم فاصلهٔ عمودی TableHead و TableCell.
selectionMode"none" | "single" | "multiple""none"حالت انتخاب سطر.
selectedKeys / defaultSelectedKeysSet<string>—کلیدهای انتخاب‌شده (کنترل‌شده/غیرکنترل‌شده).
onSelectionChange(keys: Set<string>) => void—با هر بار تغییر انتخاب صدا زده می‌شود.
disallowEmptySelectionbooleanfalseاگر true باشد، همیشه حداقل یک سطر انتخاب‌شده باقی می‌ماند.
sortDescriptor / defaultSortDescriptor{ column: string; direction: "ascending" | "descending" }—ستون و جهت مرتب‌سازی فعال (کنترل‌شده/غیرکنترل‌شده).
onSortChange(descriptor: SortDescriptor) => void—با کلیک روی یک TableHead دارای sortKey صدا زده می‌شود.
...propsReact.ComponentProps<"table">—همهٔ ویژگی‌های تگ table پشتیبانی می‌شود.

TableHeader

ویژگینوعپیش‌فرضتوضیح
stickybooleanfalseسرستون را هنگام اسکرول عمودی بالای جدول ثابت نگه می‌دارد.

TableBody

ویژگینوعپیش‌فرضتوضیح
stripedbooleanfalseسطرهای فرد را با پس‌زمینهٔ خاکستری راه‌راه می‌کند.

TableRow

ویژگینوعپیش‌فرضتوضیح
valuestring—کلید یکتای سطر؛ فقط با دادن این پراپ سطر قابل‌انتخاب می‌شود.
disabledbooleanfalseسطر را از انتخاب و کلیک خارج می‌کند (بدون مخفی‌کردن آن).

TableHead / TableCell

ویژگینوعپیش‌فرضتوضیح
align"start" | "center" | "end"—ترازبندی افقی محتوای سلول/سرستون.
sortKeystring—فقط TableHead؛ ستون را قابل‌مرتب‌سازی می‌کند.
pin"start" | "end"—ستون را هنگام اسکرول افقی به لبهٔ شروع/پایان جدول می‌چسباند؛ روی TableHead و TableCell همان ستون با هم بدهید.

TableCheckboxCell / TableSelectAllCheckbox

ویژگینوعپیش‌فرضتوضیح
TableCheckboxCellOmit<React.ComponentProps<"td">, "children" | "align">—چک‌باکس انتخاب همان سطر؛ باید داخل یک TableRow دارای value قرار بگیرد.
TableSelectAllCheckboxOmit<React.ComponentProps<"th">, "children" | "align">—چک‌باکس «انتخاب همه»؛ در selectionMode="multiple" استفاده می‌شود.

TableEmpty / TableLoadingRow

ویژگینوعپیش‌فرضتوضیح
colSpannumber—برابر تعداد ستون‌های جدول.
childrenReact.ReactNode"در حال بارگذاری…" (فقط TableLoadingRow)متن یا محتوای دلخواه داخل سطر.

...props

ویژگینوعپیش‌فرضتوضیح
...propsReact.ComponentProps<…>—هر جزء تمام ویژگی‌های عنصر HTML متناظر خود را می‌پذیرد.

TableCellStack

ویژگینوعپیش‌فرضتوضیح
titleReact.ReactNode—خطِ اول، متنِ اصلی.
descriptionReact.ReactNode—خطِ دوم، کوچک و کم‌رنگ (ایمیل، تاریخ)؛ ۶ پیکسل زیرِ خطِ اول.
mediaReact.ReactNode—آواتار یا لوگو کنارِ دو خط؛ آواتار همیشه آیکون (AvatarGenderIcon).
descriptionDir"ltr" | "rtl"—جهتِ خطِ دوم، مثلاً ltr برای ایمیل.

این کامپوننت هنوز برای Vue پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Svelte پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Angular پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.