@codefast/ui 0.0.3 → 0.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 (352) hide show
  1. package/dist/accordion.d.mts +9 -0
  2. package/dist/accordion.d.ts +9 -0
  3. package/dist/accordion.js +53 -0
  4. package/dist/accordion.js.map +1 -0
  5. package/dist/accordion.mjs +53 -0
  6. package/dist/accordion.mjs.map +1 -0
  7. package/dist/alert-dialog.d.mts +14 -0
  8. package/dist/alert-dialog.d.ts +14 -0
  9. package/dist/alert-dialog.js +107 -0
  10. package/dist/alert-dialog.js.map +1 -0
  11. package/dist/alert-dialog.mjs +107 -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 +55 -0
  16. package/dist/alert.js.map +1 -0
  17. package/dist/alert.mjs +55 -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 +9 -0
  22. package/dist/aspect-ratio.js.map +1 -0
  23. package/dist/aspect-ratio.mjs +9 -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 +48 -0
  28. package/dist/avatar.js.map +1 -0
  29. package/dist/avatar.mjs +48 -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 +31 -0
  34. package/dist/badge.js.map +1 -0
  35. package/dist/badge.mjs +31 -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 +100 -0
  40. package/dist/breadcrumb.js.map +1 -0
  41. package/dist/breadcrumb.mjs +100 -0
  42. package/dist/breadcrumb.mjs.map +1 -0
  43. package/dist/button.d.mts +1 -1
  44. package/dist/button.d.ts +1 -1
  45. package/dist/button.js +9 -1
  46. package/dist/button.js.map +1 -1
  47. package/dist/button.mjs +9 -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 +83 -0
  52. package/dist/calendar.js.map +1 -0
  53. package/dist/calendar.mjs +83 -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 +66 -1
  58. package/dist/card.js.map +1 -1
  59. package/dist/card.mjs +66 -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 +194 -0
  64. package/dist/carousel.js.map +1 -0
  65. package/dist/carousel.mjs +194 -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 +27 -0
  70. package/dist/checkbox.js.map +1 -0
  71. package/dist/checkbox.mjs +27 -0
  72. package/dist/checkbox.mjs.map +1 -0
  73. package/dist/chunk-4K26QLS2.js +52 -0
  74. package/dist/chunk-4K26QLS2.js.map +1 -0
  75. package/dist/chunk-5GHZ6EXI.js +41 -0
  76. package/dist/chunk-5GHZ6EXI.js.map +1 -0
  77. package/dist/chunk-EIHWTXQ4.mjs +112 -0
  78. package/dist/chunk-EIHWTXQ4.mjs.map +1 -0
  79. package/dist/chunk-G3NP7M2N.js +19 -0
  80. package/dist/chunk-G3NP7M2N.js.map +1 -0
  81. package/dist/chunk-LDYBRDAY.js +112 -0
  82. package/dist/chunk-LDYBRDAY.js.map +1 -0
  83. package/dist/chunk-PTD4AMHI.mjs +25 -0
  84. package/dist/chunk-PTD4AMHI.mjs.map +1 -0
  85. package/dist/chunk-RTKEO347.js +25 -0
  86. package/dist/chunk-RTKEO347.js.map +1 -0
  87. package/dist/chunk-T52N6ZBP.mjs +41 -0
  88. package/dist/chunk-T52N6ZBP.mjs.map +1 -0
  89. package/dist/chunk-UG3URV2Z.mjs +19 -0
  90. package/dist/chunk-UG3URV2Z.mjs.map +1 -0
  91. package/dist/chunk-Z524G4RY.mjs +52 -0
  92. package/dist/chunk-Z524G4RY.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 +13 -0
  96. package/dist/collapsible.js.map +1 -0
  97. package/dist/collapsible.mjs +13 -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 +132 -0
  102. package/dist/command.js.map +1 -0
  103. package/dist/command.mjs +132 -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 +170 -0
  108. package/dist/context-menu.js.map +1 -0
  109. package/dist/context-menu.mjs +170 -0
  110. package/dist/context-menu.mjs.map +1 -0
  111. package/dist/dialog.d.mts +13 -0
  112. package/dist/dialog.d.ts +13 -0
  113. package/dist/dialog.js +23 -0
  114. package/dist/dialog.mjs +23 -0
  115. package/dist/drawer.d.mts +16 -0
  116. package/dist/drawer.d.ts +16 -0
  117. package/dist/drawer.js +98 -0
  118. package/dist/drawer.js.map +1 -0
  119. package/dist/drawer.mjs +98 -0
  120. package/dist/drawer.mjs.map +1 -0
  121. package/dist/dropdown-menu.d.mts +25 -0
  122. package/dist/dropdown-menu.d.ts +25 -0
  123. package/dist/dropdown-menu.js +158 -0
  124. package/dist/dropdown-menu.js.map +1 -0
  125. package/dist/dropdown-menu.mjs +158 -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 +118 -0
  130. package/dist/form.js.map +1 -0
  131. package/dist/form.mjs +118 -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 +31 -0
  136. package/dist/hover-card.js.map +1 -0
  137. package/dist/hover-card.mjs +31 -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 +60 -0
  142. package/dist/input-otp.js.map +1 -0
  143. package/dist/input-otp.mjs +60 -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 +26 -0
  148. package/dist/input.js.map +1 -0
  149. package/dist/input.mjs +26 -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 +9 -0
  154. package/dist/label.js.map +1 -0
  155. package/dist/label.mjs +9 -0
  156. package/dist/label.mjs.map +1 -0
  157. package/dist/menubar.d.mts +29 -0
  158. package/dist/menubar.d.ts +29 -0
  159. package/dist/menubar.js +189 -0
  160. package/dist/menubar.js.map +1 -0
  161. package/dist/menubar.mjs +189 -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 +125 -0
  166. package/dist/navigation-menu.js.map +1 -0
  167. package/dist/navigation-menu.mjs +125 -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 +124 -0
  172. package/dist/pagination.js.map +1 -0
  173. package/dist/pagination.mjs +124 -0
  174. package/dist/pagination.mjs.map +1 -0
  175. package/dist/popover.d.mts +10 -0
  176. package/dist/popover.d.ts +10 -0
  177. package/dist/popover.js +43 -0
  178. package/dist/popover.js.map +1 -0
  179. package/dist/popover.mjs +43 -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 +34 -0
  184. package/dist/progress.js.map +1 -0
  185. package/dist/progress.mjs +34 -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 +47 -0
  190. package/dist/radio-group.js.map +1 -0
  191. package/dist/radio-group.mjs +47 -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 +48 -0
  196. package/dist/resizable.js.map +1 -0
  197. package/dist/resizable.mjs +48 -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 +45 -0
  202. package/dist/scroll-area.js.map +1 -0
  203. package/dist/scroll-area.mjs +45 -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 +135 -0
  208. package/dist/select.js.map +1 -0
  209. package/dist/select.mjs +135 -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 +30 -0
  214. package/dist/separator.js.map +1 -0
  215. package/dist/separator.mjs +30 -0
  216. package/dist/separator.mjs.map +1 -0
  217. package/dist/sheet.d.mts +73 -0
  218. package/dist/sheet.d.ts +73 -0
  219. package/dist/sheet.js +122 -0
  220. package/dist/sheet.js.map +1 -0
  221. package/dist/sheet.mjs +122 -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 +22 -0
  226. package/dist/skeleton.js.map +1 -0
  227. package/dist/skeleton.mjs +22 -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 +29 -0
  232. package/dist/slider.js.map +1 -0
  233. package/dist/slider.mjs +29 -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 +35 -0
  238. package/dist/sonner.js.map +1 -0
  239. package/dist/sonner.mjs +35 -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 +26 -0
  246. package/dist/switch.js.map +1 -0
  247. package/dist/switch.mjs +26 -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 +95 -0
  252. package/dist/table.js.map +1 -0
  253. package/dist/table.mjs +95 -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 +53 -0
  258. package/dist/tabs.js.map +1 -0
  259. package/dist/tabs.mjs +53 -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 +25 -0
  264. package/dist/textarea.js.map +1 -0
  265. package/dist/textarea.mjs +25 -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 +50 -0
  270. package/dist/toggle-group.js.map +1 -0
  271. package/dist/toggle-group.mjs +50 -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 +11 -0
  276. package/dist/toggle.js.map +1 -0
  277. package/dist/toggle.mjs +11 -0
  278. package/dist/toggle.mjs.map +1 -0
  279. package/dist/tooltip.d.mts +10 -0
  280. package/dist/tooltip.d.ts +10 -0
  281. package/dist/tooltip.js +42 -0
  282. package/dist/tooltip.js.map +1 -0
  283. package/dist/tooltip.mjs +42 -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 +11 -0
  288. package/dist/utils.js.map +1 -0
  289. package/dist/utils.mjs +11 -0
  290. package/dist/utils.mjs.map +1 -0
  291. package/package.json +260 -19
  292. package/src/accordion.tsx +76 -0
  293. package/src/alert-dialog.tsx +159 -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 +7 -7
  300. package/src/calendar.tsx +94 -0
  301. package/src/card.tsx +112 -25
  302. package/src/carousel.tsx +281 -0
  303. package/src/checkbox.tsx +35 -0
  304. package/src/collapsible.tsx +27 -0
  305. package/src/command.tsx +203 -0
  306. package/src/context-menu.tsx +278 -0
  307. package/src/dialog.tsx +148 -0
  308. package/src/drawer.tsx +140 -0
  309. package/src/dropdown-menu.tsx +261 -0
  310. package/src/form.tsx +224 -0
  311. package/src/hover-card.tsx +46 -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 +301 -0
  316. package/src/navigation-menu.tsx +176 -0
  317. package/src/pagination.tsx +160 -0
  318. package/src/popover.tsx +68 -0
  319. package/src/progress.tsx +37 -0
  320. package/src/radio-group.tsx +56 -0
  321. package/src/resizable.tsx +64 -0
  322. package/src/scroll-area.tsx +60 -0
  323. package/src/select.tsx +207 -0
  324. package/src/separator.tsx +38 -0
  325. package/src/sheet.tsx +165 -0
  326. package/src/skeleton.tsx +24 -0
  327. package/src/slider.tsx +35 -0
  328. package/src/sonner.tsx +43 -0
  329. package/src/switch.tsx +32 -0
  330. package/src/table.tsx +155 -0
  331. package/src/tabs.tsx +74 -0
  332. package/src/textarea.tsx +29 -0
  333. package/src/toggle-group.tsx +70 -0
  334. package/src/toggle.tsx +53 -0
  335. package/src/tooltip.tsx +73 -0
  336. package/src/{cva.ts → utils.ts} +5 -1
  337. package/tailwind.config.ts +39 -70
  338. package/dist/chunk-33V4YP7I.js +0 -2
  339. package/dist/chunk-33V4YP7I.js.map +0 -1
  340. package/dist/chunk-JVQ3OM5P.mjs +0 -2
  341. package/dist/chunk-JVQ3OM5P.mjs.map +0 -1
  342. package/dist/code.d.mts +0 -3
  343. package/dist/code.d.ts +0 -3
  344. package/dist/code.js +0 -2
  345. package/dist/code.js.map +0 -1
  346. package/dist/code.mjs +0 -2
  347. package/dist/code.mjs.map +0 -1
  348. package/dist/cva.js +0 -2
  349. package/dist/cva.mjs +0 -2
  350. package/src/code.tsx +0 -5
  351. /package/dist/{cva.js.map → dialog.js.map} +0 -0
  352. /package/dist/{cva.mjs.map → dialog.mjs.map} +0 -0
