@catalystsoftware/ui 1.0.2 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/data/tailwind.config.js +261 -3821
  2. package/dist/components/catalyst-ui/buttons/burger.tsx +207 -0
  3. package/dist/components/catalyst-ui/core/data-display/timeline.tsx +210 -0
  4. package/dist/components/catalyst-ui/core/feedback/alert.tsx +491 -0
  5. package/dist/components/catalyst-ui/core/feedback/spinner-1.tsx +65 -0
  6. package/dist/components/catalyst-ui/core/feedback/toast.tsx +1857 -0
  7. package/dist/components/catalyst-ui/core/navigation/menu.tsx +164 -0
  8. package/dist/components/catalyst-ui/forms/toggle-class.tsx +176 -0
  9. package/dist/components/catalyst-ui/hooks/use-copy-to-clipboard.tsx +419 -0
  10. package/dist/components/catalyst-ui/hooks/use-counter.tsx +13 -0
  11. package/dist/components/catalyst-ui/hooks/use-event-listener.tsx +23 -0
  12. package/dist/components/catalyst-ui/hooks/use-export-markdown.tsx +47 -0
  13. package/dist/components/catalyst-ui/hooks/use-focus.tsx +17 -0
  14. package/dist/components/catalyst-ui/hooks/use-interval.tsx +23 -0
  15. package/dist/components/catalyst-ui/hooks/use-is-client.tsx +16 -0
  16. package/dist/components/catalyst-ui/hooks/use-media-query.tsx +19 -0
  17. package/dist/components/catalyst-ui/hooks/use-mobile.tsx +19 -0
  18. package/dist/components/catalyst-ui/hooks/use-resize-observer.tsx +81 -0
  19. package/dist/components/catalyst-ui/hooks/use-timeout.tsx +21 -0
  20. package/dist/components/catalyst-ui/hooks/use-timer.tsx +209 -0
  21. package/dist/components/catalyst-ui/hooks/use-toggle.tsx +12 -0
  22. package/dist/components/catalyst-ui/media/image.tsx +13 -0
  23. package/dist/components/catalyst-ui/overlays/dual-sidebar.tsx +4142 -0
  24. package/dist/components/catalyst-ui/overlays/sidebar-original.tsx +726 -0
  25. package/dist/components/catalyst-ui/primitives/accordion.tsx +250 -0
  26. package/dist/components/catalyst-ui/primitives/alert-dialog.tsx +126 -0
  27. package/dist/components/catalyst-ui/primitives/aspect-ratio.tsx +9 -0
  28. package/dist/components/catalyst-ui/primitives/avatar.tsx +296 -0
  29. package/dist/components/catalyst-ui/primitives/badge.tsx +57 -0
  30. package/dist/components/catalyst-ui/primitives/breadcrumb.tsx +101 -0
  31. package/dist/components/catalyst-ui/primitives/button.tsx +265 -0
  32. package/dist/components/catalyst-ui/primitives/calendar-v4.tsx +208 -0
  33. package/dist/components/catalyst-ui/primitives/calendar.tsx +295 -0
  34. package/dist/components/catalyst-ui/primitives/card.tsx +618 -0
  35. package/dist/components/catalyst-ui/primitives/carousel.tsx +238 -0
  36. package/dist/components/catalyst-ui/primitives/chart.tsx +347 -0
  37. package/dist/components/catalyst-ui/primitives/checkbox.tsx +225 -0
  38. package/dist/components/catalyst-ui/primitives/collapsible.tsx +212 -0
  39. package/dist/components/catalyst-ui/primitives/command.tsx +393 -0
  40. package/dist/components/catalyst-ui/primitives/context-menu.tsx +236 -0
  41. package/dist/components/catalyst-ui/primitives/dialog.tsx +471 -0
  42. package/dist/components/catalyst-ui/primitives/drawer.tsx +761 -0
  43. package/dist/components/catalyst-ui/primitives/dropdown-menu.tsx +290 -0
  44. package/dist/components/catalyst-ui/primitives/empty.tsx +104 -0
  45. package/dist/components/catalyst-ui/primitives/field.tsx +244 -0
  46. package/dist/components/catalyst-ui/primitives/hover-card.tsx +124 -0
  47. package/dist/components/catalyst-ui/primitives/input-otp.tsx +76 -0
  48. package/dist/components/catalyst-ui/primitives/input.tsx +64 -0
  49. package/dist/components/catalyst-ui/primitives/item.tsx +196 -0
  50. package/dist/components/catalyst-ui/primitives/kbd.tsx +75 -0
  51. package/dist/components/catalyst-ui/primitives/label.tsx +24 -0
  52. package/dist/components/catalyst-ui/primitives/navigation-menu.tsx +150 -0
  53. package/dist/components/catalyst-ui/primitives/pagination.tsx +198 -0
  54. package/dist/components/catalyst-ui/primitives/popover.tsx +232 -0
  55. package/dist/components/catalyst-ui/primitives/progress.tsx +34 -0
  56. package/dist/components/catalyst-ui/primitives/radio-group.tsx +43 -0
  57. package/dist/components/catalyst-ui/primitives/resizable.tsx +56 -0
  58. package/dist/components/catalyst-ui/primitives/select.tsx +155 -0
  59. package/dist/components/catalyst-ui/primitives/separator.tsx +74 -0
  60. package/dist/components/catalyst-ui/primitives/sheet.tsx +126 -0
  61. package/dist/components/catalyst-ui/primitives/skeleton.tsx +15 -0
  62. package/dist/components/catalyst-ui/primitives/slider.tsx +27 -0
  63. package/dist/components/catalyst-ui/primitives/switch.tsx +187 -0
  64. package/dist/components/catalyst-ui/primitives/tabs.tsx +335 -0
  65. package/dist/components/catalyst-ui/primitives/textarea.tsx +24 -0
  66. package/dist/components/catalyst-ui/primitives/toggle-group.tsx +55 -0
  67. package/dist/components/catalyst-ui/primitives/toggle.tsx +42 -0
  68. package/dist/components/catalyst-ui/primitives/tooltip.tsx +116 -0
  69. package/dist/components/catalyst-ui/utils/basic-auth.tsx +40 -0
  70. package/dist/components/catalyst-ui/utils/context-storage.tsx +19 -0
  71. package/dist/components/catalyst-ui/utils/cors-middleware.tsx +71 -0
  72. package/dist/components/catalyst-ui/utils/deferred-content.tsx +595 -0
  73. package/dist/components/catalyst-ui/utils/honeypot-middleware.tsx +38 -0
  74. package/dist/components/catalyst-ui/utils/incId.tsx +75 -0
  75. package/dist/components/catalyst-ui/utils/jwk-auth.tsx +36 -0
  76. package/dist/components/catalyst-ui/utils/request-id.tsx +14 -0
  77. package/dist/components/catalyst-ui/utils/secure-headers.tsx +37 -0
  78. package/dist/components/catalyst-ui/utils/server-timing.tsx +23 -0
  79. package/dist/components/catalyst-ui/utils/utils.ts +43 -0
  80. package/dist/components/catalyst-ui/utils/with-cookie.tsx +43 -0
  81. package/dist/components/catalyst-ui/x/accordian-x.tsx +428 -0
  82. package/dist/components/catalyst-ui/x/alert-x.tsx +413 -0
  83. package/dist/components/catalyst-ui/x/animated-text-x.tsx +2242 -0
  84. package/dist/components/catalyst-ui/x/avatar-x.tsx +515 -0
  85. package/dist/components/catalyst-ui/x/badge-x.tsx +670 -0
  86. package/dist/components/catalyst-ui/x/button-X.tsx +2857 -0
  87. package/dist/components/catalyst-ui/x/button-group-x.tsx +847 -0
  88. package/dist/components/catalyst-ui/x/calendar-x.tsx +1910 -0
  89. package/dist/components/catalyst-ui/x/card-x.tsx +2597 -0
  90. package/dist/components/catalyst-ui/x/checkbox-x.tsx +656 -0
  91. package/dist/components/catalyst-ui/x/collapsible-x.tsx +1360 -0
  92. package/dist/components/catalyst-ui/x/combobox-x.tsx +911 -0
  93. package/dist/components/catalyst-ui/x/data-table-x.tsx +1753 -0
  94. package/dist/components/catalyst-ui/x/date-picker-x.tsx +648 -0
  95. package/dist/components/catalyst-ui/x/dialog-x.tsx +659 -0
  96. package/dist/components/catalyst-ui/x/dropdown-menu-x.tsx +612 -0
  97. package/dist/components/catalyst-ui/x/hover-card-x.tsx +375 -0
  98. package/dist/components/catalyst-ui/x/icon-x.tsx +840 -0
  99. package/dist/components/catalyst-ui/x/input-mask-x.tsx +981 -0
  100. package/dist/components/catalyst-ui/x/input-otp-x.tsx +659 -0
  101. package/dist/components/catalyst-ui/x/loader-x.tsx +1757 -0
  102. package/dist/components/catalyst-ui/x/pagination-x.tsx +622 -0
  103. package/dist/components/catalyst-ui/x/popover-x.tsx +744 -0
  104. package/dist/components/catalyst-ui/x/radio-group-x.tsx +499 -0
  105. package/dist/components/catalyst-ui/x/select-x.tsx +1127 -0
  106. package/dist/components/catalyst-ui/x/sheet-x.tsx +668 -0
  107. package/dist/components/catalyst-ui/x/switch-x.tsx +681 -0
  108. package/dist/components/catalyst-ui/x/table-x.tsx +574 -0
  109. package/dist/components/catalyst-ui/x/tabs-x.tsx +839 -0
  110. package/dist/components/catalyst-ui/x/textarea-x.tsx +1263 -0
  111. package/dist/components/catalyst-ui/x/tooltip-x.tsx +396 -0
  112. package/dist/components/catalyst-ui/x/tracker-x.tsx +560 -0
  113. package/dist/data/bg-data.tsx +901 -0
  114. package/dist/data/buttons-data.tsx +2327 -0
  115. package/dist/data/charts-data.tsx +102 -0
  116. package/dist/data/chat-data.tsx +83 -0
  117. package/dist/data/code-data.tsx +1040 -0
  118. package/dist/data/comboboxes-data.tsx +1843 -0
  119. package/dist/data/command-data.tsx +1381 -0
  120. package/dist/data/core-data.tsx +15953 -0
  121. package/dist/data/crm-data.tsx +47 -0
  122. package/dist/data/data.tsx +159 -0
  123. package/dist/data/date-and-time-data.tsx +554 -0
  124. package/dist/data/dependencies.tsx +7 -0
  125. package/dist/data/ecommerce-data.tsx +1387 -0
  126. package/dist/data/forms-data.tsx +7890 -0
  127. package/dist/data/hooks-data.tsx +5487 -0
  128. package/dist/data/index.ts +34 -0
  129. package/dist/data/inputs-data.tsx +557 -0
  130. package/dist/data/interactive-data.tsx +5394 -0
  131. package/dist/data/lofi-data.tsx +18295 -0
  132. package/dist/data/marketing-data.tsx +2546 -0
  133. package/dist/data/media-data.tsx +1510 -0
  134. package/dist/data/motion-data.tsx +5801 -0
  135. package/dist/data/overlay-data.tsx +4136 -0
  136. package/dist/data/pdf-data.tsx +124 -0
  137. package/dist/data/pos-data.tsx +213 -0
  138. package/dist/data/postcss.config.js +6 -0
  139. package/dist/data/primitive-data.tsx +5170 -0
  140. package/dist/data/prompt-data.tsx +1226 -0
  141. package/dist/data/requiredLibs.ts +4 -0
  142. package/dist/data/sandbox-data.tsx +1 -0
  143. package/dist/data/sidebars-data.tsx +5421 -0
  144. package/dist/data/stacks-data.tsx +32 -0
  145. package/dist/data/table-data.tsx +706 -0
  146. package/dist/data/tailwind.config.js +270 -0
  147. package/dist/data/tailwind.config.ngin.js +3830 -0
  148. package/dist/data/tailwind.css +431 -0
  149. package/dist/data/tools-data.tsx +6910 -0
  150. package/dist/data/typography-data.tsx +2050 -0
  151. package/dist/data/utils-data.tsx +6500 -0
  152. package/dist/data/x-data.tsx +1171 -0
  153. package/dist/data.tsx +159 -0
  154. package/package.json +1 -1
  155. package/dist/index.d.ts +0 -3
  156. package/dist/index.d.ts.map +0 -1
  157. package/dist/index.js.map +0 -362
