جدول — Table
جدول دادههای ساختیافته با ستونهای قابلمقایسه را نشان میدهد؛ برای فهرستهایی که مرتبسازی یا انتخاب میخواهند و برای گزارش یا رتبهبندی مناسب است. ساختار معنایی tableکپی کد کپی کد بومی حفظ میشود و کامپوننتها فقط data-*کپی کد کپی کد و رفتار دسترسی اضافه میکنند. ناحیهٔ اسکرول با tabIndex=0کپی کد کپی کد و role="region"کپی کد کپی کد فوکوسپذیر است تا کاربر صفحهکلید بتواند جدول را اسکرول کند.
وضعیت: beta · لایه: ۳ (@tokapps/tukکپی کد کپی کد ) · کد: packages/tuk/src/data-display/table/کپی کد کپی کد
TSX import { Table, TableBody, TableCell, TableHead, TableHeaderCell, TableRow, TableRowHeader } from '@tokapps/tuk' ;
نمونهٔ زنده
ایدههای ثبتشده نام رأی وضعیت علی رضایی ۱۲۴ تأیید شد سارا محمدینژاد ۸۸ در انتظار Mehdi Karimi ۱٬۲۰۴ تأیید شد
table: basic نام رأی سارا محمدینژاد ۸۸ علی رضایی ۱۲۴ Mehdi Karimi ۱٬۲۰۴
table: sortable
کد قابل کپی
پایه: جدول با عنوان و سلول عددی
TSX import { Table, TableBody, TableCell, TableHead, TableHeaderCell, TableRow, TableRowHeader } from '@tokapps/tuk' ; const rows = [ { id: 1 , name: 'علی رضایی' , votes: 124 , status: 'تأیید شد' }, { id: 2 , name: 'سارا محمدینژاد' , votes: 88 , status: 'در انتظار' }, { id: 3 , name: 'Mehdi Karimi' , votes: 1204 , status: 'تأیید شد' }, ]; export function IdeasTable () { return ( < Table label = "فهرست ایدهها" caption = "ایدههای ثبتشده" > < TableHead > < TableRow > < TableHeaderCell >نام</ TableHeaderCell > < TableHeaderCell numeric >رأی</ TableHeaderCell > < TableHeaderCell >وضعیت</ TableHeaderCell > </ TableRow > </ TableHead > < TableBody > {rows. map (( r ) => ( < TableRow key = {r.id}> < TableRowHeader isolate >{r.name}</ TableRowHeader > < TableCell numeric >{r.votes. toLocaleString ( 'fa-IR' )}</ TableCell > < TableCell >{r.status}</ TableCell > </ TableRow > ))} </ TableBody > </ Table > ); }
پیشرفته: مرتبسازی با سربرگ چسبان و ارتفاع محدود
TSX import { useState } from 'react' ; import { Table, TableBody, TableCell, TableHead, TableHeaderCell, TableRow, TableRowHeader } from '@tokapps/tuk' ; import type { TableSortDirection } from '@tokapps/tuk' ; const rows = [ { id: 1 , name: 'علی رضایی' , votes: 124 }, { id: 2 , name: 'سارا محمدینژاد' , votes: 88 }, { id: 3 , name: 'Mehdi Karimi' , votes: 1204 }, ]; export function RankedTable () { const [ dir , setDir ] = useState < TableSortDirection >( 'none' ); const sorted = [ ... rows]. sort (( a , b ) => (dir === 'descending' ? b.votes - a.votes : a.votes - b.votes)); return ( < Table label = "رتبهبندی ایدهها" stickyHeader maxHeight = "20rem" density = "compact" striped > < TableHead > < TableRow > < TableHeaderCell >نام</ TableHeaderCell > < TableHeaderCell numeric sort = {dir} onSort = {() => setDir (dir === 'ascending' ? 'descending' : 'ascending' )} > رأی </ TableHeaderCell > </ TableRow > </ TableHead > < TableBody > {sorted. map (( r ) => ( < TableRow key = {r.id}> < TableRowHeader isolate >{r.name}</ TableRowHeader > < TableCell numeric >{r.votes. toLocaleString ( 'fa-IR' )}</ TableCell > </ TableRow > ))} </ TableBody > </ Table > ); }
حالت انتخاب: ردیف انتخابشده و چکباکس حالت میانی
جدول حالت خطا یا غیرفعال ندارد. این نمونه حالت انتخاب را با ردیف selectedکپی کد کپی کد و چکباکس میانی نشان میدهد.
TSX import { useState } from 'react' ; import { Table, TableBody, TableCell, TableCheckbox, TableHead, TableHeaderCell, TableRow, TableRowHeader } from '@tokapps/tuk' ; const people = [ { id: 1 , name: 'علی رضایی' }, { id: 2 , name: 'سارا محمدی' }, { id: 3 , name: 'Mehdi Karimi' }, ]; export function SelectableTable () { const [ selected , setSelected ] = useState < number []>([]); const allChecked = selected. length === people. length ; const someChecked = selected. length > 0 && ! allChecked; return ( < Table label = "انتخاب اعضا" caption = "اعضای تیم" > < TableHead > < TableRow > < TableHeaderCell > < TableCheckbox label = "انتخاب همهٔ ردیفها" checked = {allChecked} indeterminate = {someChecked} onChange = {( on ) => setSelected (on ? people. map (( p ) => p.id) : [])} /> </ TableHeaderCell > < TableHeaderCell >نام</ TableHeaderCell > </ TableRow > </ TableHead > < TableBody > {people. map (( p ) => { const isOn = selected. includes (p.id); return ( < TableRow key = {p.id} selected = {isOn}> < TableCell > < TableCheckbox label = { `انتخاب ردیف ${ p . name }` } checked = {isOn} onChange = {( on ) => setSelected (on ? [ ... selected, p.id] : selected. filter (( id ) => id !== p.id))} /> </ TableCell > < TableRowHeader isolate >{p.name}</ TableRowHeader > </ TableRow > ); })} </ TableBody > </ Table > ); }
همهٔ پیکربندیها
Tableکپی کد کپی کد
پراپ نوع پیشفرض توضیح labelکپی کد کپی کد stringکپی کد کپی کد — (الزامی) نام ناحیهٔ اسکرول برای صفحهخوان. ناحیه فوکوسپذیر است. captionکپی کد کپی کد ReactNodeکپی کد کپی کد — عنوان جدول (captionکپی کد کپی کد ). برای دسترسی بهتر از labelکپی کد کپی کد مفیدتر است. stickyHeaderکپی کد کپی کد booleanکپی کد کپی کد falseکپی کد کپی کد سربرگ هنگام اسکرول عمودی چسبیده میماند. با maxHeightکپی کد کپی کد ترکیب کنید. maxHeightکپی کد کپی کد stringکپی کد کپی کد — سقف ارتفاع ناحیهٔ اسکرول، مثلاً 20remکپی کد کپی کد . densityکپی کد کپی کد comfortableکپی کد کپی کد · compactکپی کد کپی کد comfortableکپی کد کپی کد فاصلهٔ داخلی سلولها. stripedکپی کد کپی کد booleanکپی کد کپی کد falseکپی کد کپی کد راهراه کردن ردیفها؛ با مرز همراه است. printکپی کد کپی کد showکپی کد کپی کد · hideکپی کد کپی کد showکپی کد کپی کد hideکپی کد کپی کد کل جدول را در چاپ پنهان میکند.classNameکپی کد کپی کد stringکپی کد کپی کد — کلاس روی tableکپی کد کپی کد . سایر ویژگیها HTMLAttributes<HTMLTableElement>کپی کد کپی کد — روی tableکپی کد کپی کد اعمال میشوند.
TableRowکپی کد کپی کد
پراپ نوع پیشفرض توضیح selectedکپی کد کپی کد booleanکپی کد کپی کد — ردیف انتخابشده: نوار تأکید در لبهٔ آغازین و پسزمینه.
TableHeaderCellکپی کد کپی کد
پراپ نوع پیشفرض توضیح sortکپی کد کپی کد ascendingکپی کد کپی کد · descendingکپی کد کپی کد · noneکپی کد کپی کد — جهت مرتبسازی این ستون. فقط ستون مرتبشده aria-sortکپی کد کپی کد میگیرد. onSortکپی کد کپی کد () => voidکپی کد کپی کد — با دادن آن، سربرگ دکمهٔ مرتبسازی میشود. numericکپی کد کپی کد booleanکپی کد کپی کد falseکپی کد کپی کد تراز انتها با ارقام همعرض. scopeکپی کد کپی کد colکپی کد کپی کد · rowکپی کد کپی کد colکپی کد کپی کد مقدار scopeکپی کد کپی کد در thکپی کد کپی کد . سایر ویژگیها ThHTMLAttributesکپی کد کپی کد بدون onClickکپی کد کپی کد — روی thکپی کد کپی کد اعمال میشوند.
TableCellکپی کد کپی کد و TableRowHeaderکپی کد کپی کد
پراپ نوع پیشفرض توضیح numericکپی کد کپی کد booleanکپی کد کپی کد falseکپی کد کپی کد تراز انتها با tabular-numsکپی کد کپی کد . isolateکپی کد کپی کد booleanکپی کد کپی کد falseکپی کد کپی کد متن را با bdiکپی کد کپی کد ایزوله میکند (مناسب متن ترکیبی فارسی و لاتین). سایر ویژگیها TdHTMLAttributesکپی کد کپی کد — روی tdکپی کد کپی کد (یا برای TableRowHeaderکپی کد کپی کد روی thکپی کد کپی کد با scope="row"کپی کد کپی کد ) اعمال میشوند.
TableRowHeaderکپی کد کپی کد همیشه scope="row"کپی کد کپی کد دارد.
TableCheckboxکپی کد کپی کد
پراپ نوع پیشفرض توضیح labelکپی کد کپی کد stringکپی کد کپی کد — (الزامی) نام دسترسی، مثلاً «انتخاب ردیف علی رضایی». checkedکپی کد کپی کد booleanکپی کد کپی کد — (الزامی) وضعیت انتخاب. indeterminateکپی کد کپی کد booleanکپی کد کپی کد falseکپی کد کپی کد حالت میانی؛ برای «انتخاب همه» وقتی بعضی ردیفها انتخاب شدهاند. onChangeکپی کد کپی کد (checked: boolean) => voidکپی کد کپی کد — (الزامی) با هر تغییر صدا زده میشود.
TableHeadکپی کد کپی کد ، TableBodyکپی کد کپی کد و TableFootکپی کد کپی کد بدون پیشفرض و معادل theadکپی کد کپی کد ، tbodyکپی کد کپی کد و tfootکپی کد کپی کد بومی هستند.
ساختار و اسلاتها
code div (region) data-tds="table-scroll" role="region" tabIndex=0 aria-label=label [data-print] └─ table data-tds="table" data-density [data-sticky] [data-striped] ├─ caption (وقتی caption داده شده) ├─ thead TableHead │ └─ tr TableRow [data-selected] │ └─ th TableHeaderCell [aria-sort] [data-numeric] [data-sortable] │ └─ button data-part="sort" (فقط وقتی onSort داده شده) │ └─ Icon data-tds="icon" [data-sorted] └─ tbody TableBody └─ tr TableRow ├─ th scope=row TableRowHeader [data-numeric] ├─ td TableCell [data-numeric] └─ input TableCheckbox data-part="checkbox" type="checkbox"
بخش ثابت: ناحیهٔ اسکرول با role="region"کپی کد کپی کد و tabIndexکپی کد کپی کد ، عنصر tableکپی کد کپی کد بومی، captionکپی کد کپی کد ، thکپی کد کپی کد با scopeکپی کد کپی کد ، و aria-sortکپی کد کپی کد . بخش قابلتغییر: محتوای سلولها، classNameکپی کد کپی کد ، densityکپی کد کپی کد ، stripedکپی کد کپی کد ، stickyHeaderکپی کد کپی کد و maxHeightکپی کد کپی کد .
همهٔ حالتها
حالت نشانه نمایش پیشفرض بدون data-*کپی کد کپی کد اضافه ردیفها با مرز --tds-border-subtleکپی کد کپی کد . hover (ردیف) :hoverکپی کد کپی کد روی trکپی کد کپی کد زمینهٔ --tds-surface-hoverکپی کد کپی کد . selected data-selected="true"کپی کد کپی کد روی trکپی کد کپی کد زمینهٔ --tds-accent-subtleکپی کد کپی کد و نوار تأکید در لبهٔ آغازین. مرتبشده صعودی aria-sort="ascending"کپی کد کپی کد روی thکپی کد کپی کد و data-sortedکپی کد کپی کد روی آیکونفلش صعودی با رنگ --tds-fg-accentکپی کد کپی کد . مرتبشده نزولی aria-sort="descending"کپی کد کپی کد روی thکپی کد کپی کد فلش نزولی. مرتبنشده sort="none"کپی کد کپی کد یا بدون sortکپی کد کپی کد آیکون مرتبسازی خنثی. sticky-header data-sticky="true"کپی کد کپی کد روی tableکپی کد کپی کد سربرگ با position: stickyکپی کد کپی کد و z-index توکنی. striped data-striped="true"کپی کد کپی کد روی tableکپی کد کپی کد ردیفهای زوج با زمینهٔ --tds-surface-sunkenکپی کد کپی کد . focus-visible :focus-visibleکپی کد کپی کد روی ناحیه، دکمهٔ مرتبسازی یا چکباکسحلقهٔ فوکوس با --tds-focus-ringکپی کد کپی کد . عددی data-numeric="true"کپی کد کپی کد تراز انتها و tabular-numsکپی کد کپی کد . چاپ پنهان data-print="hide"کپی کد کپی کد روی ناحیهجدول در چاپ پنهان.
در کد حالت خطا، غیرفعال یا بارگذاری تعریف نشده است.
تغییرات مجاز برای توسعهدهنده
راهراه: stripedکپی کد کپی کد روشن یا خاموش.
تراکم: densityکپی کد کپی کد برابر comfortableکپی کد کپی کد یا compactکپی کد کپی کد .
سربرگ: stickyHeaderکپی کد کپی کد همراه با maxHeightکپی کد کپی کد .
مرتبسازی: sortکپی کد کپی کد (ascendingکپی کد کپی کد ، descendingکپی کد کپی کد ، noneکپی کد کپی کد ) و onSortکپی کد کپی کد .
انتخاب: selectedکپی کد کپی کد روی ردیف و TableCheckboxکپی کد کپی کد با indeterminateکپی کد کپی کد .
تراز و متن: numericکپی کد کپی کد و isolateکپی کد کپی کد ؛ scopeکپی کد کپی کد در TableHeaderCellکپی کد کپی کد .
چاپ: print="show"کپی کد کپی کد یا print="hide"کپی کد کپی کد .
نقاط توسعه: classNameکپی کد کپی کد روی جدول و اجزا؛ توکنهای سطح کامپوننت --tds-table-min-widthکپی کد کپی کد ، --tds-table-radiusکپی کد کپی کد ، --tds-table-cell-padding-blockکپی کد کپی کد ، --tds-table-cell-padding-block-compactکپی کد کپی کد ، --tds-table-cell-padding-inlineکپی کد کپی کد ، --tds-table-header-weightکپی کد کپی کد ، --tds-table-selected-indicator-widthکپی کد کپی کد ، --tds-table-sticky-zکپی کد کپی کد ، --tds-table-transitionکپی کد کپی کد ؛ captionکپی کد کپی کد ؛ handler onSortکپی کد کپی کد و onChangeکپی کد کپی کد چکباکس؛ labelکپی کد کپی کد ناحیه و labelکپی کد کپی کد چکباکس (متن قابلترجمه).
variant: در کد پراپ variantکپی کد کپی کد تعریف نشده است؛ مستندات basicکپی کد کپی کد و stripedکپی کد کپی کد را بهصورت حالتهای آن ذکر میکنند.
تغییرات ممنوع (بنیان ثابت)
عنصر tableکپی کد کپی کد و ساختار theadکپی کد کپی کد / tbodyکپی کد کپی کد / trکپی کد کپی کد / thکپی کد کپی کد / tdکپی کد کپی کد باید بومی بماند؛ بازنویسی با divکپی کد کپی کد یا نقش gridکپی کد کپی کد ممنوع است.
ناحیهٔ اسکرول باید role="region"کپی کد کپی کد ، aria-labelکپی کد کپی کد و tabIndex=0کپی کد کپی کد داشته باشد؛ labelکپی کد کپی کد الزامی است.
aria-sortکپی کد کپی کد فقط روی ستون مرتبشده گذاشته میشود.
aria-selectedکپی کد کپی کد روی trکپی کد کپی کد استفاده نمیشود؛ انتخاب با چکباکس و نوار اعلام میشود.
هر چکباکس باید labelکپی کد کپی کد داشته باشد («انتخاب …»).
سربرگها باید scopeکپی کد کپی کد داشته باشند (colکپی کد کپی کد یا rowکپی کد کپی کد ).
حداقل هدف لمسی در قرارداد دسترسیپذیری 32pxکپی کد کپی کد ثبت شده است؛ کوچکتر از آن ممنوع است.
رنگ خام یا گرادیان ممنوع است؛ انتخاب و مرتبسازی با شکل و متن هم نشان داده میشوند.
RTL، کیبورد و صفحهخوان
ستون اول در RTL سمت راست است؛ text-align: startکپی کد کپی کد و برای اعداد endکپی کد کپی کد استفاده میشود.
ارقام با tabular-numsکپی کد کپی کد همتراز میشوند؛ متن ترکیبی فارسی و لاتین (شماره، شناسه) با isolateکپی کد کپی کد (bdiکپی کد کپی کد ) ایزوله شود.
کیبورد: Tabکپی کد کپی کد وارد ناحیهٔ اسکرول میشود، سپس به دکمههای مرتبسازی و چکباکسها میرسد. کلیدهای جهتدار ناحیهٔ فوکوسشده را اسکرول میکنند. Enterکپی کد کپی کد و Spaceکپی کد کپی کد مرتبسازی یا تغییر انتخاب را انجام میدهند.
صفحهخوان: captionکپی کد کپی کد عنوان جدول است؛ aria-sortکپی کد کپی کد جهت مرتبسازی را اعلام میکند، نه آیکون؛ ناحیهٔ اسکرول با labelکپی کد کپی کد خوانده میشود.
صدا، حرکت، چاپ و کاهش حرکت
صدا: در کد پراپ soundکپی کد کپی کد تعریف نشده و کامپوننت بیصداست. معادل بصری: فلش مرتبسازی و چکباکس.
حرکت: گذار زمینهٔ hover ردیف با نام معنایی data.row.hoverکپی کد کپی کد (Table.motion.tsکپی کد کپی کد ). در prefers-reduced-motionکپی کد کپی کد یا سوییچ کاهش حرکت، زمان گذار ۱ms میشود.
چاپ: پیشفرض print="show"کپی کد کپی کد با رنگ تکرنگ. سربرگ در هر صفحه تکرار میشود، ردیفها break-inside: avoidکپی کد کپی کد دارند، اسکرول و sticky خاموشاند و آیکونهای مرتبسازی پنهاناند. با print="hide"کپی کد کپی کد پنهان میشود.
توکنها
معنایی: --tds-accent-defaultکپی کد کپی کد ، --tds-accent-subtleکپی کد کپی کد ، --tds-border-defaultکپی کد کپی کد ، --tds-border-subtleکپی کد کپی کد ، --tds-fg-accentکپی کد کپی کد ، --tds-fg-defaultکپی کد کپی کد ، --tds-fg-mutedکپی کد کپی کد ، --tds-fg-subtleکپی کد کپی کد ، --tds-surface-defaultکپی کد کپی کد ، --tds-surface-hoverکپی کد کپی کد ، --tds-surface-sunkenکپی کد کپی کد .
کامپوننتی: --tds-table-radiusکپی کد کپی کد ، --tds-table-min-widthکپی کد کپی کد ، --tds-table-cell-padding-blockکپی کد کپی کد ، --tds-table-cell-padding-block-compactکپی کد کپی کد ، --tds-table-cell-padding-inlineکپی کد کپی کد ، --tds-table-header-weightکپی کد کپی کد ، --tds-table-selected-indicator-widthکپی کد کپی کد ، --tds-table-sticky-zکپی کد کپی کد ، --tds-table-transitionکپی کد کپی کد .
تایپوگرافی: --tds-font-size-smکپی کد کپی کد ، --tds-line-height-normalکپی کد کپی کد .
کنترل: --tds-border-widthکپی کد کپی کد ، --tds-control-height-smکپی کد کپی کد ، --tds-focus-ringکپی کد کپی کد ، --tds-focus-ring-offsetکپی کد کپی کد ، --tds-focus-ring-widthکپی کد کپی کد .
مقیاس: --tds-icon-size-mdکپی کد کپی کد ، --tds-radius-smکپی کد کپی کد ، --tds-space-1کپی کد کپی کد .
فایل توکن: packages/tokens/src/component/table.cssکپی کد کپی کد ؛ فهرست مصرفی در Table.tokens.tsکپی کد کپی کد .
قرارداد ARCH
آیکونهای مرتبسازی فقط از طریق کامپوننت Iconکپی کد کپی کد با نام معنایی (مرتبسازی صعودی، نزولی، خنثی) رسم میشوند؛ مسیر asset مستند نمیشود.
تم فقط حرکت و توکنها را تغییر میدهد؛ ساختار جدول و ARIA ثابت است.
Gesture ندارد؛ مرتبسازی و انتخاب با ماوس، لمس و کیبورد قابلانجام است.
نکات
برای مرتبسازی، فیلتر متنی و صفحهبندی آماده، از جدول داده استفاده کنید.
برای آیتمهای غنی با تعداد ستون کم، از کارت استفاده کنید.
برای انتخاب چند آیتم در فرم، از چکباکس در کنار جدول استفاده کنید.