package/src/sheet.tsx ADDED
@@ -0,0 +1,165 @@
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: "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 gap-4 p-6 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
15
+ variants: {
16
+ side: {
17
+ top: "data-[state=open]:slide-in-from-top data-[state=closed]:slide-out-to-top inset-x-0 top-0 border-b",
18
+ bottom:
19
+ "data-[state=open]:slide-in-from-bottom data-[state=closed]:slide-out-to-bottom inset-x-0 bottom-0 border-t",
20
+ left: "data-[state=open]:slide-in-from-left data-[state=closed]:slide-out-to-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm",
21
+ right:
22
+ "data-[state=open]:slide-in-from-right data-[state=closed]:slide-out-to-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm",
23
+ },
24
+ },
25
+ defaultVariants: {
26
+ side: "right",
27
+ },
28
+ });
29
+
30
+ /* -----------------------------------------------------------------------------
31
+ * Component: Sheet
32
+ * -------------------------------------------------------------------------- */
33
+
34
+ const Sheet = SheetPrimitive.Root;
35
+
36
+ /* -----------------------------------------------------------------------------
37
+ * Component: SheetTrigger
38
+ * -------------------------------------------------------------------------- */
39
+
40
+ const SheetTrigger = SheetPrimitive.Trigger;
41
+
42
+ /* -----------------------------------------------------------------------------
43
+ * Component: SheetClose
44
+ * -------------------------------------------------------------------------- */
45
+
46
+ const SheetClose = SheetPrimitive.Close;
47
+
48
+ /* -----------------------------------------------------------------------------
49
+ * Component: SheetContent
50
+ * -------------------------------------------------------------------------- */
51
+
52
+ const SheetContent = React.forwardRef<
53
+ React.ElementRef<typeof SheetPrimitive.Content>,
54
+ SheetPrimitive.DialogContentProps & VariantProps<typeof sheetVariants>
55
+ >(({ side = "right", className, children, ...props }, ref) => (
56
+ <SheetPrimitive.Portal>
57
+ <SheetPrimitive.Overlay
58
+ className={cn(
59
+ "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 fixed inset-0 z-50 bg-black/80",
60
+ )}
61
+ />
62
+ <SheetPrimitive.Content
63
+ ref={ref}
64
+ className={cn(sheetVariants({ side }), className)}
65
+ {...props}
66
+ >
67
+ {children}
68
+ <SheetPrimitive.Close
69
+ className={cn(
70
+ "focus:ring-offset-background focus:ring-ring data-[state=open]:bg-secondary 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",
71
+ )}
72
+ >
73
+ <Cross2Icon className="size-4" />
74
+ <span className="sr-only">Close</span>
75
+ </SheetPrimitive.Close>
76
+ </SheetPrimitive.Content>
77
+ </SheetPrimitive.Portal>
78
+ ));
79
+ SheetContent.displayName = SheetPrimitive.Content.displayName;
80
+
81
+ /* -----------------------------------------------------------------------------
82
+ * Component: SheetHeader
83
+ * -------------------------------------------------------------------------- */
84
+
85
+ function SheetHeader({
86
+ className,
87
+ ...props
88
+ }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element {
89
+ return (
90
+ <div
91
+ className={cn(
92
+ "flex flex-col space-y-2 text-center sm:text-left",
93
+ className,
94
+ )}
95
+ {...props}
96
+ />
97
+ );
98
+ }
99
+
100
+ /* -----------------------------------------------------------------------------
101
+ * Component: SheetFooter
102
+ * -------------------------------------------------------------------------- */
103
+
104
+ function SheetFooter({
105
+ className,
106
+ ...props
107
+ }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element {
108
+ return (
109
+ <div
110
+ className={cn(
111
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
112
+ className,
113
+ )}
114
+ {...props}
115
+ />
116
+ );
117
+ }
118
+ SheetFooter.displayName = "SheetFooter";
119
+
120
+ /* -----------------------------------------------------------------------------
121
+ * Component: SheetTitle
122
+ * -------------------------------------------------------------------------- */
123
+
124
+ const SheetTitle = React.forwardRef<
125
+ React.ElementRef<typeof SheetPrimitive.Title>,
126
+ SheetPrimitive.DialogTitleProps
127
+ >(({ className, ...props }, ref) => (
128
+ <SheetPrimitive.Title
129
+ ref={ref}
130
+ className={cn("text-foreground text-lg font-semibold", className)}
131
+ {...props}
132
+ />
133
+ ));
134
+ SheetTitle.displayName = SheetPrimitive.Title.displayName;
135
+
136
+ /* -----------------------------------------------------------------------------
137
+ * Component: SheetDescription
138
+ * -------------------------------------------------------------------------- */
139
+
140
+ const SheetDescription = React.forwardRef<
141
+ React.ElementRef<typeof SheetPrimitive.Description>,
142
+ SheetPrimitive.DialogDescriptionProps
143
+ >(({ className, ...props }, ref) => (
144
+ <SheetPrimitive.Description
145
+ ref={ref}
146
+ className={cn("text-muted-foreground text-sm", className)}
147
+ {...props}
148
+ />
149
+ ));
150
+ SheetDescription.displayName = SheetPrimitive.Description.displayName;
151
+
152
+ /* -----------------------------------------------------------------------------
153
+ * Exports
154
+ * -------------------------------------------------------------------------- */
155
+
156
+ export {
157
+ Sheet,
158
+ SheetTrigger,
159
+ SheetClose,
160
+ SheetContent,
161
+ SheetHeader,
162
+ SheetFooter,
163
+ SheetTitle,
164
+ SheetDescription,
165
+ };
@@ -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 focus-visible:ring-offset-background block size-4 rounded-full border shadow transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 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,43 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import { useTheme } from "next-themes";
5
+ import { toast, Toaster as Sonner } from "sonner";
6
+ import { cn } from "./utils";
7
+
8
+ /* -----------------------------------------------------------------------------
9
+ * Component: Sonner
10
+ * -------------------------------------------------------------------------- */
11
+
12
+ type ToasterProps = React.ComponentProps<typeof Sonner>;
13
+ type Theme = "light" | "dark" | "system" | undefined;
14
+
15
+ function Toaster({ ...props }: ToasterProps): React.JSX.Element {
16
+ const { theme = "system" } = useTheme() as { theme: Theme };
17
+
18
+ return (
19
+ <Sonner
20
+ theme={theme}
21
+ className="toaster group"
22
+ toastOptions={{
23
+ classNames: {
24
+ toast: cn(
25
+ "group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",
26
+ ),
27
+ description: "group-[.toast]:text-muted-foreground",
28
+ actionButton:
29
+ "group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",
30
+ cancelButton:
31
+ "group-[.toast]:bg-muted group-[.toast]:text-muted-foreground",
32
+ },
33
+ }}
34
+ {...props}
35
+ />
36
+ );
37
+ }
38
+
39
+ /* -----------------------------------------------------------------------------
40
+ * Exports
41
+ * -------------------------------------------------------------------------- */
42
+
43
+ export { Toaster, toast };
package/src/switch.tsx ADDED
@@ -0,0 +1,32 @@
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 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input 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
+ className,
19
+ )}
20
+ {...props}
21
+ ref={ref}
22
+ >
23
+ <SwitchPrimitives.Thumb className="bg-background pointer-events-none block size-4 rounded-full shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0" />
24
+ </SwitchPrimitives.Root>
25
+ ));
26
+ Switch.displayName = SwitchPrimitives.Root.displayName;
27
+
28
+ /* -----------------------------------------------------------------------------
29
+ * Exports
30
+ * -------------------------------------------------------------------------- */
31
+
32
+ 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-3 text-left align-middle font-medium [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-0.5",
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-0.5",
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,74 @@
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-10 items-center justify-center rounded-md 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
+ "focus-visible:ring-offset-background focus-visible:ring-ring data-[state=active]:bg-background data-[state=active]:text-foreground inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 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 data-[state=active]:shadow-sm",
44
+ className,
45
+ )}
46
+ {...props}
47
+ />
48
+ ));
49
+ TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
50
+
51
+ /* -----------------------------------------------------------------------------
52
+ * Component: TabsContent
53
+ * -------------------------------------------------------------------------- */
54
+
55
+ const TabsContent = React.forwardRef<
56
+ React.ElementRef<typeof TabsPrimitive.Content>,
57
+ TabsPrimitive.TabsContentProps
58
+ >(({ className, ...props }, ref) => (
59
+ <TabsPrimitive.Content
60
+ ref={ref}
61
+ className={cn(
62
+ "focus-visible:ring-offset-background focus-visible:ring-ring mt-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
63
+ className,
64
+ )}
65
+ {...props}
66
+ />
67
+ ));
68
+ TabsContent.displayName = TabsPrimitive.Content.displayName;
69
+
70
+ /* -----------------------------------------------------------------------------
71
+ * Exports
72
+ * -------------------------------------------------------------------------- */
73
+
74
+ 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 focus-visible:ring-offset-background flex min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-sm shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 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 };
package/src/toggle.tsx ADDED
@@ -0,0 +1,53 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as TogglePrimitive from "@radix-ui/react-toggle";
5
+ import { type VariantProps } from "cva";
6
+ import { cva } from "./utils";
7
+
8
+ /* -----------------------------------------------------------------------------
9
+ * Variant: Toggle
10
+ * -------------------------------------------------------------------------- */
11
+
12
+ const toggleVariants = cva({
13
+ base: "hover:bg-muted hover:text-muted-foreground focus-visible:ring-ring focus-visible:ring-offset-background data-[state=on]:bg-accent data-[state=on]:text-accent-foreground inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
14
+ variants: {
15
+ variant: {
16
+ default: "bg-transparent",
17
+ outline:
18
+ "border-input hover:bg-accent hover:text-accent-foreground border bg-transparent shadow-sm",
19
+ },
20
+ size: {
21
+ default: "h-10 px-3",
22
+ sm: "h-9 px-2.5",
23
+ lg: "h-11 px-5",
24
+ },
25
+ },
26
+ defaultVariants: {
27
+ variant: "default",
28
+ size: "default",
29
+ },
30
+ });
31
+
32
+ type ToggleVariantsProps = VariantProps<typeof toggleVariants>;
33
+
34
+ /* -----------------------------------------------------------------------------
35
+ * Component: Toggle
36
+ * -------------------------------------------------------------------------- */
37
+
38
+ const Toggle = React.forwardRef<
39
+ React.ElementRef<typeof TogglePrimitive.Root>,
40
+ TogglePrimitive.ToggleProps & ToggleVariantsProps
41
+ >(({ className, variant, size, ...props }, ref) => (
42
+ <TogglePrimitive.Root
43
+ ref={ref}
44
+ className={toggleVariants({ variant, size, className })}
45
+ {...props}
46
+ />
47
+ ));
48
+ Toggle.displayName = TogglePrimitive.Root.displayName;
49
+
50
+ /* -----------------------------------------------------------------------------
51
+ * Exports
52
+ * -------------------------------------------------------------------------- */
53
+ export { Toggle, toggleVariants, type ToggleVariantsProps };