@@ -0,0 +1,574 @@
1
+ /**import { TableCaption ,Table, TableHeader,TableRow,TableHead,TableBody, TableCell, TableFooter } from "../primitives"
2
+
3
+
4
+
5
+ const TableDemo = () => {
6
+ return (
7
+ <Table>
8
+ <TableCaption>Default table.</TableCaption>
9
+ <TableHeader>
10
+ <TableRow>
11
+ <TableHead className='w-25'>Invoice</TableHead>
12
+ <TableHead>Status</TableHead>
13
+ <TableHead>Method</TableHead>
14
+ <TableHead className='text-right'>Amount</TableHead>
15
+ </TableRow>
16
+ </TableHeader>
17
+ <TableBody>
18
+ {invoices.map(invoice => (
19
+ <TableRow key={invoice.invoice}>
20
+ <TableCell className='font-medium'>{invoice.invoice}</TableCell>
21
+ <TableCell>{invoice.paymentStatus}</TableCell>
22
+ <TableCell>{invoice.paymentMethod}</TableCell>
23
+ <TableCell className='text-right'>{invoice.totalAmount}</TableCell>
24
+ </TableRow>
25
+ ))}
26
+ </TableBody>
27
+ <TableFooter>
28
+ <TableRow>
29
+ <TableCell colSpan={3}>Total</TableCell>
30
+ <TableCell className='text-right'>$2,500.00</TableCell>
31
+ </TableRow>
32
+ </TableFooter>
33
+ </Table>
34
+ )
35
+ }
36
+
37
+ const TableBorderDemo = () => {
38
+ return (
39
+ <Table className='border'>
40
+ <TableCaption>Bordered table.</TableCaption>
41
+ <TableHeader>
42
+ <TableRow>
43
+ <TableHead className='w-25'>Invoice</TableHead>
44
+ <TableHead>Status</TableHead>
45
+ <TableHead>Method</TableHead>
46
+ <TableHead className='text-right'>Amount</TableHead>
47
+ </TableRow>
48
+ </TableHeader>
49
+ <TableBody>
50
+ {invoices.map(invoice => (
51
+ <TableRow key={invoice.invoice}>
52
+ <TableCell className='font-medium'>{invoice.invoice}</TableCell>
53
+ <TableCell>{invoice.paymentStatus}</TableCell>
54
+ <TableCell>{invoice.paymentMethod}</TableCell>
55
+ <TableCell className='text-right'>{invoice.totalAmount}</TableCell>
56
+ </TableRow>
57
+ ))}
58
+ </TableBody>
59
+ <TableFooter>
60
+ <TableRow>
61
+ <TableCell colSpan={3}>Total</TableCell>
62
+ <TableCell className='text-right'>$2,500.00</TableCell>
63
+ </TableRow>
64
+ </TableFooter>
65
+ </Table>
66
+ )
67
+ }
68
+
69
+ const TableRoundedCornerDemo = () => {
70
+ return (
71
+ <div className='w-full'>
72
+ <div className='overflow-hidden rounded-md border'>
73
+ <Table>
74
+ <TableHeader>
75
+ <TableRow>
76
+ <TableHead className='w-25'>Invoice</TableHead>
77
+ <TableHead>Status</TableHead>
78
+ <TableHead>Method</TableHead>
79
+ <TableHead className='text-right'>Amount</TableHead>
80
+ </TableRow>
81
+ </TableHeader>
82
+ <TableBody>
83
+ {invoices.map(invoice => (
84
+ <TableRow key={invoice.invoice}>
85
+ <TableCell className='font-medium'>{invoice.invoice}</TableCell>
86
+ <TableCell>{invoice.paymentStatus}</TableCell>
87
+ <TableCell>{invoice.paymentMethod}</TableCell>
88
+ <TableCell className='text-right'>{invoice.totalAmount}</TableCell>
89
+ </TableRow>
90
+ ))}
91
+ </TableBody>
92
+ <TableFooter>
93
+ <TableRow>
94
+ <TableCell colSpan={3}>Total</TableCell>
95
+ <TableCell className='text-right'>$2,500.00</TableCell>
96
+ </TableRow>
97
+ </TableFooter>
98
+ </Table>
99
+ </div>
100
+ <p className='text-muted-foreground mt-4 text-center text-sm'>Rounded corner table</p>
101
+ </div>
102
+ )
103
+ }
104
+
105
+ const TableWithVerticalLinesDemo = () => {
106
+ return (
107
+ <Table>
108
+ <TableCaption>Table with vertical lines.</TableCaption>
109
+ <TableHeader>
110
+ <TableRow className='*:border-border [&>:not(:last-child)]:border-r'>
111
+ <TableHead className='w-25'>Invoice</TableHead>
112
+ <TableHead>Status</TableHead>
113
+ <TableHead>Method</TableHead>
114
+ <TableHead className='text-right'>Amount</TableHead>
115
+ </TableRow>
116
+ </TableHeader>
117
+ <TableBody>
118
+ {invoices.map(invoice => (
119
+ <TableRow key={invoice.invoice} className='*:border-border [&>:not(:last-child)]:border-r'>
120
+ <TableCell className='font-medium'>{invoice.invoice}</TableCell>
121
+ <TableCell>{invoice.paymentStatus}</TableCell>
122
+ <TableCell>{invoice.paymentMethod}</TableCell>
123
+ <TableCell className='text-right'>{invoice.totalAmount}</TableCell>
124
+ </TableRow>
125
+ ))}
126
+ </TableBody>
127
+ <TableFooter>
128
+ <TableRow>
129
+ <TableCell colSpan={3}>Total</TableCell>
130
+ <TableCell className='text-right'>$2,500.00</TableCell>
131
+ </TableRow>
132
+ </TableFooter>
133
+ </Table>
134
+ )
135
+ }
136
+
137
+ const TableWithOutBorderDemo = () => {
138
+ return (
139
+ <Table>
140
+ <TableCaption>Table without border.</TableCaption>
141
+ <TableHeader>
142
+ <TableRow className='bg-muted/50 border-none'>
143
+ <TableHead className='w-25'>Invoice</TableHead>
144
+ <TableHead>Status</TableHead>
145
+ <TableHead>Method</TableHead>
146
+ <TableHead className='text-right'>Amount</TableHead>
147
+ </TableRow>
148
+ </TableHeader>
149
+ <TableBody>
150
+ {invoices.map(invoice => (
151
+ <TableRow key={invoice.invoice} className='border-none'>
152
+ <TableCell className='font-medium'>{invoice.invoice}</TableCell>
153
+ <TableCell>{invoice.paymentStatus}</TableCell>
154
+ <TableCell>{invoice.paymentMethod}</TableCell>
155
+ <TableCell className='text-right'>{invoice.totalAmount}</TableCell>
156
+ </TableRow>
157
+ ))}
158
+ </TableBody>
159
+ <TableFooter className='border-none'>
160
+ <TableRow>
161
+ <TableCell colSpan={3}>Total</TableCell>
162
+ <TableCell className='text-right'>$2,500.00</TableCell>
163
+ </TableRow>
164
+ </TableFooter>
165
+ </Table>
166
+ )
167
+ }
168
+
169
+ const StripedRowsTableDemo = () => {
170
+ return (
171
+ <Table>
172
+ <TableCaption>Striped rows table.</TableCaption>
173
+ <TableHeader>
174
+ <TableRow className='hover:bg-transparent'>
175
+ <TableHead className='w-25'>Invoice</TableHead>
176
+ <TableHead>Status</TableHead>
177
+ <TableHead>Method</TableHead>
178
+ <TableHead className='text-right'>Amount</TableHead>
179
+ </TableRow>
180
+ </TableHeader>
181
+ <TableBody>
182
+ {invoices.map(invoice => (
183
+ <TableRow key={invoice.invoice} className='odd:bg-muted/50 odd:hover:bg-muted/50 hover:bg-transparent'>
184
+ <TableCell className='font-medium'>{invoice.invoice}</TableCell>
185
+ <TableCell>{invoice.paymentStatus}</TableCell>
186
+ <TableCell>{invoice.paymentMethod}</TableCell>
187
+ <TableCell className='text-right'>{invoice.totalAmount}</TableCell>
188
+ </TableRow>
189
+ ))}
190
+ </TableBody>
191
+ <TableFooter className='bg-transparent'>
192
+ <TableRow className='hover:bg-transparent'>
193
+ <TableCell colSpan={3}>Total</TableCell>
194
+ <TableCell className='text-right'>$2,500.00</TableCell>
195
+ </TableRow>
196
+ </TableFooter>
197
+ </Table>
198
+ )
199
+ }
200
+
201
+ const StrippedColumnTableDemo = () => {
202
+ return (
203
+ <Table>
204
+ <TableCaption>Striped columns table.</TableCaption>
205
+ <TableHeader>
206
+ <TableRow className='[&_th]:even:bg-muted/50 hover:bg-transparent'>
207
+ <TableHead className='w-25'>Invoice</TableHead>
208
+ <TableHead>Status</TableHead>
209
+ <TableHead>Method</TableHead>
210
+ <TableHead className='text-right'>Amount</TableHead>
211
+ </TableRow>
212
+ </TableHeader>
213
+ <TableBody>
214
+ {invoices.map(invoice => (
215
+ <TableRow key={invoice.invoice} className='[&_td]:even:bg-muted/50 hover:bg-transparent'>
216
+ <TableCell className='font-medium'>{invoice.invoice}</TableCell>
217
+ <TableCell>{invoice.paymentStatus}</TableCell>
218
+ <TableCell>{invoice.paymentMethod}</TableCell>
219
+ <TableCell className='text-right'>{invoice.totalAmount}</TableCell>
220
+ </TableRow>
221
+ ))}
222
+ </TableBody>
223
+ <TableFooter className='bg-transparent'>
224
+ <TableRow className='hover:bg-transparent'>
225
+ <TableCell colSpan={3}>Total</TableCell>
226
+ <TableCell className='text-right'>$2,500.00</TableCell>
227
+ </TableRow>
228
+ </TableFooter>
229
+ </Table>
230
+ )
231
+ }
232
+
233
+ const TableHighlightedRowDemo = () => {
234
+ return (
235
+ <Table>
236
+ <TableCaption>Highlight row table.</TableCaption>
237
+ <TableHeader>
238
+ <TableRow>
239
+ <TableHead className='w-25'>Invoice</TableHead>
240
+ <TableHead>Status</TableHead>
241
+ <TableHead>Method</TableHead>
242
+ <TableHead className='text-right'>Amount</TableHead>
243
+ </TableRow>
244
+ </TableHeader>
245
+ <TableBody>
246
+ {invoices.map(invoice => (
247
+ <TableRow
248
+ key={invoice.invoice}
249
+ className='nth-3:bg-sky-600/10 nth-3:hover:bg-sky-600/20 nth-3:dark:bg-sky-400/10 nth-3:dark:hover:bg-sky-400/20'
250
+ >
251
+ <TableCell className='font-medium'>{invoice.invoice}</TableCell>
252
+ <TableCell>{invoice.paymentStatus}</TableCell>
253
+ <TableCell>{invoice.paymentMethod}</TableCell>
254
+ <TableCell className='text-right'>{invoice.totalAmount}</TableCell>
255
+ </TableRow>
256
+ ))}
257
+ </TableBody>
258
+ <TableFooter>
259
+ <TableRow>
260
+ <TableCell colSpan={3}>Total</TableCell>
261
+ <TableCell className='text-right'>$2,500.00</TableCell>
262
+ </TableRow>
263
+ </TableFooter>
264
+ </Table>
265
+ )
266
+ }
267
+
268
+ const OverflowScrollTableDemo = () => {
269
+ return (
270
+ <div className='w-full'>
271
+ <div className='grid [&>div]:max-h-70 [&>div]:rounded-sm [&>div]:border'>
272
+ <Table>
273
+ <TableHeader>
274
+ <TableRow>
275
+ <TableHead className='w-25'>Invoice</TableHead>
276
+ <TableHead>Status</TableHead>
277
+ <TableHead>Method</TableHead>
278
+ <TableHead className='text-right'>Amount</TableHead>
279
+ </TableRow>
280
+ </TableHeader>
281
+ <TableBody>
282
+ {invoices.map(invoice => (
283
+ <TableRow key={invoice.invoice}>
284
+ <TableCell className='font-medium'>{invoice.invoice}</TableCell>
285
+ <TableCell>{invoice.paymentStatus}</TableCell>
286
+ <TableCell>{invoice.paymentMethod}</TableCell>
287
+ <TableCell className='text-right'>{invoice.totalAmount}</TableCell>
288
+ </TableRow>
289
+ ))}
290
+ </TableBody>
291
+ <TableFooter>
292
+ <TableRow>
293
+ <TableCell colSpan={3}>Total</TableCell>
294
+ <TableCell className='text-right'>$2,500.00</TableCell>
295
+ </TableRow>
296
+ </TableFooter>
297
+ </Table>
298
+ </div>
299
+ <p className='text-muted-foreground mt-4 text-center text-sm'>Overflow scroll table</p>
300
+ </div>
301
+ )
302
+ }
303
+
304
+ const StickyHeaderTableDemo = () => {
305
+ return (
306
+ <div className='w-full'>
307
+ <div className='[&>div]:max-h-70 [&>div]:rounded-sm [&>div]:border'>
308
+ <Table>
309
+ <TableHeader>
310
+ <TableRow className='bg-background sticky top-0'>
311
+ <TableHead className='w-25'>Invoice</TableHead>
312
+ <TableHead>Status</TableHead>
313
+ <TableHead>Method</TableHead>
314
+ <TableHead className='text-right'>Amount</TableHead>
315
+ </TableRow>
316
+ </TableHeader>
317
+ <TableBody>
318
+ {invoices.map(invoice => (
319
+ <TableRow key={invoice.invoice}>
320
+ <TableCell className='font-medium'>{invoice.invoice}</TableCell>
321
+ <TableCell>{invoice.paymentStatus}</TableCell>
322
+ <TableCell>{invoice.paymentMethod}</TableCell>
323
+ <TableCell className='text-right'>{invoice.totalAmount}</TableCell>
324
+ </TableRow>
325
+ ))}
326
+ </TableBody>
327
+ <TableFooter>
328
+ <TableRow>
329
+ <TableCell colSpan={3}>Total</TableCell>
330
+ <TableCell className='text-right'>$2,500.00</TableCell>
331
+ </TableRow>
332
+ </TableFooter>
333
+ </Table>
334
+ </div>
335
+ <p className='text-muted-foreground mt-4 text-center text-sm'>Sticky header table</p>
336
+ </div>
337
+ )
338
+ }
339
+
340
+ const StickyColumnTableDemo = () => {
341
+ return (
342
+ <div className='w-full'>
343
+ <div className='mx-auto max-w-2xl [&>div]:rounded-sm [&>div]:border'>
344
+ <Table>
345
+ <TableHeader>
346
+ <TableRow className='hover:bg-transparent'>
347
+ <TableHead className='bg-background sticky left-0'>ID</TableHead>
348
+ <TableHead className='bg-background sticky left-7.5'>Name</TableHead>
349
+ <TableHead>Occupation</TableHead>
350
+ <TableHead>Employer</TableHead>
351
+ <TableHead>Email</TableHead>
352
+ <TableHead>Location</TableHead>
353
+ <TableHead>Last Access</TableHead>
354
+ <TableHead>Salary</TableHead>
355
+ </TableRow>
356
+ </TableHeader>
357
+ <TableBody>
358
+ {invoices.map(invoice => (
359
+ <TableRow key={invoice.id} className='hover:bg-transparent'>
360
+ <TableCell className='bg-background sticky left-0 font-medium'>{invoice.id}</TableCell>
361
+ <TableCell className='bg-background sticky left-7.5'>{invoice.name}</TableCell>
362
+ <TableCell>{invoice.occupation}</TableCell>
363
+ <TableCell>{invoice.employer}</TableCell>
364
+ <TableCell>{invoice.email}</TableCell>
365
+ <TableCell>{invoice.location}</TableCell>
366
+ <TableCell>{invoice.lastaccess}</TableCell>
367
+ <TableCell>{invoice.salary}</TableCell>
368
+ </TableRow>
369
+ ))}
370
+ </TableBody>
371
+ </Table>
372
+ </div>
373
+ <p className='text-muted-foreground mt-4 text-center text-sm'>Sticky column table</p>
374
+ </div>
375
+ )
376
+ }
377
+
378
+ const VerticalTableDemo = () => {
379
+ return (
380
+ <div className='mx-auto w-full max-w-lg'>
381
+ <div className='overflow-hidden rounded-md border'>
382
+ <Table>
383
+ <TableBody>
384
+ <TableRow className='*:border-border [&>:not(:last-child)]:border-r'>
385
+ <TableCell className='bg-muted/50 py-2 font-medium'>Product Name</TableCell>
386
+ <TableCell className='py-2'>Iphone 16 PRO</TableCell>
387
+ </TableRow>
388
+ <TableRow className='*:border-border [&>:not(:last-child)]:border-r'>
389
+ <TableCell className='bg-muted/50 py-2 font-medium'>Serial Number</TableCell>
390
+ <TableCell className='py-2'>DF121543309KU</TableCell>
391
+ </TableRow>
392
+ <TableRow className='*:border-border [&>:not(:last-child)]:border-r'>
393
+ <TableCell className='bg-muted/50 py-2 font-medium'>Category</TableCell>
394
+ <TableCell className='py-2'>Smartphone</TableCell>
395
+ </TableRow>
396
+ <TableRow className='*:border-border [&>:not(:last-child)]:border-r'>
397
+ <TableCell className='bg-muted/50 py-2 font-medium'>Purchase Date</TableCell>
398
+ <TableCell className='py-2'>15/06/205</TableCell>
399
+ </TableRow>
400
+ <TableRow className='*:border-border [&>:not(:last-child)]:border-r'>
401
+ <TableCell className='bg-muted/50 py-2 font-medium'>Warranty Expiry</TableCell>
402
+ <TableCell className='py-2'>15/06/2026</TableCell>
403
+ </TableRow>
404
+ <TableRow className='*:border-border [&>:not(:last-child)]:border-r'>
405
+ <TableCell className='bg-muted/50 py-2 font-medium'>Origin</TableCell>
406
+ <TableCell className='py-2'>China</TableCell>
407
+ </TableRow>
408
+ <TableRow className='*:border-border [&>:not(:last-child)]:border-r'>
409
+ <TableCell className='bg-muted/50 py-2 font-medium'>Assign User</TableCell>
410
+ <TableCell className='py-2'>Alice Johnson</TableCell>
411
+ </TableRow>
412
+ <TableRow className='*:border-border [&>:not(:last-child)]:border-r'>
413
+ <TableCell className='bg-muted/50 py-2 font-medium'>Value</TableCell>
414
+ <TableCell className='py-2'>$1,120.0</TableCell>
415
+ </TableRow>
416
+ </TableBody>
417
+ </Table>
418
+ </div>
419
+ <p className='text-muted-foreground mt-4 text-center text-sm'>Vertical table</p>
420
+ </div>
421
+ )
422
+ }
423
+
424
+ const TableWithAvatarDemo = () => {
425
+ return (
426
+ <div className='w-full'>
427
+ <div className='[&>div]:rounded-sm [&>div]:border'>
428
+ <Table>
429
+ <TableHeader>
430
+ <TableRow className='hover:bg-transparent'>
431
+ <TableHead>Name</TableHead>
432
+ <TableHead>Email</TableHead>
433
+ <TableHead>Location</TableHead>
434
+ <TableHead>Status</TableHead>
435
+ <TableHead className='text-right'>Balance</TableHead>
436
+ </TableRow>
437
+ </TableHeader>
438
+ <TableBody>
439
+ {items.map(item => (
440
+ <TableRow key={item.id}>
441
+ <TableCell>
442
+ <div className='flex items-center gap-3'>
443
+ <Avatar>
444
+ <AvatarImage src={item.src} alt={item.fallback} />
445
+ <AvatarFallback className='text-xs'>{item.fallback}</AvatarFallback>
446
+ </Avatar>
447
+ <div className='font-medium'>{item.name}</div>
448
+ </div>
449
+ </TableCell>
450
+ <TableCell>{item.email}</TableCell>
451
+ <TableCell>{item.location}</TableCell>
452
+ <TableCell>{item.status}</TableCell>
453
+ <TableCell className='text-right'>{item.balance}</TableCell>
454
+ </TableRow>
455
+ ))}
456
+ </TableBody>
457
+ </Table>
458
+ </div>
459
+ <p className='text-muted-foreground mt-4 text-center text-sm'>Table with avatar</p>
460
+ </div>
461
+ )
462
+ }
463
+
464
+ const TableSelectableRowDemo = () => {
465
+ const id = useId()
466
+
467
+ return (
468
+ <div className='w-full'>
469
+ <div className='overflow-hidden rounded-md border'>
470
+ <Table>
471
+ <TableHeader>
472
+ <TableRow className='hover:bg-transparent'>
473
+ <TableHead>
474
+ <Checkbox id={id} aria-label='select-all' />
475
+ </TableHead>
476
+ <TableHead>Name</TableHead>
477
+ <TableHead>Email</TableHead>
478
+ <TableHead>Location</TableHead>
479
+ <TableHead>Status</TableHead>
480
+ <TableHead className='text-right'>Balance</TableHead>
481
+ </TableRow>
482
+ </TableHeader>
483
+ <TableBody>
484
+ {items.map(item => (
485
+ <TableRow key={item.id} className='has-data-[state=checked]:bg-muted/50'>
486
+ <TableCell>
487
+ <Checkbox id={`table-checkbox-${item.id}`} aria-label={`user-checkbox-${item.id}`} />
488
+ </TableCell>
489
+ <TableCell className='font-medium'>{item.name}</TableCell>
490
+ <TableCell>{item.email}</TableCell>
491
+ <TableCell>{item.location}</TableCell>
492
+ <TableCell>{item.status}</TableCell>
493
+ <TableCell className='text-right'>{item.balance}</TableCell>
494
+ </TableRow>
495
+ ))}
496
+ </TableBody>
497
+ <TableFooter className='bg-transparent'>
498
+ <TableRow className='hover:bg-transparent'>
499
+ <TableCell colSpan={5}>Total</TableCell>
500
+ <TableCell className='text-right'>$2,500.00</TableCell>
501
+ </TableRow>
502
+ </TableFooter>
503
+ </Table>
504
+ </div>
505
+ <p className='text-muted-foreground mt-4 text-center text-sm'>Table with row selection</p>
506
+ </div>
507
+ )
508
+ }
509
+
510
+ const ProductTableDemo = () => {
511
+ const id = useId()
512
+
513
+ return (
514
+ <div className='w-full'>
515
+ <div className='[&>div]:rounded-sm [&>div]:border'>
516
+ <Table>
517
+ <TableHeader>
518
+ <TableRow className='hover:bg-transparent'>
519
+ <TableHead>
520
+ <Checkbox id={id} aria-label='select-all' />
521
+ </TableHead>
522
+ <TableHead>Product</TableHead>
523
+ <TableHead>Color</TableHead>
524
+ <TableHead>Category</TableHead>
525
+ <TableHead>Price</TableHead>
526
+ <TableHead className='w-0'>Actions</TableHead>
527
+ </TableRow>
528
+ </TableHeader>
529
+ <TableBody>
530
+ {items.map(item => (
531
+ <TableRow key={item.id} className='has-data-[state=checked]:bg-muted/50'>
532
+ <TableCell>
533
+ <Checkbox id={`table-checkbox-${item.id}`} aria-label={`product-checkbox-${item.id}`} />
534
+ </TableCell>
535
+ <TableCell>
536
+ <div className='flex items-center gap-3'>
537
+ <Avatar className='rounded-sm'>
538
+ <AvatarImage src={item.src} alt={item.model} />
539
+ <AvatarFallback className='text-xs'>{item.fallback}</AvatarFallback>
540
+ </Avatar>
541
+ <div>
542
+ <div className='font-medium'>{item.productName}</div>
543
+ <span className='text-muted-foreground mt-0.5 text-xs'>{item.model}</span>
544
+ </div>
545
+ </div>
546
+ </TableCell>
547
+ <TableCell>{item.color}</TableCell>
548
+ <TableCell>{item.category}</TableCell>
549
+ <TableCell>{item.price}</TableCell>
550
+ <TableCell className='flex items-center gap-1'>
551
+ <Button variant='ghost' size='icon' className='rounded-full' aria-label={`product-${item.id}-edit`}>
552
+ <PencilIcon />
553
+ </Button>
554
+ <Button variant='ghost' size='icon' className='rounded-full' aria-label={`product-${item.id}-remove`}>
555
+ <Trash2Icon />
556
+ </Button>
557
+ <Button
558
+ variant='ghost'
559
+ size='icon'
560
+ className='rounded-full'
561
+ aria-label={`product-${item.id}-archive`}
562
+ >
563
+ <ArchiveIcon />
564
+ </Button>
565
+ </TableCell>
566
+ </TableRow>
567
+ ))}
568
+ </TableBody>
569
+ </Table>
570
+ </div>
571
+ <p className='text-muted-foreground mt-4 text-center text-sm'>Product Table</p>
572
+ </div>
573
+ )
574
+ } */