118 lines
2.9 KiB
TypeScript
Executable File
118 lines
2.9 KiB
TypeScript
Executable File
import * as React from "react"
|
|
|
|
import { cn } from "lib/utils"
|
|
|
|
const Table = React.forwardRef<
|
|
HTMLTableElement,
|
|
React.HTMLAttributes<HTMLTableElement>
|
|
>(({ className, ...props }, ref) => (
|
|
<div className="c-relative c-w-full c-overflow-auto">
|
|
<table
|
|
ref={ref}
|
|
className={cn("c-w-full c-caption-bottom c-text-sm", className)}
|
|
{...props}
|
|
/>
|
|
</div>
|
|
))
|
|
Table.displayName = "Table"
|
|
|
|
const TableHeader = React.forwardRef<
|
|
HTMLTableSectionElement,
|
|
React.HTMLAttributes<HTMLTableSectionElement>
|
|
>(({ className, ...props }, ref) => (
|
|
<thead ref={ref} className={cn("[&_tr]:c-border-b", className)} {...props} />
|
|
))
|
|
TableHeader.displayName = "TableHeader"
|
|
|
|
const TableBody = React.forwardRef<
|
|
HTMLTableSectionElement,
|
|
React.HTMLAttributes<HTMLTableSectionElement>
|
|
>(({ className, ...props }, ref) => (
|
|
<tbody
|
|
ref={ref}
|
|
className={cn("[&_tr:last-child]:c-border-0", className)}
|
|
{...props}
|
|
/>
|
|
))
|
|
TableBody.displayName = "TableBody"
|
|
|
|
const TableFooter = React.forwardRef<
|
|
HTMLTableSectionElement,
|
|
React.HTMLAttributes<HTMLTableSectionElement>
|
|
>(({ className, ...props }, ref) => (
|
|
<tfoot
|
|
ref={ref}
|
|
className={cn(
|
|
"c-border-t c-bg-muted/50 c-font-medium [&>tr]:last:c-border-b-0",
|
|
className
|
|
)}
|
|
{...props}
|
|
/>
|
|
))
|
|
TableFooter.displayName = "TableFooter"
|
|
|
|
const TableRow = React.forwardRef<
|
|
HTMLTableRowElement,
|
|
React.HTMLAttributes<HTMLTableRowElement>
|
|
>(({ className, ...props }, ref) => (
|
|
<tr
|
|
ref={ref}
|
|
className={cn(
|
|
"c-border-b c-transition-colors hover:c-bg-muted/50 data-[state=selected]:c-bg-muted",
|
|
className
|
|
)}
|
|
{...props}
|
|
/>
|
|
))
|
|
TableRow.displayName = "TableRow"
|
|
|
|
const TableHead = React.forwardRef<
|
|
HTMLTableCellElement,
|
|
React.ThHTMLAttributes<HTMLTableCellElement>
|
|
>(({ className, ...props }, ref) => (
|
|
<th
|
|
ref={ref}
|
|
className={cn(
|
|
"c-h-12 c-px-4 c-text-left c-align-middle c-font-medium c-text-muted-foreground [&:has([role=checkbox])]:c-pr-0",
|
|
className
|
|
)}
|
|
{...props}
|
|
/>
|
|
))
|
|
TableHead.displayName = "TableHead"
|
|
|
|
const TableCell = React.forwardRef<
|
|
HTMLTableCellElement,
|
|
React.TdHTMLAttributes<HTMLTableCellElement>
|
|
>(({ className, ...props }, ref) => (
|
|
<td
|
|
ref={ref}
|
|
className={cn("c-p-4 c-align-middle [&:has([role=checkbox])]:c-pr-0", className)}
|
|
{...props}
|
|
/>
|
|
))
|
|
TableCell.displayName = "TableCell"
|
|
|
|
const TableCaption = React.forwardRef<
|
|
HTMLTableCaptionElement,
|
|
React.HTMLAttributes<HTMLTableCaptionElement>
|
|
>(({ className, ...props }, ref) => (
|
|
<caption
|
|
ref={ref}
|
|
className={cn("c-mt-4 c-text-sm c-text-muted-foreground", className)}
|
|
{...props}
|
|
/>
|
|
))
|
|
TableCaption.displayName = "TableCaption"
|
|
|
|
export {
|
|
Table,
|
|
TableHeader,
|
|
TableBody,
|
|
TableFooter,
|
|
TableHead,
|
|
TableRow,
|
|
TableCell,
|
|
TableCaption,
|
|
}
|