@codefast/ui 0.0.2 → 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 (348) 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 +65 -4
  44. package/dist/button.d.ts +65 -4
  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-QZCQ42BP.js +2 -0
  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.js.map +1 -0
  115. package/dist/dialog.mjs +2 -0
  116. package/dist/dialog.mjs.map +1 -0
  117. package/dist/drawer.d.mts +18 -0
  118. package/dist/drawer.d.ts +18 -0
  119. package/dist/drawer.js +2 -0
  120. package/dist/drawer.js.map +1 -0
  121. package/dist/drawer.mjs +2 -0
  122. package/dist/drawer.mjs.map +1 -0
  123. package/dist/dropdown-menu.d.mts +26 -0
  124. package/dist/dropdown-menu.d.ts +26 -0
  125. package/dist/dropdown-menu.js +2 -0
  126. package/dist/dropdown-menu.js.map +1 -0
  127. package/dist/dropdown-menu.mjs +2 -0
  128. package/dist/dropdown-menu.mjs.map +1 -0
  129. package/dist/form.d.mts +27 -0
  130. package/dist/form.d.ts +27 -0
  131. package/dist/form.js +2 -0
  132. package/dist/form.js.map +1 -0
  133. package/dist/form.mjs +2 -0
  134. package/dist/form.mjs.map +1 -0
  135. package/dist/hover-card.d.mts +8 -0
  136. package/dist/hover-card.d.ts +8 -0
  137. package/dist/hover-card.js +2 -0
  138. package/dist/hover-card.js.map +1 -0
  139. package/dist/hover-card.mjs +2 -0
  140. package/dist/hover-card.mjs.map +1 -0
  141. package/dist/input-otp.d.mts +36 -0
  142. package/dist/input-otp.d.ts +36 -0
  143. package/dist/input-otp.js +2 -0
  144. package/dist/input-otp.js.map +1 -0
  145. package/dist/input-otp.mjs +2 -0
  146. package/dist/input-otp.mjs.map +1 -0
  147. package/dist/input.d.mts +5 -0
  148. package/dist/input.d.ts +5 -0
  149. package/dist/input.js +2 -0
  150. package/dist/input.js.map +1 -0
  151. package/dist/input.mjs +2 -0
  152. package/dist/input.mjs.map +1 -0
  153. package/dist/label.d.mts +6 -0
  154. package/dist/label.d.ts +6 -0
  155. package/dist/label.js +2 -0
  156. package/dist/label.js.map +1 -0
  157. package/dist/label.mjs +2 -0
  158. package/dist/label.mjs.map +1 -0
  159. package/dist/menubar.d.mts +30 -0
  160. package/dist/menubar.d.ts +30 -0
  161. package/dist/menubar.js +2 -0
  162. package/dist/menubar.js.map +1 -0
  163. package/dist/menubar.mjs +2 -0
  164. package/dist/menubar.mjs.map +1 -0
  165. package/dist/navigation-menu.d.mts +68 -0
  166. package/dist/navigation-menu.d.ts +68 -0
  167. package/dist/navigation-menu.js +2 -0
  168. package/dist/navigation-menu.js.map +1 -0
  169. package/dist/navigation-menu.mjs +2 -0
  170. package/dist/navigation-menu.mjs.map +1 -0
  171. package/dist/pagination.d.mts +16 -0
  172. package/dist/pagination.d.ts +16 -0
  173. package/dist/pagination.js +2 -0
  174. package/dist/pagination.js.map +1 -0
  175. package/dist/pagination.mjs +2 -0
  176. package/dist/pagination.mjs.map +1 -0
  177. package/dist/popover.d.mts +9 -0
  178. package/dist/popover.d.ts +9 -0
  179. package/dist/popover.js +2 -0
  180. package/dist/popover.js.map +1 -0
  181. package/dist/popover.mjs +2 -0
  182. package/dist/popover.mjs.map +1 -0
  183. package/dist/progress.d.mts +6 -0
  184. package/dist/progress.d.ts +6 -0
  185. package/dist/progress.js +2 -0
  186. package/dist/progress.js.map +1 -0
  187. package/dist/progress.mjs +2 -0
  188. package/dist/progress.mjs.map +1 -0
  189. package/dist/radio-group.d.mts +7 -0
  190. package/dist/radio-group.d.ts +7 -0
  191. package/dist/radio-group.js +2 -0
  192. package/dist/radio-group.js.map +1 -0
  193. package/dist/radio-group.mjs +2 -0
  194. package/dist/radio-group.mjs.map +1 -0
  195. package/dist/resizable.d.mts +26 -0
  196. package/dist/resizable.d.ts +26 -0
  197. package/dist/resizable.js +2 -0
  198. package/dist/resizable.js.map +1 -0
  199. package/dist/resizable.mjs +2 -0
  200. package/dist/resizable.mjs.map +1 -0
  201. package/dist/scroll-area.d.mts +7 -0
  202. package/dist/scroll-area.d.ts +7 -0
  203. package/dist/scroll-area.js +2 -0
  204. package/dist/scroll-area.js.map +1 -0
  205. package/dist/scroll-area.mjs +2 -0
  206. package/dist/scroll-area.mjs.map +1 -0
  207. package/dist/select.d.mts +15 -0
  208. package/dist/select.d.ts +15 -0
  209. package/dist/select.js +2 -0
  210. package/dist/select.js.map +1 -0
  211. package/dist/select.mjs +2 -0
  212. package/dist/select.mjs.map +1 -0
  213. package/dist/separator.d.mts +6 -0
  214. package/dist/separator.d.ts +6 -0
  215. package/dist/separator.js +2 -0
  216. package/dist/separator.js.map +1 -0
  217. package/dist/separator.mjs +2 -0
  218. package/dist/separator.mjs.map +1 -0
  219. package/dist/sheet.d.mts +75 -0
  220. package/dist/sheet.d.ts +75 -0
  221. package/dist/sheet.js +2 -0
  222. package/dist/sheet.js.map +1 -0
  223. package/dist/sheet.mjs +2 -0
  224. package/dist/sheet.mjs.map +1 -0
  225. package/dist/skeleton.d.mts +5 -0
  226. package/dist/skeleton.d.ts +5 -0
  227. package/dist/skeleton.js +2 -0
  228. package/dist/skeleton.js.map +1 -0
  229. package/dist/skeleton.mjs +2 -0
  230. package/dist/skeleton.mjs.map +1 -0
  231. package/dist/slider.d.mts +6 -0
  232. package/dist/slider.d.ts +6 -0
  233. package/dist/slider.js +2 -0
  234. package/dist/slider.js.map +1 -0
  235. package/dist/slider.mjs +2 -0
  236. package/dist/slider.mjs.map +1 -0
  237. package/dist/sonner.d.mts +8 -0
  238. package/dist/sonner.d.ts +8 -0
  239. package/dist/sonner.js +2 -0
  240. package/dist/sonner.js.map +1 -0
  241. package/dist/sonner.mjs +2 -0
  242. package/dist/sonner.mjs.map +1 -0
  243. package/dist/styles.css +1 -1
  244. package/dist/styles.css.map +1 -1
  245. package/dist/switch.d.mts +6 -0
  246. package/dist/switch.d.ts +6 -0
  247. package/dist/switch.js +2 -0
  248. package/dist/switch.js.map +1 -0
  249. package/dist/switch.mjs +2 -0
  250. package/dist/switch.mjs.map +1 -0
  251. package/dist/table.d.mts +12 -0
  252. package/dist/table.d.ts +12 -0
  253. package/dist/table.js +2 -0
  254. package/dist/table.js.map +1 -0
  255. package/dist/table.mjs +2 -0
  256. package/dist/table.mjs.map +1 -0
  257. package/dist/tabs.d.mts +9 -0
  258. package/dist/tabs.d.ts +9 -0
  259. package/dist/tabs.js +2 -0
  260. package/dist/tabs.js.map +1 -0
  261. package/dist/tabs.mjs +2 -0
  262. package/dist/tabs.mjs.map +1 -0
  263. package/dist/textarea.d.mts +5 -0
  264. package/dist/textarea.d.ts +5 -0
  265. package/dist/textarea.js +2 -0
  266. package/dist/textarea.js.map +1 -0
  267. package/dist/textarea.mjs +2 -0
  268. package/dist/textarea.mjs.map +1 -0
  269. package/dist/toggle-group.d.mts +10 -0
  270. package/dist/toggle-group.d.ts +10 -0
  271. package/dist/toggle-group.js +2 -0
  272. package/dist/toggle-group.js.map +1 -0
  273. package/dist/toggle-group.mjs +2 -0
  274. package/dist/toggle-group.mjs.map +1 -0
  275. package/dist/toggle.d.mts +66 -0
  276. package/dist/toggle.d.ts +66 -0
  277. package/dist/toggle.js +2 -0
  278. package/dist/toggle.js.map +1 -0
  279. package/dist/toggle.mjs +2 -0
  280. package/dist/toggle.mjs.map +1 -0
  281. package/dist/tooltip.d.mts +11 -0
  282. package/dist/tooltip.d.ts +11 -0
  283. package/dist/tooltip.js +2 -0
  284. package/dist/tooltip.js.map +1 -0
  285. package/dist/tooltip.mjs +2 -0
  286. package/dist/tooltip.mjs.map +1 -0
  287. package/dist/utils.d.mts +5 -3
  288. package/dist/utils.d.ts +5 -3
  289. package/dist/utils.js +1 -1
  290. package/dist/utils.mjs +1 -1
  291. package/package.json +261 -19
  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 +63 -21
  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/utils.ts +10 -5
  337. package/tailwind.config.ts +101 -1
  338. package/dist/chunk-LZ5T3FQ5.js +0 -2
  339. package/dist/chunk-LZ5T3FQ5.js.map +0 -1
  340. package/dist/chunk-ULRAQPD3.mjs +0 -2
  341. package/dist/chunk-ULRAQPD3.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/src/code.tsx +0 -5
