@codefast/ui 0.0.3 → 0.0.4

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 (351) hide show
  1. package/dist/accordion.d.mts +9 -0
  2. package/dist/accordion.d.ts +9 -0
  3. package/dist/accordion.js +2 -0
  4. package/dist/accordion.js.map +1 -0
  5. package/dist/accordion.mjs +2 -0
  6. package/dist/accordion.mjs.map +1 -0
  7. package/dist/alert-dialog.d.mts +16 -0
  8. package/dist/alert-dialog.d.ts +16 -0
  9. package/dist/alert-dialog.js +2 -0
  10. package/dist/alert-dialog.js.map +1 -0
  11. package/dist/alert-dialog.mjs +2 -0
  12. package/dist/alert-dialog.mjs.map +1 -0
  13. package/dist/alert.d.mts +64 -0
  14. package/dist/alert.d.ts +64 -0
  15. package/dist/alert.js +2 -0
  16. package/dist/alert.js.map +1 -0
  17. package/dist/alert.mjs +2 -0
  18. package/dist/alert.mjs.map +1 -0
  19. package/dist/aspect-ratio.d.mts +6 -0
  20. package/dist/aspect-ratio.d.ts +6 -0
  21. package/dist/aspect-ratio.js +2 -0
  22. package/dist/aspect-ratio.js.map +1 -0
  23. package/dist/aspect-ratio.mjs +2 -0
  24. package/dist/aspect-ratio.mjs.map +1 -0
  25. package/dist/avatar.d.mts +8 -0
  26. package/dist/avatar.d.ts +8 -0
  27. package/dist/avatar.js +2 -0
  28. package/dist/avatar.js.map +1 -0
  29. package/dist/avatar.mjs +2 -0
  30. package/dist/avatar.mjs.map +1 -0
  31. package/dist/badge.d.mts +62 -0
  32. package/dist/badge.d.ts +62 -0
  33. package/dist/badge.js +2 -0
  34. package/dist/badge.js.map +1 -0
  35. package/dist/badge.mjs +2 -0
  36. package/dist/badge.mjs.map +1 -0
  37. package/dist/breadcrumb.d.mts +15 -0
  38. package/dist/breadcrumb.d.ts +15 -0
  39. package/dist/breadcrumb.js +2 -0
  40. package/dist/breadcrumb.js.map +1 -0
  41. package/dist/breadcrumb.mjs +2 -0
  42. package/dist/breadcrumb.mjs.map +1 -0
  43. package/dist/button.d.mts +2 -2
  44. package/dist/button.d.ts +2 -2
  45. package/dist/button.js +1 -1
  46. package/dist/button.js.map +1 -1
  47. package/dist/button.mjs +1 -1
  48. package/dist/button.mjs.map +1 -1
  49. package/dist/calendar.d.mts +7 -0
  50. package/dist/calendar.d.ts +7 -0
  51. package/dist/calendar.js +2 -0
  52. package/dist/calendar.js.map +1 -0
  53. package/dist/calendar.mjs +2 -0
  54. package/dist/calendar.mjs.map +1 -0
  55. package/dist/card.d.mts +9 -7
  56. package/dist/card.d.ts +9 -7
  57. package/dist/card.js +1 -1
  58. package/dist/card.js.map +1 -1
  59. package/dist/card.mjs +1 -1
  60. package/dist/card.mjs.map +1 -1
  61. package/dist/carousel.d.mts +22 -0
  62. package/dist/carousel.d.ts +22 -0
  63. package/dist/carousel.js +2 -0
  64. package/dist/carousel.js.map +1 -0
  65. package/dist/carousel.mjs +2 -0
  66. package/dist/carousel.mjs.map +1 -0
  67. package/dist/checkbox.d.mts +6 -0
  68. package/dist/checkbox.d.ts +6 -0
  69. package/dist/checkbox.js +2 -0
  70. package/dist/checkbox.js.map +1 -0
  71. package/dist/checkbox.mjs +2 -0
  72. package/dist/checkbox.mjs.map +1 -0
  73. package/dist/chunk-4ZL55G6C.js +2 -0
  74. package/dist/chunk-4ZL55G6C.js.map +1 -0
  75. package/dist/chunk-76AASLTX.mjs +2 -0
  76. package/dist/chunk-76AASLTX.mjs.map +1 -0
  77. package/dist/chunk-7UVSBFQU.js +2 -0
  78. package/dist/chunk-7UVSBFQU.js.map +1 -0
  79. package/dist/chunk-BP7PEVLB.js +2 -0
  80. package/dist/chunk-BP7PEVLB.js.map +1 -0
  81. package/dist/chunk-BPCLLQ62.mjs +2 -0
  82. package/dist/chunk-BPCLLQ62.mjs.map +1 -0
  83. package/dist/chunk-CAGY2ZSE.js +2 -0
  84. package/dist/chunk-CAGY2ZSE.js.map +1 -0
  85. package/dist/chunk-JTI7KCLO.mjs +2 -0
  86. package/dist/chunk-JTI7KCLO.mjs.map +1 -0
  87. package/dist/{chunk-33V4YP7I.js → chunk-QZCQ42BP.js} +2 -2
  88. package/dist/chunk-QZCQ42BP.js.map +1 -0
  89. package/dist/chunk-WZ4XIF6U.mjs +2 -0
  90. package/dist/chunk-WZ4XIF6U.mjs.map +1 -0
  91. package/dist/chunk-YQJHVJVX.mjs +2 -0
  92. package/dist/chunk-YQJHVJVX.mjs.map +1 -0
  93. package/dist/collapsible.d.mts +8 -0
  94. package/dist/collapsible.d.ts +8 -0
  95. package/dist/collapsible.js +2 -0
  96. package/dist/collapsible.js.map +1 -0
  97. package/dist/collapsible.mjs +2 -0
  98. package/dist/collapsible.mjs.map +1 -0
  99. package/dist/command.d.mts +89 -0
  100. package/dist/command.d.ts +89 -0
  101. package/dist/command.js +2 -0
  102. package/dist/command.js.map +1 -0
  103. package/dist/command.mjs +2 -0
  104. package/dist/command.mjs.map +1 -0
  105. package/dist/context-menu.d.mts +26 -0
  106. package/dist/context-menu.d.ts +26 -0
  107. package/dist/context-menu.js +2 -0
  108. package/dist/context-menu.js.map +1 -0
  109. package/dist/context-menu.mjs +2 -0
  110. package/dist/context-menu.mjs.map +1 -0
  111. package/dist/dialog.d.mts +15 -0
  112. package/dist/dialog.d.ts +15 -0
  113. package/dist/dialog.js +2 -0
  114. package/dist/dialog.mjs +2 -0
  115. package/dist/drawer.d.mts +18 -0
  116. package/dist/drawer.d.ts +18 -0
  117. package/dist/drawer.js +2 -0
  118. package/dist/drawer.js.map +1 -0
  119. package/dist/drawer.mjs +2 -0
  120. package/dist/drawer.mjs.map +1 -0
  121. package/dist/dropdown-menu.d.mts +26 -0
  122. package/dist/dropdown-menu.d.ts +26 -0
  123. package/dist/dropdown-menu.js +2 -0
  124. package/dist/dropdown-menu.js.map +1 -0
  125. package/dist/dropdown-menu.mjs +2 -0
  126. package/dist/dropdown-menu.mjs.map +1 -0
  127. package/dist/form.d.mts +27 -0
  128. package/dist/form.d.ts +27 -0
  129. package/dist/form.js +2 -0
  130. package/dist/form.js.map +1 -0
  131. package/dist/form.mjs +2 -0
  132. package/dist/form.mjs.map +1 -0
  133. package/dist/hover-card.d.mts +8 -0
  134. package/dist/hover-card.d.ts +8 -0
  135. package/dist/hover-card.js +2 -0
  136. package/dist/hover-card.js.map +1 -0
  137. package/dist/hover-card.mjs +2 -0
  138. package/dist/hover-card.mjs.map +1 -0
  139. package/dist/input-otp.d.mts +36 -0
  140. package/dist/input-otp.d.ts +36 -0
  141. package/dist/input-otp.js +2 -0
  142. package/dist/input-otp.js.map +1 -0
  143. package/dist/input-otp.mjs +2 -0
  144. package/dist/input-otp.mjs.map +1 -0
  145. package/dist/input.d.mts +5 -0
  146. package/dist/input.d.ts +5 -0
  147. package/dist/input.js +2 -0
  148. package/dist/input.js.map +1 -0
  149. package/dist/input.mjs +2 -0
  150. package/dist/input.mjs.map +1 -0
  151. package/dist/label.d.mts +6 -0
  152. package/dist/label.d.ts +6 -0
  153. package/dist/label.js +2 -0
  154. package/dist/label.js.map +1 -0
  155. package/dist/label.mjs +2 -0
  156. package/dist/label.mjs.map +1 -0
  157. package/dist/menubar.d.mts +30 -0
  158. package/dist/menubar.d.ts +30 -0
  159. package/dist/menubar.js +2 -0
  160. package/dist/menubar.js.map +1 -0
  161. package/dist/menubar.mjs +2 -0
  162. package/dist/menubar.mjs.map +1 -0
  163. package/dist/navigation-menu.d.mts +68 -0
  164. package/dist/navigation-menu.d.ts +68 -0
  165. package/dist/navigation-menu.js +2 -0
  166. package/dist/navigation-menu.js.map +1 -0
  167. package/dist/navigation-menu.mjs +2 -0
  168. package/dist/navigation-menu.mjs.map +1 -0
  169. package/dist/pagination.d.mts +16 -0
  170. package/dist/pagination.d.ts +16 -0
  171. package/dist/pagination.js +2 -0
  172. package/dist/pagination.js.map +1 -0
  173. package/dist/pagination.mjs +2 -0
  174. package/dist/pagination.mjs.map +1 -0
  175. package/dist/popover.d.mts +9 -0
  176. package/dist/popover.d.ts +9 -0
  177. package/dist/popover.js +2 -0
  178. package/dist/popover.js.map +1 -0
  179. package/dist/popover.mjs +2 -0
  180. package/dist/popover.mjs.map +1 -0
  181. package/dist/progress.d.mts +6 -0
  182. package/dist/progress.d.ts +6 -0
  183. package/dist/progress.js +2 -0
  184. package/dist/progress.js.map +1 -0
  185. package/dist/progress.mjs +2 -0
  186. package/dist/progress.mjs.map +1 -0
  187. package/dist/radio-group.d.mts +7 -0
  188. package/dist/radio-group.d.ts +7 -0
  189. package/dist/radio-group.js +2 -0
  190. package/dist/radio-group.js.map +1 -0
  191. package/dist/radio-group.mjs +2 -0
  192. package/dist/radio-group.mjs.map +1 -0
  193. package/dist/resizable.d.mts +26 -0
  194. package/dist/resizable.d.ts +26 -0
  195. package/dist/resizable.js +2 -0
  196. package/dist/resizable.js.map +1 -0
  197. package/dist/resizable.mjs +2 -0
  198. package/dist/resizable.mjs.map +1 -0
  199. package/dist/scroll-area.d.mts +7 -0
  200. package/dist/scroll-area.d.ts +7 -0
  201. package/dist/scroll-area.js +2 -0
  202. package/dist/scroll-area.js.map +1 -0
  203. package/dist/scroll-area.mjs +2 -0
  204. package/dist/scroll-area.mjs.map +1 -0
  205. package/dist/select.d.mts +15 -0
  206. package/dist/select.d.ts +15 -0
  207. package/dist/select.js +2 -0
  208. package/dist/select.js.map +1 -0
  209. package/dist/select.mjs +2 -0
  210. package/dist/select.mjs.map +1 -0
  211. package/dist/separator.d.mts +6 -0
  212. package/dist/separator.d.ts +6 -0
  213. package/dist/separator.js +2 -0
  214. package/dist/separator.js.map +1 -0
  215. package/dist/separator.mjs +2 -0
  216. package/dist/separator.mjs.map +1 -0
  217. package/dist/sheet.d.mts +75 -0
  218. package/dist/sheet.d.ts +75 -0
  219. package/dist/sheet.js +2 -0
  220. package/dist/sheet.js.map +1 -0
  221. package/dist/sheet.mjs +2 -0
  222. package/dist/sheet.mjs.map +1 -0
  223. package/dist/skeleton.d.mts +5 -0
  224. package/dist/skeleton.d.ts +5 -0
  225. package/dist/skeleton.js +2 -0
  226. package/dist/skeleton.js.map +1 -0
  227. package/dist/skeleton.mjs +2 -0
  228. package/dist/skeleton.mjs.map +1 -0
  229. package/dist/slider.d.mts +6 -0
  230. package/dist/slider.d.ts +6 -0
  231. package/dist/slider.js +2 -0
  232. package/dist/slider.js.map +1 -0
  233. package/dist/slider.mjs +2 -0
  234. package/dist/slider.mjs.map +1 -0
  235. package/dist/sonner.d.mts +8 -0
  236. package/dist/sonner.d.ts +8 -0
  237. package/dist/sonner.js +2 -0
  238. package/dist/sonner.js.map +1 -0
  239. package/dist/sonner.mjs +2 -0
  240. package/dist/sonner.mjs.map +1 -0
  241. package/dist/styles.css +1 -1
  242. package/dist/styles.css.map +1 -1
  243. package/dist/switch.d.mts +6 -0
  244. package/dist/switch.d.ts +6 -0
  245. package/dist/switch.js +2 -0
  246. package/dist/switch.js.map +1 -0
  247. package/dist/switch.mjs +2 -0
  248. package/dist/switch.mjs.map +1 -0
  249. package/dist/table.d.mts +12 -0
  250. package/dist/table.d.ts +12 -0
  251. package/dist/table.js +2 -0
  252. package/dist/table.js.map +1 -0
  253. package/dist/table.mjs +2 -0
  254. package/dist/table.mjs.map +1 -0
  255. package/dist/tabs.d.mts +9 -0
  256. package/dist/tabs.d.ts +9 -0
  257. package/dist/tabs.js +2 -0
  258. package/dist/tabs.js.map +1 -0
  259. package/dist/tabs.mjs +2 -0
  260. package/dist/tabs.mjs.map +1 -0
  261. package/dist/textarea.d.mts +5 -0
  262. package/dist/textarea.d.ts +5 -0
  263. package/dist/textarea.js +2 -0
  264. package/dist/textarea.js.map +1 -0
  265. package/dist/textarea.mjs +2 -0
  266. package/dist/textarea.mjs.map +1 -0
  267. package/dist/toggle-group.d.mts +10 -0
  268. package/dist/toggle-group.d.ts +10 -0
  269. package/dist/toggle-group.js +2 -0
  270. package/dist/toggle-group.js.map +1 -0
  271. package/dist/toggle-group.mjs +2 -0
  272. package/dist/toggle-group.mjs.map +1 -0
  273. package/dist/toggle.d.mts +66 -0
  274. package/dist/toggle.d.ts +66 -0
  275. package/dist/toggle.js +2 -0
  276. package/dist/toggle.js.map +1 -0
  277. package/dist/toggle.mjs +2 -0
  278. package/dist/toggle.mjs.map +1 -0
  279. package/dist/tooltip.d.mts +11 -0
  280. package/dist/tooltip.d.ts +11 -0
  281. package/dist/tooltip.js +2 -0
  282. package/dist/tooltip.js.map +1 -0
  283. package/dist/tooltip.mjs +2 -0
  284. package/dist/tooltip.mjs.map +1 -0
  285. package/dist/{cva.d.mts → utils.d.mts} +2 -2
  286. package/dist/{cva.d.ts → utils.d.ts} +2 -2
  287. package/dist/utils.js +2 -0
  288. package/dist/utils.js.map +1 -0
  289. package/dist/utils.mjs +2 -0
  290. package/dist/utils.mjs.map +1 -0
  291. package/package.json +259 -18
  292. package/src/accordion.tsx +80 -0
  293. package/src/alert-dialog.tsx +190 -0
  294. package/src/alert.tsx +78 -0
  295. package/src/aspect-ratio.tsx +15 -0
  296. package/src/avatar.tsx +65 -0
  297. package/src/badge.tsx +43 -0
  298. package/src/breadcrumb.tsx +148 -0
  299. package/src/button.tsx +3 -3
  300. package/src/calendar.tsx +95 -0
  301. package/src/card.tsx +112 -25
  302. package/src/carousel.tsx +281 -0
  303. package/src/checkbox.tsx +36 -0
  304. package/src/collapsible.tsx +27 -0
  305. package/src/command.tsx +214 -0
  306. package/src/context-menu.tsx +290 -0
  307. package/src/dialog.tsx +176 -0
  308. package/src/drawer.tsx +164 -0
  309. package/src/dropdown-menu.tsx +290 -0
  310. package/src/form.tsx +225 -0
  311. package/src/hover-card.tsx +54 -0
  312. package/src/input-otp.tsx +100 -0
  313. package/src/input.tsx +30 -0
  314. package/src/label.tsx +29 -0
  315. package/src/menubar.tsx +326 -0
  316. package/src/navigation-menu.tsx +189 -0
  317. package/src/pagination.tsx +162 -0
  318. package/src/popover.tsx +62 -0
  319. package/src/progress.tsx +35 -0
  320. package/src/radio-group.tsx +54 -0
  321. package/src/resizable.tsx +67 -0
  322. package/src/scroll-area.tsx +60 -0
  323. package/src/select.tsx +216 -0
  324. package/src/separator.tsx +38 -0
  325. package/src/sheet.tsx +209 -0
  326. package/src/skeleton.tsx +24 -0
  327. package/src/slider.tsx +35 -0
  328. package/src/sonner.tsx +41 -0
  329. package/src/switch.tsx +38 -0
  330. package/src/table.tsx +155 -0
  331. package/src/tabs.tsx +75 -0
  332. package/src/textarea.tsx +29 -0
  333. package/src/toggle-group.tsx +70 -0
  334. package/src/toggle.tsx +56 -0
  335. package/src/tooltip.tsx +84 -0
  336. package/src/{cva.ts → utils.ts} +5 -1
  337. package/tailwind.config.ts +39 -70
  338. package/dist/chunk-33V4YP7I.js.map +0 -1
  339. package/dist/chunk-JVQ3OM5P.mjs +0 -2
  340. package/dist/chunk-JVQ3OM5P.mjs.map +0 -1
  341. package/dist/code.d.mts +0 -3
  342. package/dist/code.d.ts +0 -3
  343. package/dist/code.js +0 -2
  344. package/dist/code.js.map +0 -1
  345. package/dist/code.mjs +0 -2
  346. package/dist/code.mjs.map +0 -1
  347. package/dist/cva.js +0 -2
  348. package/dist/cva.mjs +0 -2
  349. package/src/code.tsx +0 -5
  350. /package/dist/{cva.js.map → dialog.js.map} +0 -0
  351. /package/dist/{cva.mjs.map → dialog.mjs.map} +0 -0
