טבלה
טבלה סמנטית ב-HTML עבור חשבוניות, רשימות ניהול וטבלאות מחירים — שורות עם מסגרת, כותרות מודגשות וצללית ניאו-ברוטליסטית בולטת.
import {
Table,
TableBody,ה-table מעצב את אלמנטי טבלת ה-HTML המקוריים — <table>, <thead>, <tbody>, <th>, <td>, <caption> — בלי ספריית פרימיטיבים מתחת; הווריאנטים של Radix ו-Base מגיעים עם אותו קובץ. המתכון הנאו-ברוטליסטי: מסגרת עבה וצל חד סביב כל הטבלה, תאי כותרת בגופן כותרות, ומפרידי שורה של 2px.
השתמשו בו כש:
- חשבוניות והזמנות — פריטי שורה עם שורת
TableFooterלסכום. - רשימות ניהול — משתמשים, מפתחות API, מנויים, עם dropdown של פעולות שורה.
- רשתות תמחור והשוואה — מטריצות תכונות שבהן כותרות העמודות נושאות את המשמעות.
התקנה#
pnpm dlx shadcn@latest add https://neobrutalism.com/r/base/table.jsonnpx shadcn@latest add https://neobrutalism.com/r/base/table.jsonyarn dlx shadcn@latest add https://neobrutalism.com/r/base/table.jsonbunx --bun shadcn@latest add https://neobrutalism.com/r/base/table.json
העתיקו והדביקו את הקוד הבא לתוך הפרויקט שלכם.
"use client"
import * as React from "react"
import { cn } from "@/lib/utils"
function Table({ className, ...props }: React.ComponentProps<"table">) {
return (
<div
data-slot="table-container"
className="relative w-full overflow-x-auto rounded border-2 shadow-md"
>
<table
data-slot="table"
className={cn("w-full caption-bottom text-sm", className)}
{...props}
/>
</div>
)
}
function TableHeader({ className, ...props }: React.ComponentProps<"thead">) {
return (
<thead
data-slot="table-header"
className={cn("[&_tr]:border-b-2", className)}
{...props}
/>
)
}
function TableBody({ className, ...props }: React.ComponentProps<"tbody">) {
return (
<tbody
data-slot="table-body"
className={cn("[&_tr:last-child]:border-0", className)}
{...props}
/>
)
}
function TableFooter({ className, ...props }: React.ComponentProps<"tfoot">) {
return (
<tfoot
data-slot="table-footer"
className={cn(
"border-t-2 bg-muted/50 font-medium [&>tr]:last:border-b-0",
className
)}
{...props}
/>
)
}
function TableRow({ className, ...props }: React.ComponentProps<"tr">) {
return (
<tr
data-slot="table-row"
className={cn(
"border-b-2 transition-colors hover:bg-accent has-aria-expanded:bg-accent data-[state=selected]:bg-accent",
className
)}
{...props}
/>
)
}
function TableHead({ className, ...props }: React.ComponentProps<"th">) {
return (
<th
data-slot="table-head"
className={cn(
"h-10 bg-muted px-2 text-left align-middle font-head font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0",
className
)}
{...props}
/>
)
}
function TableCell({ className, ...props }: React.ComponentProps<"td">) {
return (
<td
data-slot="table-cell"
className={cn(
"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0",
className
)}
{...props}
/>
)
}
function TableCaption({
className,
...props
}: React.ComponentProps<"caption">) {
return (
<caption
data-slot="table-caption"
className={cn("mt-4 text-sm text-muted-foreground", className)}
{...props}
/>
)
}
export {
Table,
TableHeader,
TableBody,
TableFooter,
TableHead,
TableRow,
TableCell,
TableCaption,
}
עדכנו את נתיבי ה-import כך שיתאימו להגדרות הפרויקט שלכם.
שימוש#
import {
Table,
TableBody,
TableCaption,
TableCell,
TableHead,
TableHeader,
TableRow,
} from "@/components/ui/table"<Table>
<TableCaption>A list of your recent invoices.</TableCaption>
<TableHeader>
<TableRow>
<TableHead className="w-[100px]">Invoice</TableHead>
<TableHead>Status</TableHead>
<TableHead>Method</TableHead>
<TableHead className="text-right">Amount</TableHead>
</TableRow>
</TableHeader>
<TableBody>
<TableRow>
<TableCell className="font-medium">INV001</TableCell>
<TableCell>Paid</TableCell>
<TableCell>Credit Card</TableCell>
<TableCell className="text-right">$250.00</TableCell>
</TableRow>
</TableBody>
</Table>קומפוזיציה#
השתמשו בקומפוזיציה הבאה כדי לבנות Table:
Table
├── TableCaption
├── TableHeader
│ └── TableRow
│ ├── TableHead
│ ├── TableHead
│ ├── TableHead
│ └── TableHead
├── TableBody
│ ├── TableRow
│ │ ├── TableCell
│ │ ├── TableCell
│ │ ├── TableCell
│ │ └── TableCell
│ └── TableRow
│ ├── TableCell
│ ├── TableCell
│ ├── TableCell
│ └── TableCell
└── TableFooterדוגמאות#
כותרת תחתונה#
השתמשו ברכיב <TableFooter /> כדי להוסיף כותרת תחתונה לטבלה.
import {
Table,
TableBody,פעולות#
טבלה שמציגה פעולות לכל שורה באמצעות רכיב <DropdownMenu />.
import { MoreHorizontalIcon } from "lucide-react"
import { Button } from "@/components/ui/button"Data Table#
תוכלו להשתמש ברכיב <Table /> כדי לבנות טבלאות נתונים מורכבות יותר. שלבו אותו עם @tanstack/react-table כדי ליצור טבלאות עם מיון, סינון ועימוד.
למידע נוסף, עיינו בתיעוד של Data Table.
תוכלו גם לראות דוגמה לטבלת נתונים בדמו של Tasks.
RTL#
כדי להפעיל RTL ב-Neobrutalism, עיינו במדריך ההגדרה של RTL.
"use client"
import * as React from "react"נגישות#
רינדור אלמנטי טבלה מקוריים נותן לקוראי מסך הכרזת טבלה, ניווט שורה/עמודה וקישור כותרות בלי חיווט ARIA. תנו שם לכל טבלה עם TableCaption ושמרו TableHead לתאי כותרת אמיתיים. מיכל הגלילה אינו ניתן לפוקוס, כך שמשתמשי מקלדת בלבד לא יכולים לגלול טבלה שגולשת — אם טבלאות רחבות סבירות, הוסיפו tabIndex={0}, role="region" ו-aria-label ל-div המיכל בעותק של הרכיב שלכם.