@@ -0,0 +1,190 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
5
+ import { buttonVariants } from "./button";
6
+ import { cn } from "./utils";
7
+
8
+ /* -----------------------------------------------------------------------------
9
+ * Component: AlertDialog
10
+ * -------------------------------------------------------------------------- */
11
+
12
+ const AlertDialog = AlertDialogPrimitive.Root;
13
+
14
+ /* -----------------------------------------------------------------------------
15
+ * Component: AlertDialogTrigger
16
+ * -------------------------------------------------------------------------- */
17
+
18
+ const AlertDialogTrigger = AlertDialogPrimitive.Trigger;
19
+
20
+ /* -----------------------------------------------------------------------------
21
+ * Component: AlertDialogPortal
22
+ * -------------------------------------------------------------------------- */
23
+
24
+ const AlertDialogPortal = AlertDialogPrimitive.Portal;
25
+
26
+ /* -----------------------------------------------------------------------------
27
+ * Component: AlertDialogOverlay
28
+ * -------------------------------------------------------------------------- */
29
+
30
+ const AlertDialogOverlay = React.forwardRef<
31
+ React.ElementRef<typeof AlertDialogPrimitive.Overlay>,
32
+ AlertDialogPrimitive.AlertDialogOverlayProps
33
+ >(({ className, ...props }, ref) => (
34
+ <AlertDialogPrimitive.Overlay
35
+ className={cn(
36
+ "fixed inset-0 z-50 bg-black/80",
37
+ "data-[state=open]:animate-in data-[state=open]:fade-in-0",
38
+ "data-[state=closed]:animate-out data-[state=closed]:fade-out-0",
39
+ className,
40
+ )}
41
+ {...props}
42
+ ref={ref}
43
+ />
44
+ ));
45
+ AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
46
+
47
+ /* -----------------------------------------------------------------------------
48
+ * Component: AlertDialogContent
49
+ * -------------------------------------------------------------------------- */
50
+
51
+ const AlertDialogContent = React.forwardRef<
52
+ React.ElementRef<typeof AlertDialogPrimitive.Content>,
53
+ AlertDialogPrimitive.AlertDialogContentProps
54
+ >(({ className, ...props }, ref) => (
55
+ <AlertDialogPortal>
56
+ <AlertDialogOverlay />
57
+ <AlertDialogPrimitive.Content
58
+ ref={ref}
59
+ className={cn(
60
+ "bg-background fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border p-6 shadow-lg duration-200 sm:rounded-lg",
61
+ "data-[state=open]:animate-in data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
62
+ "data-[state=closed]:slide-out-to-top-[48%] data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:slide-out-to-left-1/2",
63
+ className,
64
+ )}
65
+ {...props}
66
+ />
67
+ </AlertDialogPortal>
68
+ ));
69
+ AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
70
+
71
+ /* -----------------------------------------------------------------------------
72
+ * Component: AlertDialogHeader
73
+ * -------------------------------------------------------------------------- */
74
+
75
+ function AlertDialogHeader({
76
+ className,
77
+ ...props
78
+ }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element {
79
+ return (
80
+ <div
81
+ className={cn(
82
+ "flex flex-col space-y-2 text-center sm:text-left",
83
+ className,
84
+ )}
85
+ {...props}
86
+ />
87
+ );
88
+ }
89
+
90
+ /* -----------------------------------------------------------------------------
91
+ * Component: AlertDialogFooter
92
+ * -------------------------------------------------------------------------- */
93
+
94
+ function AlertDialogFooter({
95
+ className,
96
+ ...props
97
+ }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element {
98
+ return (
99
+ <div
100
+ className={cn(
101
+ "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
102
+ className,
103
+ )}
104
+ {...props}
105
+ />
106
+ );
107
+ }
108
+
109
+ /* -----------------------------------------------------------------------------
110
+ * Component: AlertDialogTitle
111
+ * -------------------------------------------------------------------------- */
112
+
113
+ const AlertDialogTitle = React.forwardRef<
114
+ React.ElementRef<typeof AlertDialogPrimitive.Title>,
115
+ AlertDialogPrimitive.AlertDialogTitleProps
116
+ >(({ className, ...props }, ref) => (
117
+ <AlertDialogPrimitive.Title
118
+ ref={ref}
119
+ className={cn("text-lg font-semibold", className)}
120
+ {...props}
121
+ />
122
+ ));
123
+ AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
124
+
125
+ /* -----------------------------------------------------------------------------
126
+ * Component: AlertDialogDescription
127
+ * -------------------------------------------------------------------------- */
128
+
129
+ const AlertDialogDescription = React.forwardRef<
130
+ React.ElementRef<typeof AlertDialogPrimitive.Description>,
131
+ AlertDialogPrimitive.AlertDialogDescriptionProps
132
+ >(({ className, ...props }, ref) => (
133
+ <AlertDialogPrimitive.Description
134
+ ref={ref}
135
+ className={cn("text-muted-foreground text-sm", className)}
136
+ {...props}
137
+ />
138
+ ));
139
+ AlertDialogDescription.displayName =
140
+ AlertDialogPrimitive.Description.displayName;
141
+
142
+ /* -----------------------------------------------------------------------------
143
+ * Component: AlertDialogAction
144
+ * -------------------------------------------------------------------------- */
145
+
146
+ const AlertDialogAction = React.forwardRef<
147
+ React.ElementRef<typeof AlertDialogPrimitive.Action>,
148
+ AlertDialogPrimitive.AlertDialogActionProps
149
+ >(({ className, ...props }, ref) => (
150
+ <AlertDialogPrimitive.Action
151
+ ref={ref}
152
+ className={buttonVariants({ className })}
153
+ {...props}
154
+ />
155
+ ));
156
+ AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
157
+
158
+ /* -----------------------------------------------------------------------------
159
+ * Component: AlertDialogCancel
160
+ * -------------------------------------------------------------------------- */
161
+
162
+ const AlertDialogCancel = React.forwardRef<
163
+ React.ElementRef<typeof AlertDialogPrimitive.Cancel>,
164
+ AlertDialogPrimitive.AlertDialogCancelProps
165
+ >(({ className, ...props }, ref) => (
166
+ <AlertDialogPrimitive.Cancel
167
+ ref={ref}
168
+ className={buttonVariants({ variant: "outline", className })}
169
+ {...props}
170
+ />
171
+ ));
172
+ AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
173
+
174
+ /* -----------------------------------------------------------------------------
175
+ * Exports
176
+ * -------------------------------------------------------------------------- */
177
+
178
+ export {
179
+ AlertDialog,
180
+ AlertDialogPortal,
181
+ AlertDialogOverlay,
182
+ AlertDialogTrigger,
183
+ AlertDialogContent,
184
+ AlertDialogHeader,
185
+ AlertDialogFooter,
186
+ AlertDialogTitle,
187
+ AlertDialogDescription,
188
+ AlertDialogAction,
189
+ AlertDialogCancel,
190
+ };
package/src/alert.tsx ADDED
@@ -0,0 +1,78 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "cva";
3
+ import { cn, cva } from "./utils";
4
+
5
+ /* -----------------------------------------------------------------------------
6
+ * Variant: Alert
7
+ * -------------------------------------------------------------------------- */
8
+
9
+ const alertVariants = cva({
10
+ base: "relative w-full rounded-lg border px-4 py-3 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg~*]:pl-7",
11
+ variants: {
12
+ variant: {
13
+ default: "bg-background text-foreground [&>svg]:text-foreground",
14
+ destructive:
15
+ "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive",
16
+ },
17
+ },
18
+ defaultVariants: {
19
+ variant: "default",
20
+ },
21
+ });
22
+
23
+ /* -----------------------------------------------------------------------------
24
+ * Component: Alert
25
+ * -------------------------------------------------------------------------- */
26
+
27
+ const Alert = React.forwardRef<
28
+ HTMLDivElement,
29
+ React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>
30
+ >(({ className, variant, ...props }, ref) => (
31
+ <div
32
+ ref={ref}
33
+ role="alert"
34
+ className={alertVariants({ variant, className })}
35
+ {...props}
36
+ />
37
+ ));
38
+ Alert.displayName = "Alert";
39
+
40
+ /* -----------------------------------------------------------------------------
41
+ * Component: AlertTitle
42
+ * -------------------------------------------------------------------------- */
43
+
44
+ const AlertTitle = React.forwardRef<
45
+ HTMLHeadingElement,
46
+ React.HTMLAttributes<HTMLHeadingElement>
47
+ >(({ className, children, ...props }, ref) => (
48
+ <h5
49
+ ref={ref}
50
+ className={cn("mb-1 font-medium leading-none tracking-tight", className)}
51
+ {...props}
52
+ >
53
+ {children}
54
+ </h5>
55
+ ));
56
+ AlertTitle.displayName = "AlertTitle";
57
+
58
+ /* -----------------------------------------------------------------------------
59
+ * Component: AlertDescription
60
+ * -------------------------------------------------------------------------- */
61
+
62
+ const AlertDescription = React.forwardRef<
63
+ HTMLDivElement,
64
+ React.HTMLAttributes<HTMLDivElement>
65
+ >(({ className, ...props }, ref) => (
66
+ <div
67
+ ref={ref}
68
+ className={cn("text-sm [&_p]:leading-relaxed", className)}
69
+ {...props}
70
+ />
71
+ ));
72
+ AlertDescription.displayName = "AlertDescription";
73
+
74
+ /* -----------------------------------------------------------------------------
75
+ * Exports
76
+ * -------------------------------------------------------------------------- */
77
+
78
+ export { Alert, AlertTitle, AlertDescription };
@@ -0,0 +1,15 @@
1
+ "use client";
2
+
3
+ import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio";
4
+
5
+ /* -----------------------------------------------------------------------------
6
+ * Component: AspectRatio
7
+ * -------------------------------------------------------------------------- */
8
+
9
+ const AspectRatio = AspectRatioPrimitive.Root;
10
+
11
+ /* -----------------------------------------------------------------------------
12
+ * Exports
13
+ * -------------------------------------------------------------------------- */
14
+
15
+ export { AspectRatio };
package/src/avatar.tsx ADDED
@@ -0,0 +1,65 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as AvatarPrimitive from "@radix-ui/react-avatar";
5
+ import { cn } from "./utils";
6
+
7
+ /* -----------------------------------------------------------------------------
8
+ * Component: Avatar
9
+ * -------------------------------------------------------------------------- */
10
+
11
+ const Avatar = React.forwardRef<
12
+ React.ElementRef<typeof AvatarPrimitive.Root>,
13
+ AvatarPrimitive.AvatarProps
14
+ >(({ className, ...props }, ref) => (
15
+ <AvatarPrimitive.Root
16
+ ref={ref}
17
+ className={cn(
18
+ "relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
19
+ className,
20
+ )}
21
+ {...props}
22
+ />
23
+ ));
24
+ Avatar.displayName = AvatarPrimitive.Root.displayName;
25
+
26
+ /* -----------------------------------------------------------------------------
27
+ * Component: AvatarImage
28
+ * -------------------------------------------------------------------------- */
29
+
30
+ const AvatarImage = React.forwardRef<
31
+ React.ElementRef<typeof AvatarPrimitive.Image>,
32
+ AvatarPrimitive.AvatarImageProps
33
+ >(({ className, ...props }, ref) => (
34
+ <AvatarPrimitive.Image
35
+ ref={ref}
36
+ className={cn("aspect-square h-full w-full", className)}
37
+ {...props}
38
+ />
39
+ ));
40
+ AvatarImage.displayName = AvatarPrimitive.Image.displayName;
41
+
42
+ /* -----------------------------------------------------------------------------
43
+ * Component: AvatarFallback
44
+ * -------------------------------------------------------------------------- */
45
+
46
+ const AvatarFallback = React.forwardRef<
47
+ React.ElementRef<typeof AvatarPrimitive.Fallback>,
48
+ AvatarPrimitive.AvatarFallbackProps
49
+ >(({ className, ...props }, ref) => (
50
+ <AvatarPrimitive.Fallback
51
+ ref={ref}
52
+ className={cn(
53
+ "bg-muted flex h-full w-full items-center justify-center rounded-full",
54
+ className,
55
+ )}
56
+ {...props}
57
+ />
58
+ ));
59
+ AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
60
+
61
+ /* -----------------------------------------------------------------------------
62
+ * Exports
63
+ * -------------------------------------------------------------------------- */
64
+
65
+ export { Avatar, AvatarImage, AvatarFallback };
package/src/badge.tsx ADDED
@@ -0,0 +1,43 @@
1
+ import { type VariantProps } from "cva";
2
+ import { cva } from "./utils";
3
+
4
+ /* -----------------------------------------------------------------------------
5
+ * Variant: Badge
6
+ * -------------------------------------------------------------------------- */
7
+
8
+ const badgeVariants = cva({
9
+ base: "focus:ring-ring inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2",
10
+ variants: {
11
+ variant: {
12
+ default:
13
+ "bg-primary text-primary-foreground hover:bg-primary/80 border-transparent shadow",
14
+ secondary:
15
+ "bg-secondary text-secondary-foreground hover:bg-secondary/80 border-transparent",
16
+ destructive:
17
+ "bg-destructive text-destructive-foreground hover:bg-destructive/80 border-transparent shadow",
18
+ outline: "text-foreground",
19
+ },
20
+ },
21
+ defaultVariants: {
22
+ variant: "default",
23
+ },
24
+ });
25
+
26
+ /* -----------------------------------------------------------------------------
27
+ * Component: Badge
28
+ * -------------------------------------------------------------------------- */
29
+
30
+ function Badge({
31
+ className,
32
+ variant,
33
+ ...props
34
+ }: React.HTMLAttributes<HTMLDivElement> &
35
+ VariantProps<typeof badgeVariants>): React.JSX.Element {
36
+ return <div className={badgeVariants({ variant, className })} {...props} />;
37
+ }
38
+
39
+ /* -----------------------------------------------------------------------------
40
+ * Exports
41
+ * -------------------------------------------------------------------------- */
42
+
43
+ export { Badge };
@@ -0,0 +1,148 @@
1
+ import * as React from "react";
2
+ import { Slot } from "@radix-ui/react-slot";
3
+ import { ChevronRightIcon, DotsHorizontalIcon } from "@radix-ui/react-icons";
4
+ import { cn } from "./utils";
5
+
6
+ /* -----------------------------------------------------------------------------
7
+ * Component: Breadcrumb
8
+ * -------------------------------------------------------------------------- */
9
+
10
+ const Breadcrumb = React.forwardRef<
11
+ HTMLElement,
12
+ React.HTMLAttributes<HTMLElement> & {
13
+ separator?: React.ReactNode;
14
+ }
15
+ >(({ ...props }, ref) => <nav ref={ref} aria-label="breadcrumb" {...props} />);
16
+ Breadcrumb.displayName = "Breadcrumb";
17
+
18
+ /* -----------------------------------------------------------------------------
19
+ * Component: BreadcrumbList
20
+ * -------------------------------------------------------------------------- */
21
+
22
+ const BreadcrumbList = React.forwardRef<
23
+ HTMLOListElement,
24
+ React.OlHTMLAttributes<HTMLOListElement>
25
+ >(({ className, ...props }, ref) => (
26
+ <ol
27
+ ref={ref}
28
+ className={cn(
29
+ "text-muted-foreground flex flex-wrap items-center gap-1.5 break-words text-sm sm:gap-2.5",
30
+ className,
31
+ )}
32
+ {...props}
33
+ />
34
+ ));
35
+ BreadcrumbList.displayName = "BreadcrumbList";
36
+
37
+ /* -----------------------------------------------------------------------------
38
+ * Component: BreadcrumbItem
39
+ * -------------------------------------------------------------------------- */
40
+
41
+ const BreadcrumbItem = React.forwardRef<
42
+ HTMLLIElement,
43
+ React.LiHTMLAttributes<HTMLLIElement>
44
+ >(({ className, ...props }, ref) => (
45
+ <li
46
+ ref={ref}
47
+ className={cn("inline-flex items-center gap-1.5", className)}
48
+ {...props}
49
+ />
50
+ ));
51
+ BreadcrumbItem.displayName = "BreadcrumbItem";
52
+
53
+ /* -----------------------------------------------------------------------------
54
+ * Component: BreadcrumbLink
55
+ * -------------------------------------------------------------------------- */
56
+
57
+ const BreadcrumbLink = React.forwardRef<
58
+ HTMLAnchorElement,
59
+ React.AnchorHTMLAttributes<HTMLAnchorElement> & {
60
+ asChild?: boolean;
61
+ }
62
+ >(({ asChild, className, ...props }, ref) => {
63
+ const Comp = asChild ? Slot : "a";
64
+
65
+ return (
66
+ <Comp
67
+ ref={ref}
68
+ className={cn("hover:text-foreground transition-colors", className)}
69
+ {...props}
70
+ />
71
+ );
72
+ });
73
+ BreadcrumbLink.displayName = "BreadcrumbLink";
74
+
75
+ /* -----------------------------------------------------------------------------
76
+ * Component: BreadcrumbPage
77
+ * -------------------------------------------------------------------------- */
78
+
79
+ const BreadcrumbPage = React.forwardRef<
80
+ HTMLSpanElement,
81
+ React.HTMLAttributes<HTMLSpanElement>
82
+ >(({ className, ...props }, ref) => (
83
+ <span
84
+ ref={ref}
85
+ role="link"
86
+ aria-disabled="true"
87
+ aria-current="page"
88
+ className={cn("text-foreground font-normal", className)}
89
+ {...props}
90
+ />
91
+ ));
92
+ BreadcrumbPage.displayName = "BreadcrumbPage";
93
+
94
+ /* -----------------------------------------------------------------------------
95
+ * Component: BreadcrumbSeparator
96
+ * -------------------------------------------------------------------------- */
97
+
98
+ function BreadcrumbSeparator({
99
+ children,
100
+ className,
101
+ ...props
102
+ }: React.LiHTMLAttributes<HTMLLIElement>): React.JSX.Element {
103
+ return (
104
+ <li
105
+ role="presentation"
106
+ aria-hidden="true"
107
+ className={cn("[&>svg]:size-3.5", className)}
108
+ {...props}
109
+ >
110
+ {children ?? <ChevronRightIcon />}
111
+ </li>
112
+ );
113
+ }
114
+
115
+ /* -----------------------------------------------------------------------------
116
+ * Component: BreadcrumbEllipsis
117
+ * -------------------------------------------------------------------------- */
118
+
119
+ function BreadcrumbEllipsis({
120
+ className,
121
+ ...props
122
+ }: React.HTMLAttributes<HTMLSpanElement>): React.JSX.Element {
123
+ return (
124
+ <span
125
+ role="presentation"
126
+ aria-hidden="true"
127
+ className={cn("flex size-9 items-center justify-center", className)}
128
+ {...props}
129
+ >
130
+ <DotsHorizontalIcon className="size-4" />
131
+ <span className="sr-only">More</span>
132
+ </span>
133
+ );
134
+ }
135
+
136
+ /* -----------------------------------------------------------------------------
137
+ * Exports
138
+ * -------------------------------------------------------------------------- */
139
+
140
+ export {
141
+ Breadcrumb,
142
+ BreadcrumbList,
143
+ BreadcrumbItem,
144
+ BreadcrumbLink,
145
+ BreadcrumbPage,
146
+ BreadcrumbSeparator,
147
+ BreadcrumbEllipsis,
148
+ };
package/src/button.tsx CHANGED
@@ -1,25 +1,67 @@
1
- "use client";
1
+ import * as React from "react";
2
+ import { Slot } from "@radix-ui/react-slot";
3
+ import { type VariantProps } from "cva";
4
+ import { cva } from "./utils";
2
5
 
3
- import { cn } from "./utils";
6
+ /* -----------------------------------------------------------------------------
7
+ * Variant: Button
8
+ * -------------------------------------------------------------------------- */
4
9
 
5
- interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
6
- appName: string;
7
- }
10
+ const buttonVariants = cva({
11
+ base: "focus-visible:ring-ring inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 disabled:pointer-events-none disabled:opacity-50",
12
+ variants: {
13
+ variant: {
14
+ default: "bg-primary text-primary-foreground hover:bg-primary/90 shadow",
15
+ destructive:
16
+ "bg-destructive text-destructive-foreground hover:bg-destructive/90 shadow-sm",
17
+ ghost: "hover:bg-accent hover:text-accent-foreground",
18
+ link: "text-primary underline-offset-4 hover:underline",
19
+ outline:
20
+ "border-input bg-background hover:bg-accent hover:text-accent-foreground border shadow-sm",
21
+ secondary:
22
+ "bg-secondary text-secondary-foreground hover:bg-secondary/80 shadow-sm",
23
+ },
24
+ size: {
25
+ default: "h-9 px-4",
26
+ lg: "h-10 px-8",
27
+ sm: "h-8 px-3 text-xs",
28
+ icon: "h-9 w-9",
29
+ },
30
+ },
31
+ defaultVariants: {
32
+ size: "default",
33
+ variant: "default",
34
+ },
35
+ });
36
+
37
+ /* -----------------------------------------------------------------------------
38
+ * Component: Button
39
+ * -------------------------------------------------------------------------- */
8
40
 
9
- export function Button({
10
- appName,
11
- className,
12
- ...props
13
- }: ButtonProps): React.JSX.Element {
14
- return (
15
- <button
16
- className={cn("rounded bg-sky-700 px-4 py-2", className)}
17
- onClick={() => {
18
- // eslint-disable-next-line -- no-alert
19
- alert(`Hello from your ${appName} app!`);
20
- }}
21
- type="button"
22
- {...props}
23
- />
24
- );
41
+ interface ButtonProps
42
+ extends React.ButtonHTMLAttributes<HTMLButtonElement>,
43
+ VariantProps<typeof buttonVariants> {
44
+ asChild?: boolean;
25
45
  }
46
+
47
+ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
48
+ ({ className, variant, size, asChild = false, ...props }, ref) => {
49
+ const Comp = asChild ? Slot : "button";
50
+
51
+ return (
52
+ <Comp
53
+ ref={ref}
54
+ type={asChild ? undefined : "button"}
55
+ className={buttonVariants({ variant, size, className })}
56
+ {...props}
57
+ />
58
+ );
59
+ },
60
+ );
61
+ Button.displayName = "Button";
62
+
63
+ /* -----------------------------------------------------------------------------
64
+ * Exports
65
+ * -------------------------------------------------------------------------- */
66
+
67
+ export { Button, buttonVariants, type ButtonProps };