package/src/sheet.tsx ADDED
@@ -0,0 +1,209 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as SheetPrimitive from "@radix-ui/react-dialog";
5
+ import { Cross2Icon } from "@radix-ui/react-icons";
6
+ import { type VariantProps } from "cva";
7
+ import { cn, cva } from "./utils";
8
+
9
+ /* -----------------------------------------------------------------------------
10
+ * Variant: Sheet
11
+ * -------------------------------------------------------------------------- */
12
+
13
+ const sheetVariants = cva({
14
+ base: [
15
+ "bg-background fixed z-50 gap-4 p-6 shadow-lg transition ease-in-out",
16
+ "data-[state=open]:animate-in data-[state=open]:duration-500",
17
+ "data-[state=closed]:animate-out data-[state=closed]:duration-300",
18
+ ],
19
+ variants: {
20
+ side: {
21
+ top: [
22
+ "inset-x-0 top-0 border-b",
23
+ "data-[state=open]:slide-in-from-top",
24
+ "data-[state=closed]:slide-out-to-top",
25
+ ],
26
+ bottom: [
27
+ "inset-x-0 bottom-0 border-t",
28
+ "data-[state=open]:slide-in-from-bottom",
29
+ "data-[state=closed]:slide-out-to-bottom",
30
+ ],
31
+ left: [
32
+ "inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm",
33
+ "data-[state=open]:slide-in-from-left",
34
+ "data-[state=closed]:slide-out-to-left",
35
+ ],
36
+ right: [
37
+ "inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm",
38
+ "data-[state=open]:slide-in-from-right",
39
+ "data-[state=closed]:slide-out-to-right",
40
+ ],
41
+ },
42
+ },
43
+ defaultVariants: {
44
+ side: "right",
45
+ },
46
+ });
47
+
48
+ /* -----------------------------------------------------------------------------
49
+ * Component: Sheet
50
+ * -------------------------------------------------------------------------- */
51
+
52
+ const Sheet = SheetPrimitive.Root;
53
+
54
+ /* -----------------------------------------------------------------------------
55
+ * Component: SheetTrigger
56
+ * -------------------------------------------------------------------------- */
57
+
58
+ const SheetTrigger = SheetPrimitive.Trigger;
59
+
60
+ /* -----------------------------------------------------------------------------
61
+ * Component: SheetClose
62
+ * -------------------------------------------------------------------------- */
63
+
64
+ const SheetClose = SheetPrimitive.Close;
65
+
66
+ /* -----------------------------------------------------------------------------
67
+ * Component: SheetPortal
68
+ * -------------------------------------------------------------------------- */
69
+
70
+ const SheetPortal = SheetPrimitive.Portal;
71
+
72
+ /* -----------------------------------------------------------------------------
73
+ * Component: SheetOverlay
74
+ * -------------------------------------------------------------------------- */
75
+
76
+ const SheetOverlay = React.forwardRef<
77
+ React.ElementRef<typeof SheetPrimitive.Overlay>,
78
+ SheetPrimitive.DialogOverlayProps
79
+ >(({ className, ...props }, ref) => (
80
+ <SheetPrimitive.Overlay
81
+ className={cn(
82
+ "fixed inset-0 z-50 bg-black/80",
83
+ "data-[state=open]:animate-in data-[state=open]:fade-in-0",
84
+ "data-[state=closed]:animate-out data-[state=closed]:fade-out-0",
85
+ className,
86
+ )}
87
+ {...props}
88
+ ref={ref}
89
+ />
90
+ ));
91
+ SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
92
+
93
+ /* -----------------------------------------------------------------------------
94
+ * Component: SheetContent
95
+ * -------------------------------------------------------------------------- */
96
+
97
+ const SheetContent = React.forwardRef<
98
+ React.ElementRef<typeof SheetPrimitive.Content>,
99
+ SheetPrimitive.DialogContentProps & VariantProps<typeof sheetVariants>
100
+ >(({ side = "right", className, children, ...props }, ref) => (
101
+ <SheetPortal>
102
+ <SheetOverlay />
103
+ <SheetPrimitive.Content
104
+ ref={ref}
105
+ className={cn(sheetVariants({ side }), className)}
106
+ {...props}
107
+ >
108
+ {children}
109
+ <SheetPrimitive.Close
110
+ className={cn(
111
+ "ring-offset-background focus:ring-ring absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:pointer-events-none",
112
+ "data-[state=open]:bg-secondary",
113
+ )}
114
+ >
115
+ <Cross2Icon className="size-4" />
116
+ <span className="sr-only">Close</span>
117
+ </SheetPrimitive.Close>
118
+ </SheetPrimitive.Content>
119
+ </SheetPortal>
120
+ ));
121
+ SheetContent.displayName = SheetPrimitive.Content.displayName;
122
+
123
+ /* -----------------------------------------------------------------------------
124
+ * Component: SheetHeader
125
+ * -------------------------------------------------------------------------- */
126
+
127
+ function SheetHeader({
128
+ className,
129
+ ...props
130
+ }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element {
131
+ return (
132
+ <div
133
+ className={cn(
134
+ "flex flex-col space-y-2 text-center sm:text-left",
135
+ className,
136
+ )}
137
+ {...props}
138
+ />
139
+ );
140
+ }
141
+
142
+ /* -----------------------------------------------------------------------------
143
+ * Component: SheetFooter
144
+ * -------------------------------------------------------------------------- */
145
+
146
+ function SheetFooter({
147
+ className,
148
+ ...props
149
+ }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element {
150
+ return (
151
+ <div
152
+ className={cn(
153
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
154
+ className,
155
+ )}
156
+ {...props}
157
+ />
158
+ );
159
+ }
160
+ SheetFooter.displayName = "SheetFooter";
161
+
162
+ /* -----------------------------------------------------------------------------
163
+ * Component: SheetTitle
164
+ * -------------------------------------------------------------------------- */
165
+
166
+ const SheetTitle = React.forwardRef<
167
+ React.ElementRef<typeof SheetPrimitive.Title>,
168
+ SheetPrimitive.DialogTitleProps
169
+ >(({ className, ...props }, ref) => (
170
+ <SheetPrimitive.Title
171
+ ref={ref}
172
+ className={cn("text-foreground text-lg font-semibold", className)}
173
+ {...props}
174
+ />
175
+ ));
176
+ SheetTitle.displayName = SheetPrimitive.Title.displayName;
177
+
178
+ /* -----------------------------------------------------------------------------
179
+ * Component: SheetDescription
180
+ * -------------------------------------------------------------------------- */
181
+
182
+ const SheetDescription = React.forwardRef<
183
+ React.ElementRef<typeof SheetPrimitive.Description>,
184
+ SheetPrimitive.DialogDescriptionProps
185
+ >(({ className, ...props }, ref) => (
186
+ <SheetPrimitive.Description
187
+ ref={ref}
188
+ className={cn("text-muted-foreground text-sm", className)}
189
+ {...props}
190
+ />
191
+ ));
192
+ SheetDescription.displayName = SheetPrimitive.Description.displayName;
193
+
194
+ /* -----------------------------------------------------------------------------
195
+ * Exports
196
+ * -------------------------------------------------------------------------- */
197
+
198
+ export {
199
+ Sheet,
200
+ SheetPortal,
201
+ SheetOverlay,
202
+ SheetTrigger,
203
+ SheetClose,
204
+ SheetContent,
205
+ SheetHeader,
206
+ SheetFooter,
207
+ SheetTitle,
208
+ SheetDescription,
209
+ };
@@ -0,0 +1,24 @@
1
+ import * as React from "react";
2
+ import { cn } from "./utils";
3
+
4
+ /* -----------------------------------------------------------------------------
5
+ * Component: Skeleton
6
+ * -------------------------------------------------------------------------- */
7
+
8
+ function Skeleton({
9
+ className,
10
+ ...props
11
+ }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element {
12
+ return (
13
+ <div
14
+ className={cn("bg-primary/10 animate-pulse rounded-md", className)}
15
+ {...props}
16
+ />
17
+ );
18
+ }
19
+
20
+ /* -----------------------------------------------------------------------------
21
+ * Exports
22
+ * -------------------------------------------------------------------------- */
23
+
24
+ export { Skeleton };
package/src/slider.tsx ADDED
@@ -0,0 +1,35 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as SliderPrimitive from "@radix-ui/react-slider";
5
+ import { cn } from "./utils";
6
+
7
+ /* -----------------------------------------------------------------------------
8
+ * Component: Slider
9
+ * -------------------------------------------------------------------------- */
10
+
11
+ const Slider = React.forwardRef<
12
+ React.ElementRef<typeof SliderPrimitive.Root>,
13
+ SliderPrimitive.SliderProps
14
+ >(({ className, ...props }, ref) => (
15
+ <SliderPrimitive.Root
16
+ ref={ref}
17
+ className={cn(
18
+ "relative flex w-full touch-none select-none items-center",
19
+ className,
20
+ )}
21
+ {...props}
22
+ >
23
+ <SliderPrimitive.Track className="bg-primary/20 relative h-1.5 w-full grow overflow-hidden rounded-full">
24
+ <SliderPrimitive.Range className="bg-primary absolute h-full" />
25
+ </SliderPrimitive.Track>
26
+ <SliderPrimitive.Thumb className="border-primary/50 bg-background focus-visible:ring-ring block size-4 rounded-full border shadow transition-colors focus-visible:outline-none focus-visible:ring-1 disabled:pointer-events-none disabled:opacity-50" />
27
+ </SliderPrimitive.Root>
28
+ ));
29
+ Slider.displayName = SliderPrimitive.Root.displayName;
30
+
31
+ /* -----------------------------------------------------------------------------
32
+ * Exports
33
+ * -------------------------------------------------------------------------- */
34
+
35
+ export { Slider };
package/src/sonner.tsx ADDED
@@ -0,0 +1,41 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import { useTheme } from "next-themes";
5
+ import { Toaster as Sonner, toast } from "sonner";
6
+
7
+ /* -----------------------------------------------------------------------------
8
+ * Component: Sonner
9
+ * -------------------------------------------------------------------------- */
10
+
11
+ type ToasterProps = React.ComponentProps<typeof Sonner>;
12
+ type Theme = "light" | "dark" | "system" | undefined;
13
+
14
+ function Toaster({ ...props }: ToasterProps): React.JSX.Element {
15
+ const { theme = "system" } = useTheme() as { theme: Theme };
16
+
17
+ return (
18
+ <Sonner
19
+ theme={theme}
20
+ className="toaster group"
21
+ toastOptions={{
22
+ classNames: {
23
+ toast:
24
+ "group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",
25
+ description: "group-[.toast]:text-muted-foreground",
26
+ actionButton:
27
+ "group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",
28
+ cancelButton:
29
+ "group-[.toast]:bg-muted group-[.toast]:text-muted-foreground",
30
+ },
31
+ }}
32
+ {...props}
33
+ />
34
+ );
35
+ }
36
+
37
+ /* -----------------------------------------------------------------------------
38
+ * Exports
39
+ * -------------------------------------------------------------------------- */
40
+
41
+ export { Toaster, toast };
package/src/switch.tsx ADDED
@@ -0,0 +1,38 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as SwitchPrimitives from "@radix-ui/react-switch";
5
+ import { cn } from "./utils";
6
+
7
+ /* -----------------------------------------------------------------------------
8
+ * Component: Switch
9
+ * -------------------------------------------------------------------------- */
10
+
11
+ const Switch = React.forwardRef<
12
+ React.ElementRef<typeof SwitchPrimitives.Root>,
13
+ SwitchPrimitives.SwitchProps
14
+ >(({ className, ...props }, ref) => (
15
+ <SwitchPrimitives.Root
16
+ className={cn(
17
+ "focus-visible:ring-ring focus-visible:ring-offset-background peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
18
+ "data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",
19
+ className,
20
+ )}
21
+ {...props}
22
+ ref={ref}
23
+ >
24
+ <SwitchPrimitives.Thumb
25
+ className={cn(
26
+ "bg-background pointer-events-none block size-4 rounded-full shadow-lg ring-0 transition-transform",
27
+ "data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0",
28
+ )}
29
+ />
30
+ </SwitchPrimitives.Root>
31
+ ));
32
+ Switch.displayName = SwitchPrimitives.Root.displayName;
33
+
34
+ /* -----------------------------------------------------------------------------
35
+ * Exports
36
+ * -------------------------------------------------------------------------- */
37
+
38
+ export { Switch };
package/src/table.tsx ADDED
@@ -0,0 +1,155 @@
1
+ import * as React from "react";
2
+ import { cn } from "./utils";
3
+
4
+ /* -----------------------------------------------------------------------------
5
+ * Component: Table
6
+ * -------------------------------------------------------------------------- */
7
+
8
+ const Table = React.forwardRef<
9
+ HTMLTableElement,
10
+ React.HTMLAttributes<HTMLTableElement>
11
+ >(({ className, ...props }, ref) => (
12
+ <div className="relative w-full overflow-auto">
13
+ <table
14
+ ref={ref}
15
+ className={cn("w-full caption-bottom text-sm", className)}
16
+ {...props}
17
+ />
18
+ </div>
19
+ ));
20
+ Table.displayName = "Table";
21
+
22
+ /* -----------------------------------------------------------------------------
23
+ * Component: TableHeader
24
+ * -------------------------------------------------------------------------- */
25
+
26
+ const TableHeader = React.forwardRef<
27
+ HTMLTableSectionElement,
28
+ React.HTMLAttributes<HTMLTableSectionElement>
29
+ >(({ className, ...props }, ref) => (
30
+ <thead ref={ref} className={cn("[&_tr]:border-b", className)} {...props} />
31
+ ));
32
+ TableHeader.displayName = "TableHeader";
33
+
34
+ /* -----------------------------------------------------------------------------
35
+ * Component: TableBody
36
+ * -------------------------------------------------------------------------- */
37
+
38
+ const TableBody = React.forwardRef<
39
+ HTMLTableSectionElement,
40
+ React.HTMLAttributes<HTMLTableSectionElement>
41
+ >(({ className, ...props }, ref) => (
42
+ <tbody
43
+ ref={ref}
44
+ className={cn("[&_tr:last-child]:border-0", className)}
45
+ {...props}
46
+ />
47
+ ));
48
+ TableBody.displayName = "TableBody";
49
+
50
+ /* -----------------------------------------------------------------------------
51
+ * Component: TableFooter
52
+ * -------------------------------------------------------------------------- */
53
+
54
+ const TableFooter = React.forwardRef<
55
+ HTMLTableSectionElement,
56
+ React.HTMLAttributes<HTMLTableSectionElement>
57
+ >(({ className, ...props }, ref) => (
58
+ <tfoot
59
+ ref={ref}
60
+ className={cn(
61
+ "bg-muted/50 border-t font-medium [&>tr]:last:border-b-0",
62
+ className,
63
+ )}
64
+ {...props}
65
+ />
66
+ ));
67
+ TableFooter.displayName = "TableFooter";
68
+
69
+ /* -----------------------------------------------------------------------------
70
+ * Component: TableRow
71
+ * -------------------------------------------------------------------------- */
72
+
73
+ const TableRow = React.forwardRef<
74
+ HTMLTableRowElement,
75
+ React.HTMLAttributes<HTMLTableRowElement>
76
+ >(({ className, ...props }, ref) => (
77
+ <tr
78
+ ref={ref}
79
+ className={cn(
80
+ "hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",
81
+ className,
82
+ )}
83
+ {...props}
84
+ />
85
+ ));
86
+ TableRow.displayName = "TableRow";
87
+
88
+ /* -----------------------------------------------------------------------------
89
+ * Component: TableHead
90
+ * -------------------------------------------------------------------------- */
91
+
92
+ const TableHead = React.forwardRef<
93
+ HTMLTableCellElement,
94
+ React.ThHTMLAttributes<HTMLTableCellElement>
95
+ >(({ className, ...props }, ref) => (
96
+ <th
97
+ ref={ref}
98
+ className={cn(
99
+ "text-muted-foreground h-10 px-2 text-left align-middle font-medium [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
100
+ className,
101
+ )}
102
+ {...props}
103
+ />
104
+ ));
105
+ TableHead.displayName = "TableHead";
106
+
107
+ /* -----------------------------------------------------------------------------
108
+ * Component: TableCell
109
+ * -------------------------------------------------------------------------- */
110
+
111
+ const TableCell = React.forwardRef<
112
+ HTMLTableCellElement,
113
+ React.TdHTMLAttributes<HTMLTableCellElement>
114
+ >(({ className, ...props }, ref) => (
115
+ <td
116
+ ref={ref}
117
+ className={cn(
118
+ "p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
119
+ className,
120
+ )}
121
+ {...props}
122
+ />
123
+ ));
124
+ TableCell.displayName = "TableCell";
125
+
126
+ /* -----------------------------------------------------------------------------
127
+ * Component: TableCaption
128
+ * -------------------------------------------------------------------------- */
129
+
130
+ const TableCaption = React.forwardRef<
131
+ HTMLTableCaptionElement,
132
+ React.HTMLAttributes<HTMLTableCaptionElement>
133
+ >(({ className, ...props }, ref) => (
134
+ <caption
135
+ ref={ref}
136
+ className={cn("text-muted-foreground mt-4 text-sm", className)}
137
+ {...props}
138
+ />
139
+ ));
140
+ TableCaption.displayName = "TableCaption";
141
+
142
+ /* -----------------------------------------------------------------------------
143
+ * Exports
144
+ * -------------------------------------------------------------------------- */
145
+
146
+ export {
147
+ Table,
148
+ TableHeader,
149
+ TableBody,
150
+ TableFooter,
151
+ TableHead,
152
+ TableRow,
153
+ TableCell,
154
+ TableCaption,
155
+ };
package/src/tabs.tsx ADDED
@@ -0,0 +1,75 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as TabsPrimitive from "@radix-ui/react-tabs";
5
+ import { cn } from "./utils";
6
+
7
+ /* -----------------------------------------------------------------------------
8
+ * Component: Tabs
9
+ * -------------------------------------------------------------------------- */
10
+
11
+ const Tabs = TabsPrimitive.Root;
12
+
13
+ /* -----------------------------------------------------------------------------
14
+ * Component: TabsList
15
+ * -------------------------------------------------------------------------- */
16
+
17
+ const TabsList = React.forwardRef<
18
+ React.ElementRef<typeof TabsPrimitive.List>,
19
+ TabsPrimitive.TabsListProps
20
+ >(({ className, ...props }, ref) => (
21
+ <TabsPrimitive.List
22
+ ref={ref}
23
+ className={cn(
24
+ "bg-muted text-muted-foreground inline-flex h-9 items-center justify-center rounded-lg p-1",
25
+ className,
26
+ )}
27
+ {...props}
28
+ />
29
+ ));
30
+ TabsList.displayName = TabsPrimitive.List.displayName;
31
+
32
+ /* -----------------------------------------------------------------------------
33
+ * Component: TabsTrigger
34
+ * -------------------------------------------------------------------------- */
35
+
36
+ const TabsTrigger = React.forwardRef<
37
+ React.ElementRef<typeof TabsPrimitive.Trigger>,
38
+ TabsPrimitive.TabsTriggerProps
39
+ >(({ className, ...props }, ref) => (
40
+ <TabsPrimitive.Trigger
41
+ ref={ref}
42
+ className={cn(
43
+ "ring-offset-background focus-visible:ring-ring inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
44
+ "data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow",
45
+ className,
46
+ )}
47
+ {...props}
48
+ />
49
+ ));
50
+ TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
51
+
52
+ /* -----------------------------------------------------------------------------
53
+ * Component: TabsContent
54
+ * -------------------------------------------------------------------------- */
55
+
56
+ const TabsContent = React.forwardRef<
57
+ React.ElementRef<typeof TabsPrimitive.Content>,
58
+ TabsPrimitive.TabsContentProps
59
+ >(({ className, ...props }, ref) => (
60
+ <TabsPrimitive.Content
61
+ ref={ref}
62
+ className={cn(
63
+ "ring-offset-background focus-visible:ring-ring mt-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
64
+ className,
65
+ )}
66
+ {...props}
67
+ />
68
+ ));
69
+ TabsContent.displayName = TabsPrimitive.Content.displayName;
70
+
71
+ /* -----------------------------------------------------------------------------
72
+ * Exports
73
+ * -------------------------------------------------------------------------- */
74
+
75
+ export { Tabs, TabsList, TabsTrigger, TabsContent };
@@ -0,0 +1,29 @@
1
+ import * as React from "react";
2
+ import { cn } from "./utils";
3
+
4
+ /* -----------------------------------------------------------------------------
5
+ * Component: Textarea
6
+ * -------------------------------------------------------------------------- */
7
+
8
+ const Textarea = React.forwardRef<
9
+ HTMLTextAreaElement,
10
+ React.TextareaHTMLAttributes<HTMLTextAreaElement>
11
+ >(({ className, ...props }, ref) => {
12
+ return (
13
+ <textarea
14
+ className={cn(
15
+ "border-input placeholder:text-muted-foreground focus-visible:ring-ring flex min-h-[60px] w-full rounded-md border bg-transparent px-3 py-2 text-sm shadow-sm focus-visible:outline-none focus-visible:ring-1 disabled:cursor-not-allowed disabled:opacity-50",
16
+ className,
17
+ )}
18
+ ref={ref}
19
+ {...props}
20
+ />
21
+ );
22
+ });
23
+ Textarea.displayName = "Textarea";
24
+
25
+ /* -----------------------------------------------------------------------------
26
+ * Exports
27
+ * -------------------------------------------------------------------------- */
28
+
29
+ export { Textarea };
@@ -0,0 +1,70 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group";
5
+ import { toggleVariants, type ToggleVariantsProps } from "./toggle";
6
+ import { cn } from "./utils";
7
+
8
+ /* -----------------------------------------------------------------------------
9
+ * Context: ToggleGroup
10
+ * -------------------------------------------------------------------------- */
11
+
12
+ const ToggleGroupContext = React.createContext<ToggleVariantsProps>({
13
+ size: "default",
14
+ variant: "default",
15
+ });
16
+
17
+ /* -----------------------------------------------------------------------------
18
+ * Component: ToggleGroup
19
+ * -------------------------------------------------------------------------- */
20
+
21
+ const ToggleGroup = React.forwardRef<
22
+ React.ElementRef<typeof ToggleGroupPrimitive.Root>,
23
+ React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Root> &
24
+ ToggleVariantsProps
25
+ >(({ className, variant, size, children, ...props }, ref) => (
26
+ <ToggleGroupPrimitive.Root
27
+ ref={ref}
28
+ className={cn("flex items-center justify-center gap-1", className)}
29
+ {...props}
30
+ >
31
+ <ToggleGroupContext.Provider value={{ variant, size }}>
32
+ {children}
33
+ </ToggleGroupContext.Provider>
34
+ </ToggleGroupPrimitive.Root>
35
+ ));
36
+ ToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName;
37
+
38
+ /* -----------------------------------------------------------------------------
39
+ * Component: ToggleGroupItem
40
+ * -------------------------------------------------------------------------- */
41
+
42
+ const ToggleGroupItem = React.forwardRef<
43
+ React.ElementRef<typeof ToggleGroupPrimitive.Item>,
44
+ ToggleGroupPrimitive.ToggleGroupItemProps & ToggleVariantsProps
45
+ >(({ className, children, variant, size, ...props }, ref) => {
46
+ const context = React.useContext(ToggleGroupContext);
47
+
48
+ return (
49
+ <ToggleGroupPrimitive.Item
50
+ ref={ref}
51
+ className={cn(
52
+ toggleVariants({
53
+ variant: context.variant ?? variant,
54
+ size: context.size ?? size,
55
+ }),
56
+ className,
57
+ )}
58
+ {...props}
59
+ >
60
+ {children}
61
+ </ToggleGroupPrimitive.Item>
62
+ );
63
+ });
64
+ ToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName;
65
+
66
+ /* -----------------------------------------------------------------------------
67
+ * Exports
68
+ * -------------------------------------------------------------------------- */
69
+
70
+ export { ToggleGroup, ToggleGroupItem };