@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
@@ -0,0 +1,76 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as AccordionPrimitive from "@radix-ui/react-accordion";
5
+ import { ChevronDownIcon } from "@radix-ui/react-icons";
6
+ import { cn } from "./utils";
7
+
8
+ /* -----------------------------------------------------------------------------
9
+ * Component: Accordion
10
+ * -------------------------------------------------------------------------- */
11
+
12
+ const Accordion = AccordionPrimitive.Root;
13
+
14
+ /* -----------------------------------------------------------------------------
15
+ * Component: AccordionItem
16
+ * -------------------------------------------------------------------------- */
17
+
18
+ const AccordionItem = React.forwardRef<
19
+ React.ElementRef<typeof AccordionPrimitive.Item>,
20
+ AccordionPrimitive.AccordionItemProps
21
+ >(({ className, ...props }, ref) => (
22
+ <AccordionPrimitive.Item
23
+ ref={ref}
24
+ className={cn("border-b", className)}
25
+ {...props}
26
+ />
27
+ ));
28
+ AccordionItem.displayName = AccordionPrimitive.Item.displayName;
29
+
30
+ /* -----------------------------------------------------------------------------
31
+ * Component: AccordionTrigger
32
+ * -------------------------------------------------------------------------- */
33
+
34
+ const AccordionTrigger = React.forwardRef<
35
+ React.ElementRef<typeof AccordionPrimitive.Trigger>,
36
+ AccordionPrimitive.AccordionTriggerProps
37
+ >(({ className, children, ...props }, ref) => (
38
+ <AccordionPrimitive.Header className="flex">
39
+ <AccordionPrimitive.Trigger
40
+ ref={ref}
41
+ className={cn(
42
+ "flex flex-1 items-center justify-between py-4 text-sm font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",
43
+ className,
44
+ )}
45
+ {...props}
46
+ >
47
+ {children}
48
+ <ChevronDownIcon className="text-muted-foreground size-4 shrink-0 transition-transform duration-200" />
49
+ </AccordionPrimitive.Trigger>
50
+ </AccordionPrimitive.Header>
51
+ ));
52
+ AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;
53
+
54
+ /* -----------------------------------------------------------------------------
55
+ * Component: AccordionContent
56
+ * -------------------------------------------------------------------------- */
57
+
58
+ const AccordionContent = React.forwardRef<
59
+ React.ElementRef<typeof AccordionPrimitive.Content>,
60
+ AccordionPrimitive.AccordionContentProps
61
+ >(({ className, children, ...props }, ref) => (
62
+ <AccordionPrimitive.Content
63
+ ref={ref}
64
+ className="data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm"
65
+ {...props}
66
+ >
67
+ <div className={cn("pb-4 pt-0", className)}>{children}</div>
68
+ </AccordionPrimitive.Content>
69
+ ));
70
+ AccordionContent.displayName = AccordionPrimitive.Content.displayName;
71
+
72
+ /* -----------------------------------------------------------------------------
73
+ * Exports
74
+ * -------------------------------------------------------------------------- */
75
+
76
+ export { Accordion, AccordionItem, AccordionTrigger, AccordionContent };
@@ -0,0 +1,159 @@
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: AlertDialogContent
22
+ * -------------------------------------------------------------------------- */
23
+
24
+ const AlertDialogContent = React.forwardRef<
25
+ React.ElementRef<typeof AlertDialogPrimitive.Content>,
26
+ AlertDialogPrimitive.AlertDialogContentProps
27
+ >(({ className, ...props }, ref) => (
28
+ <AlertDialogPrimitive.Portal>
29
+ <AlertDialogPrimitive.Overlay className="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" />
30
+ <AlertDialogPrimitive.Content
31
+ ref={ref}
32
+ className={cn(
33
+ "bg-background data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-1/3 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 data-[state=closed]:slide-out-to-top-1/3 fixed left-1/2 top-1/2 z-50 grid w-full max-w-lg -translate-x-1/2 -translate-y-1/2 gap-4 border p-6 shadow-lg duration-200 focus:outline-none sm:rounded-lg",
34
+ className,
35
+ )}
36
+ {...props}
37
+ />
38
+ </AlertDialogPrimitive.Portal>
39
+ ));
40
+ AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
41
+
42
+ /* -----------------------------------------------------------------------------
43
+ * Component: AlertDialogHeader
44
+ * -------------------------------------------------------------------------- */
45
+
46
+ function AlertDialogHeader({
47
+ className,
48
+ ...props
49
+ }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element {
50
+ return (
51
+ <div
52
+ className={cn(
53
+ "flex flex-col space-y-2 text-center sm:text-left",
54
+ className,
55
+ )}
56
+ {...props}
57
+ />
58
+ );
59
+ }
60
+
61
+ /* -----------------------------------------------------------------------------
62
+ * Component: AlertDialogFooter
63
+ * -------------------------------------------------------------------------- */
64
+
65
+ function AlertDialogFooter({
66
+ className,
67
+ ...props
68
+ }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element {
69
+ return (
70
+ <div
71
+ className={cn(
72
+ "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
73
+ className,
74
+ )}
75
+ {...props}
76
+ />
77
+ );
78
+ }
79
+
80
+ /* -----------------------------------------------------------------------------
81
+ * Component: AlertDialogTitle
82
+ * -------------------------------------------------------------------------- */
83
+
84
+ const AlertDialogTitle = React.forwardRef<
85
+ React.ElementRef<typeof AlertDialogPrimitive.Title>,
86
+ AlertDialogPrimitive.AlertDialogTitleProps
87
+ >(({ className, ...props }, ref) => (
88
+ <AlertDialogPrimitive.Title
89
+ ref={ref}
90
+ className={cn("text-lg font-semibold", className)}
91
+ {...props}
92
+ />
93
+ ));
94
+ AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
95
+
96
+ /* -----------------------------------------------------------------------------
97
+ * Component: AlertDialogDescription
98
+ * -------------------------------------------------------------------------- */
99
+
100
+ const AlertDialogDescription = React.forwardRef<
101
+ React.ElementRef<typeof AlertDialogPrimitive.Description>,
102
+ AlertDialogPrimitive.AlertDialogDescriptionProps
103
+ >(({ className, ...props }, ref) => (
104
+ <AlertDialogPrimitive.Description
105
+ ref={ref}
106
+ className={cn("text-muted-foreground text-sm", className)}
107
+ {...props}
108
+ />
109
+ ));
110
+ AlertDialogDescription.displayName =
111
+ AlertDialogPrimitive.Description.displayName;
112
+
113
+ /* -----------------------------------------------------------------------------
114
+ * Component: AlertDialogAction
115
+ * -------------------------------------------------------------------------- */
116
+
117
+ const AlertDialogAction = React.forwardRef<
118
+ React.ElementRef<typeof AlertDialogPrimitive.Action>,
119
+ AlertDialogPrimitive.AlertDialogActionProps
120
+ >(({ className, ...props }, ref) => (
121
+ <AlertDialogPrimitive.Action
122
+ ref={ref}
123
+ className={buttonVariants({ className })}
124
+ {...props}
125
+ />
126
+ ));
127
+ AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
128
+
129
+ /* -----------------------------------------------------------------------------
130
+ * Component: AlertDialogCancel
131
+ * -------------------------------------------------------------------------- */
132
+
133
+ const AlertDialogCancel = React.forwardRef<
134
+ React.ElementRef<typeof AlertDialogPrimitive.Cancel>,
135
+ AlertDialogPrimitive.AlertDialogCancelProps
136
+ >(({ className, ...props }, ref) => (
137
+ <AlertDialogPrimitive.Cancel
138
+ ref={ref}
139
+ className={buttonVariants({ variant: "outline", className })}
140
+ {...props}
141
+ />
142
+ ));
143
+ AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
144
+
145
+ /* -----------------------------------------------------------------------------
146
+ * Exports
147
+ * -------------------------------------------------------------------------- */
148
+
149
+ export {
150
+ AlertDialog,
151
+ AlertDialogTrigger,
152
+ AlertDialogContent,
153
+ AlertDialogHeader,
154
+ AlertDialogFooter,
155
+ AlertDialogTitle,
156
+ AlertDialogDescription,
157
+ AlertDialogAction,
158
+ AlertDialogCancel,
159
+ };
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 p-4 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 size-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 focus:ring-offset-background 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-4 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,14 +1,14 @@
1
1
  import * as React from "react";
2
2
  import { Slot } from "@radix-ui/react-slot";
3
3
  import { type VariantProps } from "cva";
4
- import { cva } from "./cva";
4
+ import { cva } from "./utils";
5
5
 
6
6
  /* -----------------------------------------------------------------------------
7
7
  * Variant: Button
8
8
  * -------------------------------------------------------------------------- */
9
9
 
10
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",
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-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
12
12
  variants: {
13
13
  variant: {
14
14
  default: "bg-primary text-primary-foreground hover:bg-primary/90 shadow",
@@ -22,9 +22,10 @@ const buttonVariants = cva({
22
22
  "bg-secondary text-secondary-foreground hover:bg-secondary/80 shadow-sm",
23
23
  },
24
24
  size: {
25
- default: "h-9 px-4",
26
- lg: "h-10 px-8",
27
- sm: "h-8 px-3 text-xs",
25
+ default: "h-10 px-4",
26
+ sm: "h-9 px-3",
27
+ lg: "h-11 px-8",
28
+ icon: "size-10",
28
29
  },
29
30
  },
30
31
  defaultVariants: {
@@ -57,11 +58,10 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
57
58
  );
58
59
  },
59
60
  );
60
-
61
61
  Button.displayName = "Button";
62
62
 
63
63
  /* -----------------------------------------------------------------------------
64
- * Export
64
+ * Exports
65
65
  * -------------------------------------------------------------------------- */
66
66
 
67
67
  export { Button, buttonVariants, type ButtonProps };