@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
package/src/select.tsx ADDED
@@ -0,0 +1,216 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import {
5
+ CaretSortIcon,
6
+ CheckIcon,
7
+ ChevronDownIcon,
8
+ ChevronUpIcon,
9
+ } from "@radix-ui/react-icons";
10
+ import * as SelectPrimitive from "@radix-ui/react-select";
11
+ import { cn } from "./utils";
12
+
13
+ /* -----------------------------------------------------------------------------
14
+ * Component: Select
15
+ * -------------------------------------------------------------------------- */
16
+
17
+ const Select = SelectPrimitive.Root;
18
+
19
+ /* -----------------------------------------------------------------------------
20
+ * Component: SelectGroup
21
+ * -------------------------------------------------------------------------- */
22
+
23
+ const SelectGroup = SelectPrimitive.Group;
24
+
25
+ /* -----------------------------------------------------------------------------
26
+ * Component: SelectValue
27
+ * -------------------------------------------------------------------------- */
28
+
29
+ const SelectValue = SelectPrimitive.Value;
30
+
31
+ /* -----------------------------------------------------------------------------
32
+ * Component: SelectTrigger
33
+ * -------------------------------------------------------------------------- */
34
+
35
+ const SelectTrigger = React.forwardRef<
36
+ React.ElementRef<typeof SelectPrimitive.Trigger>,
37
+ SelectPrimitive.SelectTriggerProps
38
+ >(({ className, children, ...props }, ref) => (
39
+ <SelectPrimitive.Trigger
40
+ ref={ref}
41
+ className={cn(
42
+ "border-input ring-offset-background placeholder:text-muted-foreground focus:ring-ring flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border bg-transparent px-3 py-2 text-sm shadow-sm focus:outline-none focus:ring-1 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
43
+ className,
44
+ )}
45
+ {...props}
46
+ >
47
+ {children}
48
+ <SelectPrimitive.Icon asChild>
49
+ <CaretSortIcon className="size-4 opacity-50" />
50
+ </SelectPrimitive.Icon>
51
+ </SelectPrimitive.Trigger>
52
+ ));
53
+ SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
54
+
55
+ /* -----------------------------------------------------------------------------
56
+ * Component: SelectScrollUpButton
57
+ * -------------------------------------------------------------------------- */
58
+
59
+ const SelectScrollUpButton = React.forwardRef<
60
+ React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,
61
+ SelectPrimitive.SelectScrollUpButtonProps
62
+ >(({ className, ...props }, ref) => (
63
+ <SelectPrimitive.ScrollUpButton
64
+ ref={ref}
65
+ className={cn(
66
+ "flex cursor-default items-center justify-center py-1",
67
+ className,
68
+ )}
69
+ {...props}
70
+ >
71
+ <ChevronUpIcon />
72
+ </SelectPrimitive.ScrollUpButton>
73
+ ));
74
+ SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
75
+
76
+ /* -----------------------------------------------------------------------------
77
+ * Component: SelectScrollDownButton
78
+ * -------------------------------------------------------------------------- */
79
+
80
+ const SelectScrollDownButton = React.forwardRef<
81
+ React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,
82
+ SelectPrimitive.SelectScrollDownButtonProps
83
+ >(({ className, ...props }, ref) => (
84
+ <SelectPrimitive.ScrollDownButton
85
+ ref={ref}
86
+ className={cn(
87
+ "flex cursor-default items-center justify-center py-1",
88
+ className,
89
+ )}
90
+ {...props}
91
+ >
92
+ <ChevronDownIcon />
93
+ </SelectPrimitive.ScrollDownButton>
94
+ ));
95
+ SelectScrollDownButton.displayName =
96
+ SelectPrimitive.ScrollDownButton.displayName;
97
+
98
+ /* -----------------------------------------------------------------------------
99
+ * Component: SelectContent
100
+ * -------------------------------------------------------------------------- */
101
+
102
+ const SelectContent = React.forwardRef<
103
+ React.ElementRef<typeof SelectPrimitive.Content>,
104
+ SelectPrimitive.SelectContentProps
105
+ >(({ className, children, position = "popper", ...props }, ref) => (
106
+ <SelectPrimitive.Portal>
107
+ <SelectPrimitive.Content
108
+ ref={ref}
109
+ className={cn(
110
+ "bg-popover text-popover-foreground relative z-50 max-h-[var(--radix-select-content-available-height)] min-w-[8rem] overflow-hidden rounded-md border shadow-md",
111
+ "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
112
+ "data-[state=open]:data-[side=top]:slide-in-from-bottom-2",
113
+ "data-[state=open]:data-[side=right]:slide-in-from-left-2",
114
+ "data-[state=open]:data-[side=bottom]:slide-in-from-top-2",
115
+ "data-[state=open]:data-[side=left]:slide-in-from-right-2",
116
+ "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",
117
+ "data-[state=closed]:data-[side=top]:slide-out-to-bottom-2",
118
+ "data-[state=closed]:data-[side=left]:slide-out-to-right-2",
119
+ "data-[state=closed]:data-[side=bottom]:slide-out-to-top-2",
120
+ "data-[state=closed]:data-[side=right]:slide-out-to-left-2",
121
+ position === "popper" && [
122
+ "data-[side=top]:-translate-y-1",
123
+ "data-[side=right]:translate-x-1",
124
+ "data-[side=bottom]:translate-y-1",
125
+ "data-[side=left]:-translate-x-1",
126
+ ],
127
+ className,
128
+ )}
129
+ position={position}
130
+ {...props}
131
+ >
132
+ <SelectScrollUpButton />
133
+ <SelectPrimitive.Viewport className="p-1">
134
+ {children}
135
+ </SelectPrimitive.Viewport>
136
+ <SelectScrollDownButton />
137
+ </SelectPrimitive.Content>
138
+ </SelectPrimitive.Portal>
139
+ ));
140
+ SelectContent.displayName = SelectPrimitive.Content.displayName;
141
+
142
+ /* -----------------------------------------------------------------------------
143
+ * Component: SelectLabel
144
+ * -------------------------------------------------------------------------- */
145
+
146
+ const SelectLabel = React.forwardRef<
147
+ React.ElementRef<typeof SelectPrimitive.Label>,
148
+ SelectPrimitive.SelectLabelProps
149
+ >(({ className, ...props }, ref) => (
150
+ <SelectPrimitive.Label
151
+ ref={ref}
152
+ className={cn("px-2 py-1.5 text-sm font-semibold", className)}
153
+ {...props}
154
+ />
155
+ ));
156
+ SelectLabel.displayName = SelectPrimitive.Label.displayName;
157
+
158
+ /* -----------------------------------------------------------------------------
159
+ * Component: SelectItem
160
+ * -------------------------------------------------------------------------- */
161
+
162
+ const SelectItem = React.forwardRef<
163
+ React.ElementRef<typeof SelectPrimitive.Item>,
164
+ SelectPrimitive.SelectItemProps
165
+ >(({ className, children, ...props }, ref) => (
166
+ <SelectPrimitive.Item
167
+ ref={ref}
168
+ className={cn(
169
+ "focus:bg-accent focus:text-accent-foreground relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none",
170
+ "aria-disabled:pointer-events-none aria-disabled:opacity-50",
171
+ className,
172
+ )}
173
+ {...props}
174
+ >
175
+ <span className="absolute right-2 flex h-3.5 w-3.5 items-center justify-center">
176
+ <SelectPrimitive.ItemIndicator>
177
+ <CheckIcon className="size-4" />
178
+ </SelectPrimitive.ItemIndicator>
179
+ </span>
180
+ <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>
181
+ </SelectPrimitive.Item>
182
+ ));
183
+ SelectItem.displayName = SelectPrimitive.Item.displayName;
184
+
185
+ /* -----------------------------------------------------------------------------
186
+ * Component: SelectSeparator
187
+ * -------------------------------------------------------------------------- */
188
+
189
+ const SelectSeparator = React.forwardRef<
190
+ React.ElementRef<typeof SelectPrimitive.Separator>,
191
+ SelectPrimitive.SelectSeparatorProps
192
+ >(({ className, ...props }, ref) => (
193
+ <SelectPrimitive.Separator
194
+ ref={ref}
195
+ className={cn("bg-muted -mx-1 my-1 h-px", className)}
196
+ {...props}
197
+ />
198
+ ));
199
+ SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
200
+
201
+ /* -----------------------------------------------------------------------------
202
+ * Exports
203
+ * -------------------------------------------------------------------------- */
204
+
205
+ export {
206
+ Select,
207
+ SelectGroup,
208
+ SelectValue,
209
+ SelectTrigger,
210
+ SelectContent,
211
+ SelectLabel,
212
+ SelectItem,
213
+ SelectSeparator,
214
+ SelectScrollUpButton,
215
+ SelectScrollDownButton,
216
+ };
@@ -0,0 +1,38 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as SeparatorPrimitive from "@radix-ui/react-separator";
5
+ import { cn } from "./utils";
6
+
7
+ /* -----------------------------------------------------------------------------
8
+ * Component: Separator
9
+ * -------------------------------------------------------------------------- */
10
+
11
+ const Separator = React.forwardRef<
12
+ React.ElementRef<typeof SeparatorPrimitive.Root>,
13
+ SeparatorPrimitive.SeparatorProps
14
+ >(
15
+ (
16
+ { className, orientation = "horizontal", decorative = true, ...props },
17
+ ref,
18
+ ) => (
19
+ <SeparatorPrimitive.Root
20
+ ref={ref}
21
+ decorative={decorative}
22
+ orientation={orientation}
23
+ className={cn(
24
+ "bg-border shrink-0",
25
+ orientation === "horizontal" ? "h-px w-full" : "h-full w-px",
26
+ className,
27
+ )}
28
+ {...props}
29
+ />
30
+ ),
31
+ );
32
+ Separator.displayName = SeparatorPrimitive.Root.displayName;
33
+
34
+ /* -----------------------------------------------------------------------------
35
+ * Exports
36
+ * -------------------------------------------------------------------------- */
37
+
38
+ export { Separator };
package/src/sheet.tsx ADDED
@@ -0,0 +1,209 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as SheetPrimitive from "@radix-ui/react-dialog";
5
+ import { Cross2Icon } from "@radix-ui/react-icons";
6
+ import { type VariantProps } from "cva";
7
+ import { cn, cva } from "./utils";
8
+
9
+ /* -----------------------------------------------------------------------------
10
+ * Variant: Sheet
11
+ * -------------------------------------------------------------------------- */
12
+
13
+ const sheetVariants = cva({
14
+ base: [
15
+ "bg-background fixed z-50 gap-4 p-6 shadow-lg transition ease-in-out",
16
+ "data-[state=open]:animate-in data-[state=open]:duration-500",
17
+ "data-[state=closed]:animate-out data-[state=closed]:duration-300",
18
+ ],
19
+ variants: {
20
+ side: {
21
+ top: [
22
+ "inset-x-0 top-0 border-b",
23
+ "data-[state=open]:slide-in-from-top",
24
+ "data-[state=closed]:slide-out-to-top",
25
+ ],
26
+ bottom: [
27
+ "inset-x-0 bottom-0 border-t",
28
+ "data-[state=open]:slide-in-from-bottom",
29
+ "data-[state=closed]:slide-out-to-bottom",
30
+ ],
31
+ left: [
32
+ "inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm",
33
+ "data-[state=open]:slide-in-from-left",
34
+ "data-[state=closed]:slide-out-to-left",
35
+ ],
36
+ right: [
37
+ "inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm",
38
+ "data-[state=open]:slide-in-from-right",
39
+ "data-[state=closed]:slide-out-to-right",
40
+ ],
41
+ },
42
+ },
43
+ defaultVariants: {
44
+ side: "right",
45
+ },
46
+ });
47
+
48
+ /* -----------------------------------------------------------------------------
49
+ * Component: Sheet
50
+ * -------------------------------------------------------------------------- */
51
+
52
+ const Sheet = SheetPrimitive.Root;
53
+
54
+ /* -----------------------------------------------------------------------------
55
+ * Component: SheetTrigger
56
+ * -------------------------------------------------------------------------- */
57
+
58
+ const SheetTrigger = SheetPrimitive.Trigger;
59
+
60
+ /* -----------------------------------------------------------------------------
61
+ * Component: SheetClose
62
+ * -------------------------------------------------------------------------- */
63
+
64
+ const SheetClose = SheetPrimitive.Close;
65
+
66
+ /* -----------------------------------------------------------------------------
67
+ * Component: SheetPortal
68
+ * -------------------------------------------------------------------------- */
69
+
70
+ const SheetPortal = SheetPrimitive.Portal;
71
+
72
+ /* -----------------------------------------------------------------------------
73
+ * Component: SheetOverlay
74
+ * -------------------------------------------------------------------------- */
75
+
76
+ const SheetOverlay = React.forwardRef<
77
+ React.ElementRef<typeof SheetPrimitive.Overlay>,
78
+ SheetPrimitive.DialogOverlayProps
79
+ >(({ className, ...props }, ref) => (
80
+ <SheetPrimitive.Overlay
81
+ className={cn(
82
+ "fixed inset-0 z-50 bg-black/80",
83
+ "data-[state=open]:animate-in data-[state=open]:fade-in-0",
84
+ "data-[state=closed]:animate-out data-[state=closed]:fade-out-0",
85
+ className,
86
+ )}
87
+ {...props}
88
+ ref={ref}
89
+ />
90
+ ));
91
+ SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
92
+
93
+ /* -----------------------------------------------------------------------------
94
+ * Component: SheetContent
95
+ * -------------------------------------------------------------------------- */
96
+
97
+ const SheetContent = React.forwardRef<
98
+ React.ElementRef<typeof SheetPrimitive.Content>,
99
+ SheetPrimitive.DialogContentProps & VariantProps<typeof sheetVariants>
100
+ >(({ side = "right", className, children, ...props }, ref) => (
101
+ <SheetPortal>
102
+ <SheetOverlay />
103
+ <SheetPrimitive.Content
104
+ ref={ref}
105
+ className={cn(sheetVariants({ side }), className)}
106
+ {...props}
107
+ >
108
+ {children}
109
+ <SheetPrimitive.Close
110
+ className={cn(
111
+ "ring-offset-background focus:ring-ring absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:pointer-events-none",
112
+ "data-[state=open]:bg-secondary",
113
+ )}
114
+ >
115
+ <Cross2Icon className="size-4" />
116
+ <span className="sr-only">Close</span>
117
+ </SheetPrimitive.Close>
118
+ </SheetPrimitive.Content>
119
+ </SheetPortal>
120
+ ));
121
+ SheetContent.displayName = SheetPrimitive.Content.displayName;
122
+
123
+ /* -----------------------------------------------------------------------------
124
+ * Component: SheetHeader
125
+ * -------------------------------------------------------------------------- */
126
+
127
+ function SheetHeader({
128
+ className,
129
+ ...props
130
+ }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element {
131
+ return (
132
+ <div
133
+ className={cn(
134
+ "flex flex-col space-y-2 text-center sm:text-left",
135
+ className,
136
+ )}
137
+ {...props}
138
+ />
139
+ );
140
+ }
141
+
142
+ /* -----------------------------------------------------------------------------
143
+ * Component: SheetFooter
144
+ * -------------------------------------------------------------------------- */
145
+
146
+ function SheetFooter({
147
+ className,
148
+ ...props
149
+ }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element {
150
+ return (
151
+ <div
152
+ className={cn(
153
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
154
+ className,
155
+ )}
156
+ {...props}
157
+ />
158
+ );
159
+ }
160
+ SheetFooter.displayName = "SheetFooter";
161
+
162
+ /* -----------------------------------------------------------------------------
163
+ * Component: SheetTitle
164
+ * -------------------------------------------------------------------------- */
165
+
166
+ const SheetTitle = React.forwardRef<
167
+ React.ElementRef<typeof SheetPrimitive.Title>,
168
+ SheetPrimitive.DialogTitleProps
169
+ >(({ className, ...props }, ref) => (
170
+ <SheetPrimitive.Title
171
+ ref={ref}
172
+ className={cn("text-foreground text-lg font-semibold", className)}
173
+ {...props}
174
+ />
175
+ ));
176
+ SheetTitle.displayName = SheetPrimitive.Title.displayName;
177
+
178
+ /* -----------------------------------------------------------------------------
179
+ * Component: SheetDescription
180
+ * -------------------------------------------------------------------------- */
181
+
182
+ const SheetDescription = React.forwardRef<
183
+ React.ElementRef<typeof SheetPrimitive.Description>,
184
+ SheetPrimitive.DialogDescriptionProps
185
+ >(({ className, ...props }, ref) => (
186
+ <SheetPrimitive.Description
187
+ ref={ref}
188
+ className={cn("text-muted-foreground text-sm", className)}
189
+ {...props}
190
+ />
191
+ ));
192
+ SheetDescription.displayName = SheetPrimitive.Description.displayName;
193
+
194
+ /* -----------------------------------------------------------------------------
195
+ * Exports
196
+ * -------------------------------------------------------------------------- */
197
+
198
+ export {
199
+ Sheet,
200
+ SheetPortal,
201
+ SheetOverlay,
202
+ SheetTrigger,
203
+ SheetClose,
204
+ SheetContent,
205
+ SheetHeader,
206
+ SheetFooter,
207
+ SheetTitle,
208
+ SheetDescription,
209
+ };
@@ -0,0 +1,24 @@
1
+ import * as React from "react";
2
+ import { cn } from "./utils";
3
+
4
+ /* -----------------------------------------------------------------------------
5
+ * Component: Skeleton
6
+ * -------------------------------------------------------------------------- */
7
+
8
+ function Skeleton({
9
+ className,
10
+ ...props
11
+ }: React.HTMLAttributes<HTMLDivElement>): React.JSX.Element {
12
+ return (
13
+ <div
14
+ className={cn("bg-primary/10 animate-pulse rounded-md", className)}
15
+ {...props}
16
+ />
17
+ );
18
+ }
19
+
20
+ /* -----------------------------------------------------------------------------
21
+ * Exports
22
+ * -------------------------------------------------------------------------- */
23
+
24
+ export { Skeleton };
package/src/slider.tsx ADDED
@@ -0,0 +1,35 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as SliderPrimitive from "@radix-ui/react-slider";
5
+ import { cn } from "./utils";
6
+
7
+ /* -----------------------------------------------------------------------------
8
+ * Component: Slider
9
+ * -------------------------------------------------------------------------- */
10
+
11
+ const Slider = React.forwardRef<
12
+ React.ElementRef<typeof SliderPrimitive.Root>,
13
+ SliderPrimitive.SliderProps
14
+ >(({ className, ...props }, ref) => (
15
+ <SliderPrimitive.Root
16
+ ref={ref}
17
+ className={cn(
18
+ "relative flex w-full touch-none select-none items-center",
19
+ className,
20
+ )}
21
+ {...props}
22
+ >
23
+ <SliderPrimitive.Track className="bg-primary/20 relative h-1.5 w-full grow overflow-hidden rounded-full">
24
+ <SliderPrimitive.Range className="bg-primary absolute h-full" />
25
+ </SliderPrimitive.Track>
26
+ <SliderPrimitive.Thumb className="border-primary/50 bg-background focus-visible:ring-ring block size-4 rounded-full border shadow transition-colors focus-visible:outline-none focus-visible:ring-1 disabled:pointer-events-none disabled:opacity-50" />
27
+ </SliderPrimitive.Root>
28
+ ));
29
+ Slider.displayName = SliderPrimitive.Root.displayName;
30
+
31
+ /* -----------------------------------------------------------------------------
32
+ * Exports
33
+ * -------------------------------------------------------------------------- */
34
+
35
+ export { Slider };
package/src/sonner.tsx ADDED
@@ -0,0 +1,41 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import { useTheme } from "next-themes";
5
+ import { Toaster as Sonner, toast } from "sonner";
6
+
7
+ /* -----------------------------------------------------------------------------
8
+ * Component: Sonner
9
+ * -------------------------------------------------------------------------- */
10
+
11
+ type ToasterProps = React.ComponentProps<typeof Sonner>;
12
+ type Theme = "light" | "dark" | "system" | undefined;
13
+
14
+ function Toaster({ ...props }: ToasterProps): React.JSX.Element {
15
+ const { theme = "system" } = useTheme() as { theme: Theme };
16
+
17
+ return (
18
+ <Sonner
19
+ theme={theme}
20
+ className="toaster group"
21
+ toastOptions={{
22
+ classNames: {
23
+ toast:
24
+ "group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",
25
+ description: "group-[.toast]:text-muted-foreground",
26
+ actionButton:
27
+ "group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",
28
+ cancelButton:
29
+ "group-[.toast]:bg-muted group-[.toast]:text-muted-foreground",
30
+ },
31
+ }}
32
+ {...props}
33
+ />
34
+ );
35
+ }
36
+
37
+ /* -----------------------------------------------------------------------------
38
+ * Exports
39
+ * -------------------------------------------------------------------------- */
40
+
41
+ export { Toaster, toast };
package/src/switch.tsx ADDED
@@ -0,0 +1,38 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as SwitchPrimitives from "@radix-ui/react-switch";
5
+ import { cn } from "./utils";
6
+
7
+ /* -----------------------------------------------------------------------------
8
+ * Component: Switch
9
+ * -------------------------------------------------------------------------- */
10
+
11
+ const Switch = React.forwardRef<
12
+ React.ElementRef<typeof SwitchPrimitives.Root>,
13
+ SwitchPrimitives.SwitchProps
14
+ >(({ className, ...props }, ref) => (
15
+ <SwitchPrimitives.Root
16
+ className={cn(
17
+ "focus-visible:ring-ring focus-visible:ring-offset-background peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
18
+ "data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",
19
+ className,
20
+ )}
21
+ {...props}
22
+ ref={ref}
23
+ >
24
+ <SwitchPrimitives.Thumb
25
+ className={cn(
26
+ "bg-background pointer-events-none block size-4 rounded-full shadow-lg ring-0 transition-transform",
27
+ "data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0",
28
+ )}
29
+ />
30
+ </SwitchPrimitives.Root>
31
+ ));
32
+ Switch.displayName = SwitchPrimitives.Root.displayName;
33
+
34
+ /* -----------------------------------------------------------------------------
35
+ * Exports
36
+ * -------------------------------------------------------------------------- */
37
+
38
+ export { Switch };