1+ import * as React from "react"
2+
3+ import { cn } from "@/lib/utils"
4+
5+ const Table = React . forwardRef <
6+ HTMLTableElement ,
7+ React . HTMLAttributes < HTMLTableElement >
8+ > ( ( { className, ...props } , ref ) => (
9+ // <div className="relative w-full overflow-auto border-2 shadow-lg">
10+ < table
11+ ref = { ref }
12+ className = { cn ( "w-full caption-bottom text-sm border-2 shadow-lg" , className ) }
13+ { ...props }
14+ />
15+ // </div>
16+ ) )
17+ Table . displayName = "Table"
18+
19+ const TableHeader = React . forwardRef <
20+ HTMLTableSectionElement ,
21+ React . HTMLAttributes < HTMLTableSectionElement >
22+ > ( ( { className, ...props } , ref ) => (
23+ < thead ref = { ref } className = { cn ( "[&_tr]:border-b bg-primary text-primary-foreground font-head" , className ) } { ...props } />
24+ ) )
25+ TableHeader . displayName = "TableHeader"
26+
27+ const TableBody = React . forwardRef <
28+ HTMLTableSectionElement ,
29+ React . HTMLAttributes < HTMLTableSectionElement >
30+ > ( ( { className, ...props } , ref ) => (
31+ < tbody
32+ ref = { ref }
33+ className = { cn ( "[&_tr:last-child]:border-0" , className ) }
34+ { ...props }
35+ />
36+ ) )
37+ TableBody . displayName = "TableBody"
38+
39+ const TableFooter = React . forwardRef <
40+ HTMLTableSectionElement ,
41+ React . HTMLAttributes < HTMLTableSectionElement >
42+ > ( ( { className, ...props } , ref ) => (
43+ < tfoot
44+ ref = { ref }
45+ className = { cn (
46+ "border-t bg-accent font-medium [&>tr]:last:border-b-0" ,
47+ className
48+ ) }
49+ { ...props }
50+ />
51+ ) )
52+ TableFooter . displayName = "TableFooter"
53+
54+ const TableRow = React . forwardRef <
55+ HTMLTableRowElement ,
56+ React . HTMLAttributes < HTMLTableRowElement >
57+ > ( ( { className, ...props } , ref ) => (
58+ < tr
59+ ref = { ref }
60+ className = { cn (
61+ "border-b transition-colors hover:bg-primary/50 hover:text-primary-foreground data-[state=selected]:bg-muted" ,
62+ className
63+ ) }
64+ { ...props }
65+ />
66+ ) )
67+ TableRow . displayName = "TableRow"
68+
69+ const TableHead = React . forwardRef <
70+ HTMLTableCellElement ,
71+ React . ThHTMLAttributes < HTMLTableCellElement >
72+ > ( ( { className, ...props } , ref ) => (
73+ < th
74+ ref = { ref }
75+ className = { cn (
76+ "h-12 px-4 text-left align-middle font-medium text-primary-foreground [&:has([role=checkbox])]:pr-0" ,
77+ className
78+ ) }
79+ { ...props }
80+ />
81+ ) )
82+ TableHead . displayName = "TableHead"
83+
84+ const TableCell = React . forwardRef <
85+ HTMLTableCellElement ,
86+ React . TdHTMLAttributes < HTMLTableCellElement >
87+ > ( ( { className, ...props } , ref ) => (
88+ < td
89+ ref = { ref }
90+ className = { cn ( "p-3 align-middle [&:has([role=checkbox])]:pr-0" , className ) }
91+ { ...props }
92+ />
93+ ) )
94+ TableCell . displayName = "TableCell"
95+
96+ const TableCaption = React . forwardRef <
97+ HTMLTableCaptionElement ,
98+ React . HTMLAttributes < HTMLTableCaptionElement >
99+ > ( ( { className, ...props } , ref ) => (
100+ < caption
101+ ref = { ref }
102+ className = { cn ( "my-2 text-sm text-muted-foreground" , className ) }
103+ { ...props }
104+ />
105+ ) )
106+ TableCaption . displayName = "TableCaption"
107+
108+ const TableObj = Object . assign ( Table , {
109+ Header : TableHeader ,
110+ Body : TableBody ,
111+ Footer : TableFooter ,
112+ Row : TableRow ,
113+ Head : TableHead ,
114+ Cell : TableCell ,
115+ Caption : TableCaption ,
116+ } )
117+
118+ export {
119+ TableObj as Table ,
120+ }
0 commit comments