@arolariu/components 0.2.0 → 0.3.1

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 (281) hide show
  1. package/changelog.md +15 -0
  2. package/dist/components/ui/accordion.d.ts +4 -4
  3. package/dist/components/ui/accordion.d.ts.map +1 -1
  4. package/dist/components/ui/accordion.js +19 -27
  5. package/dist/components/ui/accordion.js.map +1 -1
  6. package/dist/components/ui/alert-dialog.d.ts +17 -11
  7. package/dist/components/ui/alert-dialog.d.ts.map +1 -1
  8. package/dist/components/ui/alert-dialog.js +38 -61
  9. package/dist/components/ui/alert-dialog.js.map +1 -1
  10. package/dist/components/ui/alert.d.ts +4 -5
  11. package/dist/components/ui/alert.d.ts.map +1 -1
  12. package/dist/components/ui/alert.js +17 -20
  13. package/dist/components/ui/alert.js.map +1 -1
  14. package/dist/components/ui/aspect-ratio.d.ts +1 -2
  15. package/dist/components/ui/aspect-ratio.d.ts.map +1 -1
  16. package/dist/components/ui/aspect-ratio.js +1 -8
  17. package/dist/components/ui/aspect-ratio.js.map +1 -1
  18. package/dist/components/ui/avatar.d.ts +3 -3
  19. package/dist/components/ui/avatar.d.ts.map +1 -1
  20. package/dist/components/ui/avatar.js +16 -19
  21. package/dist/components/ui/avatar.js.map +1 -1
  22. package/dist/components/ui/badge.d.ts +3 -3
  23. package/dist/components/ui/badge.d.ts.map +1 -1
  24. package/dist/components/ui/badge.js +7 -10
  25. package/dist/components/ui/badge.js.map +1 -1
  26. package/dist/components/ui/breadcrumb.d.ts +16 -8
  27. package/dist/components/ui/breadcrumb.d.ts.map +1 -1
  28. package/dist/components/ui/breadcrumb.js +28 -35
  29. package/dist/components/ui/breadcrumb.js.map +1 -1
  30. package/dist/components/ui/button-group.d.ts +13 -0
  31. package/dist/components/ui/button-group.d.ts.map +1 -0
  32. package/dist/components/ui/button-group.js +47 -0
  33. package/dist/components/ui/button-group.js.map +1 -0
  34. package/dist/components/ui/button.d.ts +3 -2
  35. package/dist/components/ui/button.d.ts.map +1 -1
  36. package/dist/components/ui/button.js +15 -14
  37. package/dist/components/ui/button.js.map +1 -1
  38. package/dist/components/ui/calendar.js +20 -20
  39. package/dist/components/ui/calendar.js.map +1 -1
  40. package/dist/components/ui/card.d.ts +7 -8
  41. package/dist/components/ui/card.d.ts.map +1 -1
  42. package/dist/components/ui/card.js +31 -44
  43. package/dist/components/ui/card.js.map +1 -1
  44. package/dist/components/ui/carousel.d.ts +5 -6
  45. package/dist/components/ui/carousel.d.ts.map +1 -1
  46. package/dist/components/ui/carousel.js +29 -20
  47. package/dist/components/ui/carousel.js.map +1 -1
  48. package/dist/components/ui/chart.d.ts +35 -27
  49. package/dist/components/ui/chart.d.ts.map +1 -1
  50. package/dist/components/ui/chart.js +28 -26
  51. package/dist/components/ui/chart.js.map +1 -1
  52. package/dist/components/ui/checkbox.d.ts +1 -1
  53. package/dist/components/ui/checkbox.d.ts.map +1 -1
  54. package/dist/components/ui/checkbox.js +10 -12
  55. package/dist/components/ui/checkbox.js.map +1 -1
  56. package/dist/components/ui/collapsible.d.ts +2 -4
  57. package/dist/components/ui/collapsible.d.ts.map +1 -1
  58. package/dist/components/ui/collapsible.js +31 -20
  59. package/dist/components/ui/collapsible.js.map +1 -1
  60. package/dist/components/ui/command.d.ts +78 -16
  61. package/dist/components/ui/command.d.ts.map +1 -1
  62. package/dist/components/ui/command.js +47 -72
  63. package/dist/components/ui/command.js.map +1 -1
  64. package/dist/components/ui/context-menu.d.ts +21 -19
  65. package/dist/components/ui/context-menu.d.ts.map +1 -1
  66. package/dist/components/ui/context-menu.js +57 -101
  67. package/dist/components/ui/context-menu.js.map +1 -1
  68. package/dist/components/ui/dialog.d.ts +16 -12
  69. package/dist/components/ui/dialog.d.ts.map +1 -1
  70. package/dist/components/ui/dialog.js +36 -64
  71. package/dist/components/ui/dialog.js.map +1 -1
  72. package/dist/components/ui/drawer.d.ts +19 -10
  73. package/dist/components/ui/drawer.d.ts.map +1 -1
  74. package/dist/components/ui/drawer.js +32 -57
  75. package/dist/components/ui/drawer.js.map +1 -1
  76. package/dist/components/ui/dropdown-menu.d.ts +21 -19
  77. package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
  78. package/dist/components/ui/dropdown-menu.js +64 -108
  79. package/dist/components/ui/dropdown-menu.js.map +1 -1
  80. package/dist/components/ui/dropdrawer.d.ts +1 -1
  81. package/dist/components/ui/dropdrawer.d.ts.map +1 -1
  82. package/dist/components/ui/dropdrawer.js +2 -5
  83. package/dist/components/ui/dropdrawer.js.map +1 -1
  84. package/dist/components/ui/empty.d.ts +13 -0
  85. package/dist/components/ui/empty.d.ts.map +1 -0
  86. package/dist/components/ui/empty.js +65 -0
  87. package/dist/components/ui/empty.js.map +1 -0
  88. package/dist/components/ui/field.d.ts +26 -0
  89. package/dist/components/ui/field.d.ts.map +1 -0
  90. package/dist/components/ui/field.js +135 -0
  91. package/dist/components/ui/field.js.map +1 -0
  92. package/dist/components/ui/form.d.ts +5 -6
  93. package/dist/components/ui/form.d.ts.map +1 -1
  94. package/dist/components/ui/form.js +29 -28
  95. package/dist/components/ui/form.js.map +1 -1
  96. package/dist/components/ui/hover-card.d.ts +3 -3
  97. package/dist/components/ui/hover-card.d.ts.map +1 -1
  98. package/dist/components/ui/hover-card.js +11 -25
  99. package/dist/components/ui/hover-card.js.map +1 -1
  100. package/dist/components/ui/input-group.d.ts +17 -0
  101. package/dist/components/ui/input-group.d.ts.map +1 -0
  102. package/dist/components/ui/input-group.js +91 -0
  103. package/dist/components/ui/input-group.js.map +1 -0
  104. package/dist/components/ui/input-otp.d.ts +30 -7
  105. package/dist/components/ui/input-otp.d.ts.map +1 -1
  106. package/dist/components/ui/input-otp.js +22 -25
  107. package/dist/components/ui/input-otp.js.map +1 -1
  108. package/dist/components/ui/input.d.ts +1 -1
  109. package/dist/components/ui/input.d.ts.map +1 -1
  110. package/dist/components/ui/input.js +6 -7
  111. package/dist/components/ui/input.js.map +1 -1
  112. package/dist/components/ui/item.d.ts +24 -0
  113. package/dist/components/ui/item.d.ts.map +1 -0
  114. package/dist/components/ui/item.js +122 -0
  115. package/dist/components/ui/item.js.map +1 -0
  116. package/dist/components/ui/kbd.d.ts +5 -0
  117. package/dist/components/ui/kbd.d.ts.map +1 -0
  118. package/dist/components/ui/kbd.js +21 -0
  119. package/dist/components/ui/kbd.js.map +1 -0
  120. package/dist/components/ui/label.d.ts +2 -1
  121. package/dist/components/ui/label.d.ts.map +1 -1
  122. package/dist/components/ui/label.js +8 -7
  123. package/dist/components/ui/label.js.map +1 -1
  124. package/dist/components/ui/menubar.d.ts +18 -16
  125. package/dist/components/ui/menubar.d.ts.map +1 -1
  126. package/dist/components/ui/menubar.js +73 -93
  127. package/dist/components/ui/menubar.js.map +1 -1
  128. package/dist/components/ui/navigation-menu.d.ts +8 -10
  129. package/dist/components/ui/navigation-menu.d.ts.map +1 -1
  130. package/dist/components/ui/navigation-menu.js +36 -55
  131. package/dist/components/ui/navigation-menu.js.map +1 -1
  132. package/dist/components/ui/pagination.d.ts +24 -9
  133. package/dist/components/ui/pagination.d.ts.map +1 -1
  134. package/dist/components/ui/pagination.js +33 -45
  135. package/dist/components/ui/pagination.js.map +1 -1
  136. package/dist/components/ui/popover.d.ts +4 -4
  137. package/dist/components/ui/popover.d.ts.map +1 -1
  138. package/dist/components/ui/popover.js +9 -25
  139. package/dist/components/ui/popover.js.map +1 -1
  140. package/dist/components/ui/progress.d.ts +1 -1
  141. package/dist/components/ui/progress.d.ts.map +1 -1
  142. package/dist/components/ui/progress.js +5 -7
  143. package/dist/components/ui/progress.js.map +1 -1
  144. package/dist/components/ui/radio-group.d.ts +2 -2
  145. package/dist/components/ui/radio-group.d.ts.map +1 -1
  146. package/dist/components/ui/radio-group.js +16 -19
  147. package/dist/components/ui/radio-group.js.map +1 -1
  148. package/dist/components/ui/resizable.d.ts +20 -4
  149. package/dist/components/ui/resizable.d.ts.map +1 -1
  150. package/dist/components/ui/resizable.js +8 -19
  151. package/dist/components/ui/resizable.js.map +1 -1
  152. package/dist/components/ui/scroll-area.d.ts +2 -2
  153. package/dist/components/ui/scroll-area.d.ts.map +1 -1
  154. package/dist/components/ui/scroll-area.js +12 -16
  155. package/dist/components/ui/scroll-area.js.map +1 -1
  156. package/dist/components/ui/select.d.ts +10 -12
  157. package/dist/components/ui/select.d.ts.map +1 -1
  158. package/dist/components/ui/select.js +54 -77
  159. package/dist/components/ui/select.js.map +1 -1
  160. package/dist/components/ui/separator.d.ts +1 -1
  161. package/dist/components/ui/separator.d.ts.map +1 -1
  162. package/dist/components/ui/separator.js +6 -7
  163. package/dist/components/ui/separator.js.map +1 -1
  164. package/dist/components/ui/sheet.d.ts +23 -11
  165. package/dist/components/ui/sheet.d.ts.map +1 -1
  166. package/dist/components/ui/sheet.js +54 -66
  167. package/dist/components/ui/sheet.js.map +1 -1
  168. package/dist/components/ui/sidebar.d.ts +34 -38
  169. package/dist/components/ui/sidebar.d.ts.map +1 -1
  170. package/dist/components/ui/sidebar.js +116 -124
  171. package/dist/components/ui/sidebar.js.map +1 -1
  172. package/dist/components/ui/skeleton.d.ts +1 -1
  173. package/dist/components/ui/skeleton.d.ts.map +1 -1
  174. package/dist/components/ui/skeleton.js +1 -2
  175. package/dist/components/ui/skeleton.js.map +1 -1
  176. package/dist/components/ui/slider.d.ts +1 -1
  177. package/dist/components/ui/slider.d.ts.map +1 -1
  178. package/dist/components/ui/slider.js +11 -30
  179. package/dist/components/ui/slider.js.map +1 -1
  180. package/dist/components/ui/sonner.d.ts +4 -2
  181. package/dist/components/ui/sonner.d.ts.map +1 -1
  182. package/dist/components/ui/sonner.js +7 -4
  183. package/dist/components/ui/sonner.js.map +1 -1
  184. package/dist/components/ui/spinner.d.ts +4 -0
  185. package/dist/components/ui/spinner.d.ts.map +1 -0
  186. package/dist/components/ui/spinner.js +16 -0
  187. package/dist/components/ui/spinner.js.map +1 -0
  188. package/dist/components/ui/switch.d.ts +2 -2
  189. package/dist/components/ui/switch.d.ts.map +1 -1
  190. package/dist/components/ui/switch.js +7 -9
  191. package/dist/components/ui/switch.js.map +1 -1
  192. package/dist/components/ui/table.d.ts +8 -8
  193. package/dist/components/ui/table.d.ts.map +1 -1
  194. package/dist/components/ui/table.js +36 -45
  195. package/dist/components/ui/table.js.map +1 -1
  196. package/dist/components/ui/tabs.d.ts +4 -4
  197. package/dist/components/ui/tabs.d.ts.map +1 -1
  198. package/dist/components/ui/tabs.js +17 -26
  199. package/dist/components/ui/tabs.js.map +1 -1
  200. package/dist/components/ui/textarea.d.ts +1 -1
  201. package/dist/components/ui/textarea.d.ts.map +1 -1
  202. package/dist/components/ui/textarea.js +6 -7
  203. package/dist/components/ui/textarea.js.map +1 -1
  204. package/dist/components/ui/toggle-group.d.ts +8 -3
  205. package/dist/components/ui/toggle-group.d.ts.map +1 -1
  206. package/dist/components/ui/toggle-group.js +11 -15
  207. package/dist/components/ui/toggle-group.js.map +1 -1
  208. package/dist/components/ui/toggle.d.ts +4 -1
  209. package/dist/components/ui/toggle.d.ts.map +1 -1
  210. package/dist/components/ui/toggle.js +7 -8
  211. package/dist/components/ui/toggle.js.map +1 -1
  212. package/dist/components/ui/tooltip.d.ts +4 -4
  213. package/dist/components/ui/tooltip.d.ts.map +1 -1
  214. package/dist/components/ui/tooltip.js +13 -38
  215. package/dist/components/ui/tooltip.js.map +1 -1
  216. package/dist/components/ui/typewriter.d.ts.map +1 -1
  217. package/dist/components/ui/typewriter.js +2 -6
  218. package/dist/components/ui/typewriter.js.map +1 -1
  219. package/dist/index.css +839 -1126
  220. package/dist/index.css.map +1 -1
  221. package/dist/index.d.ts +9 -3
  222. package/dist/index.d.ts.map +1 -1
  223. package/dist/index.js +9 -3
  224. package/package.json +37 -2
  225. package/src/components/ui/accordion.tsx +43 -44
  226. package/src/components/ui/alert-dialog.tsx +88 -99
  227. package/src/components/ui/alert.tsx +24 -25
  228. package/src/components/ui/aspect-ratio.tsx +1 -9
  229. package/src/components/ui/avatar.tsx +33 -27
  230. package/src/components/ui/badge.tsx +8 -16
  231. package/src/components/ui/breadcrumb.tsx +70 -73
  232. package/src/components/ui/button-group.tsx +69 -0
  233. package/src/components/ui/button.tsx +18 -24
  234. package/src/components/ui/calendar.tsx +20 -20
  235. package/src/components/ui/card.tsx +52 -71
  236. package/src/components/ui/carousel.tsx +145 -133
  237. package/src/components/ui/chart.tsx +174 -182
  238. package/src/components/ui/checkbox.tsx +18 -18
  239. package/src/components/ui/collapsible.tsx +2 -26
  240. package/src/components/ui/command.tsx +101 -99
  241. package/src/components/ui/context-menu.tsx +150 -193
  242. package/src/components/ui/dialog.tsx +75 -110
  243. package/src/components/ui/drawer.tsx +74 -102
  244. package/src/components/ui/dropdown-menu.tsx +153 -200
  245. package/src/components/ui/dropdrawer.tsx +0 -5
  246. package/src/components/ui/empty.tsx +86 -0
  247. package/src/components/ui/field.tsx +199 -0
  248. package/src/components/ui/form.tsx +49 -50
  249. package/src/components/ui/hover-card.tsx +18 -37
  250. package/src/components/ui/input-group.tsx +145 -0
  251. package/src/components/ui/input-otp.tsx +49 -59
  252. package/src/components/ui/input.tsx +5 -6
  253. package/src/components/ui/item.tsx +163 -0
  254. package/src/components/ui/kbd.tsx +31 -0
  255. package/src/components/ui/label.tsx +14 -12
  256. package/src/components/ui/menubar.tsx +178 -201
  257. package/src/components/ui/navigation-menu.tsx +84 -100
  258. package/src/components/ui/pagination.tsx +75 -85
  259. package/src/components/ui/popover.tsx +19 -38
  260. package/src/components/ui/progress.tsx +15 -14
  261. package/src/components/ui/radio-group.tsx +19 -13
  262. package/src/components/ui/resizable.tsx +23 -36
  263. package/src/components/ui/scroll-area.tsx +32 -35
  264. package/src/components/ui/select.tsx +112 -127
  265. package/src/components/ui/separator.tsx +17 -19
  266. package/src/components/ui/sheet.tsx +87 -108
  267. package/src/components/ui/sidebar.tsx +276 -279
  268. package/src/components/ui/skeleton.tsx +2 -3
  269. package/src/components/ui/slider.tsx +15 -40
  270. package/src/components/ui/sonner.tsx +15 -9
  271. package/src/components/ui/spinner.tsx +18 -0
  272. package/src/components/ui/switch.tsx +18 -17
  273. package/src/components/ui/table.tsx +66 -71
  274. package/src/components/ui/tabs.tsx +36 -36
  275. package/src/components/ui/textarea.tsx +5 -4
  276. package/src/components/ui/toggle-group.tsx +21 -34
  277. package/src/components/ui/toggle.tsx +14 -16
  278. package/src/components/ui/tooltip.tsx +19 -43
  279. package/src/components/ui/typewriter.tsx +3 -4
  280. package/src/index.css +6 -6
  281. package/src/index.ts +43 -4
@@ -1,150 +1,135 @@
1
1
  "use client";
2
2
 
3
3
  import * as SelectPrimitive from "@radix-ui/react-select";
4
- import {CheckIcon, ChevronDownIcon, ChevronUpIcon} from "lucide-react";
4
+ import {Check, ChevronDown, ChevronUp} from "lucide-react";
5
5
  import * as React from "react";
6
6
 
7
7
  import {cn} from "@/lib/utilities";
8
8
 
9
- function Select({...props}: React.ComponentProps<typeof SelectPrimitive.Root>) {
10
- return (
11
- <SelectPrimitive.Root
12
- data-slot='select'
13
- {...props}
14
- />
15
- );
16
- }
9
+ const Select = SelectPrimitive.Root;
17
10
 
18
- function SelectGroup({...props}: React.ComponentProps<typeof SelectPrimitive.Group>) {
19
- return (
20
- <SelectPrimitive.Group
21
- data-slot='select-group'
22
- {...props}
23
- />
24
- );
25
- }
11
+ const SelectGroup = SelectPrimitive.Group;
26
12
 
27
- function SelectValue({...props}: React.ComponentProps<typeof SelectPrimitive.Value>) {
28
- return (
29
- <SelectPrimitive.Value
30
- data-slot='select-value'
31
- {...props}
32
- />
33
- );
34
- }
13
+ const SelectValue = SelectPrimitive.Value;
35
14
 
36
- function SelectTrigger({
37
- className,
38
- size = "default",
39
- children,
40
- ...props
41
- }: React.ComponentProps<typeof SelectPrimitive.Trigger> & {
42
- size?: "sm" | "default";
43
- }) {
44
- return (
45
- <SelectPrimitive.Trigger
46
- data-slot='select-trigger'
47
- data-size={size}
48
- className={cn(
49
- "flex w-fit items-center justify-between gap-2 rounded-md border border-neutral-200 bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-neutral-950 focus-visible:ring-[3px] focus-visible:ring-neutral-950/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-red-500 aria-invalid:ring-red-500/20 data-[placeholder]:text-neutral-500 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 dark:border-neutral-800 dark:bg-neutral-200/30 dark:dark:bg-neutral-800/30 dark:dark:hover:bg-neutral-800/50 dark:hover:bg-neutral-200/50 dark:focus-visible:border-neutral-300 dark:focus-visible:ring-neutral-300/50 dark:aria-invalid:border-red-900 dark:aria-invalid:ring-red-500/40 dark:aria-invalid:ring-red-900/20 dark:dark:aria-invalid:ring-red-900/40 dark:data-[placeholder]:text-neutral-400 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-neutral-500 dark:[&_svg:not([class*='text-'])]:text-neutral-400",
50
- className,
51
- )}
52
- {...props}>
53
- {children}
54
- <SelectPrimitive.Icon asChild>
55
- <ChevronDownIcon className='size-4 opacity-50' />
56
- </SelectPrimitive.Icon>
57
- </SelectPrimitive.Trigger>
58
- );
59
- }
15
+ const SelectTrigger = React.forwardRef<
16
+ React.ComponentRef<typeof SelectPrimitive.Trigger>,
17
+ React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>
18
+ >(({className, children, ...props}, ref) => (
19
+ <SelectPrimitive.Trigger
20
+ ref={ref}
21
+ className={cn(
22
+ "flex h-9 w-full items-center justify-between rounded-md border border-neutral-200 bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-sm ring-offset-white focus:ring-1 focus:ring-neutral-950 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[placeholder]:text-neutral-500 dark:border-neutral-800 dark:ring-offset-neutral-950 dark:focus:ring-neutral-300 dark:data-[placeholder]:text-neutral-400 [&>span]:line-clamp-1",
23
+ className,
24
+ )}
25
+ {...props}>
26
+ {children}
27
+ <SelectPrimitive.Icon asChild>
28
+ <ChevronDown className='h-4 w-4 opacity-50' />
29
+ </SelectPrimitive.Icon>
30
+ </SelectPrimitive.Trigger>
31
+ ));
32
+ SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
60
33
 
61
- function SelectContent({className, children, position = "popper", ...props}: React.ComponentProps<typeof SelectPrimitive.Content>) {
62
- return (
63
- <SelectPrimitive.Portal>
64
- <SelectPrimitive.Content
65
- data-slot='select-content'
66
- className={cn(
67
- "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-neutral-200 bg-white text-neutral-950 shadow-md dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50",
68
- position === "popper"
69
- && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
70
- className,
71
- )}
72
- position={position}
73
- {...props}>
74
- <SelectScrollUpButton />
75
- <SelectPrimitive.Viewport
76
- className={cn(
77
- "p-1",
78
- position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1",
79
- )}>
80
- {children}
81
- </SelectPrimitive.Viewport>
82
- <SelectScrollDownButton />
83
- </SelectPrimitive.Content>
84
- </SelectPrimitive.Portal>
85
- );
86
- }
34
+ const SelectScrollUpButton = React.forwardRef<
35
+ React.ComponentRef<typeof SelectPrimitive.ScrollUpButton>,
36
+ React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>
37
+ >(({className, ...props}, ref) => (
38
+ <SelectPrimitive.ScrollUpButton
39
+ ref={ref}
40
+ className={cn("flex cursor-default items-center justify-center py-1", className)}
41
+ {...props}>
42
+ <ChevronUp className='h-4 w-4' />
43
+ </SelectPrimitive.ScrollUpButton>
44
+ ));
45
+ SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
87
46
 
88
- function SelectLabel({className, ...props}: React.ComponentProps<typeof SelectPrimitive.Label>) {
89
- return (
90
- <SelectPrimitive.Label
91
- data-slot='select-label'
92
- className={cn("px-2 py-1.5 text-xs text-neutral-500 dark:text-neutral-400", className)}
93
- {...props}
94
- />
95
- );
96
- }
47
+ const SelectScrollDownButton = React.forwardRef<
48
+ React.ComponentRef<typeof SelectPrimitive.ScrollDownButton>,
49
+ React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>
50
+ >(({className, ...props}, ref) => (
51
+ <SelectPrimitive.ScrollDownButton
52
+ ref={ref}
53
+ className={cn("flex cursor-default items-center justify-center py-1", className)}
54
+ {...props}>
55
+ <ChevronDown className='h-4 w-4' />
56
+ </SelectPrimitive.ScrollDownButton>
57
+ ));
58
+ SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
97
59
 
98
- function SelectItem({className, children, ...props}: React.ComponentProps<typeof SelectPrimitive.Item>) {
99
- return (
100
- <SelectPrimitive.Item
101
- data-slot='select-item'
60
+ const SelectContent = React.forwardRef<
61
+ React.ComponentRef<typeof SelectPrimitive.Content>,
62
+ React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>
63
+ >(({className, children, position = "popper", ...props}, ref) => (
64
+ <SelectPrimitive.Portal>
65
+ <SelectPrimitive.Content
66
+ ref={ref}
102
67
  className={cn(
103
- "relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-neutral-100 focus:text-neutral-900 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 dark:focus:bg-neutral-800 dark:focus:text-neutral-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-neutral-500 dark:[&_svg:not([class*='text-'])]:text-neutral-400 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
68
+ "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] origin-[--radix-select-content-transform-origin] overflow-x-hidden overflow-y-auto rounded-md border border-neutral-200 bg-white text-neutral-950 shadow-md dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50",
69
+ position === "popper"
70
+ && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
104
71
  className,
105
72
  )}
73
+ position={position}
106
74
  {...props}>
107
- <span className='absolute right-2 flex size-3.5 items-center justify-center'>
108
- <SelectPrimitive.ItemIndicator>
109
- <CheckIcon className='size-4' />
110
- </SelectPrimitive.ItemIndicator>
111
- </span>
112
- <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>
113
- </SelectPrimitive.Item>
114
- );
115
- }
75
+ <SelectScrollUpButton />
76
+ <SelectPrimitive.Viewport
77
+ className={cn(
78
+ "p-1",
79
+ position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]",
80
+ )}>
81
+ {children}
82
+ </SelectPrimitive.Viewport>
83
+ <SelectScrollDownButton />
84
+ </SelectPrimitive.Content>
85
+ </SelectPrimitive.Portal>
86
+ ));
87
+ SelectContent.displayName = SelectPrimitive.Content.displayName;
116
88
 
117
- function SelectSeparator({className, ...props}: React.ComponentProps<typeof SelectPrimitive.Separator>) {
118
- return (
119
- <SelectPrimitive.Separator
120
- data-slot='select-separator'
121
- className={cn("pointer-events-none -mx-1 my-1 h-px bg-neutral-200 dark:bg-neutral-800", className)}
122
- {...props}
123
- />
124
- );
125
- }
89
+ const SelectLabel = React.forwardRef<
90
+ React.ComponentRef<typeof SelectPrimitive.Label>,
91
+ React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>
92
+ >(({className, ...props}, ref) => (
93
+ <SelectPrimitive.Label
94
+ ref={ref}
95
+ className={cn("px-2 py-1.5 text-sm font-semibold", className)}
96
+ {...props}
97
+ />
98
+ ));
99
+ SelectLabel.displayName = SelectPrimitive.Label.displayName;
126
100
 
127
- function SelectScrollUpButton({className, ...props}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {
128
- return (
129
- <SelectPrimitive.ScrollUpButton
130
- data-slot='select-scroll-up-button'
131
- className={cn("flex cursor-default items-center justify-center py-1", className)}
132
- {...props}>
133
- <ChevronUpIcon className='size-4' />
134
- </SelectPrimitive.ScrollUpButton>
135
- );
136
- }
101
+ const SelectItem = React.forwardRef<
102
+ React.ComponentRef<typeof SelectPrimitive.Item>,
103
+ React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>
104
+ >(({className, children, ...props}, ref) => (
105
+ <SelectPrimitive.Item
106
+ ref={ref}
107
+ className={cn(
108
+ "relative flex w-full cursor-default items-center rounded-sm py-1.5 pr-8 pl-2 text-sm outline-none select-none focus:bg-neutral-100 focus:text-neutral-900 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 dark:focus:bg-neutral-800 dark:focus:text-neutral-50",
109
+ className,
110
+ )}
111
+ {...props}>
112
+ <span className='absolute right-2 flex h-3.5 w-3.5 items-center justify-center'>
113
+ <SelectPrimitive.ItemIndicator>
114
+ <Check className='h-4 w-4' />
115
+ </SelectPrimitive.ItemIndicator>
116
+ </span>
117
+ <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>
118
+ </SelectPrimitive.Item>
119
+ ));
120
+ SelectItem.displayName = SelectPrimitive.Item.displayName;
137
121
 
138
- function SelectScrollDownButton({className, ...props}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {
139
- return (
140
- <SelectPrimitive.ScrollDownButton
141
- data-slot='select-scroll-down-button'
142
- className={cn("flex cursor-default items-center justify-center py-1", className)}
143
- {...props}>
144
- <ChevronDownIcon className='size-4' />
145
- </SelectPrimitive.ScrollDownButton>
146
- );
147
- }
122
+ const SelectSeparator = React.forwardRef<
123
+ React.ComponentRef<typeof SelectPrimitive.Separator>,
124
+ React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>
125
+ >(({className, ...props}, ref) => (
126
+ <SelectPrimitive.Separator
127
+ ref={ref}
128
+ className={cn("-mx-1 my-1 h-px bg-neutral-100 dark:bg-neutral-800", className)}
129
+ {...props}
130
+ />
131
+ ));
132
+ SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
148
133
 
149
134
  export {
150
135
  Select,
@@ -5,24 +5,22 @@ import * as React from "react";
5
5
 
6
6
  import {cn} from "@/lib/utilities";
7
7
 
8
- function Separator({
9
- className,
10
- orientation = "horizontal",
11
- decorative = true,
12
- ...props
13
- }: React.ComponentProps<typeof SeparatorPrimitive.Root>) {
14
- return (
15
- <SeparatorPrimitive.Root
16
- data-slot='separator'
17
- decorative={decorative}
18
- orientation={orientation}
19
- className={cn(
20
- "shrink-0 bg-neutral-200 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px dark:bg-neutral-800",
21
- className,
22
- )}
23
- {...props}
24
- />
25
- );
26
- }
8
+ const Separator = React.forwardRef<
9
+ React.ComponentRef<typeof SeparatorPrimitive.Root>,
10
+ React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>
11
+ >(({className, orientation = "horizontal", decorative = true, ...props}, ref) => (
12
+ <SeparatorPrimitive.Root
13
+ ref={ref}
14
+ decorative={decorative}
15
+ orientation={orientation}
16
+ className={cn(
17
+ "shrink-0 bg-neutral-200 dark:bg-neutral-800",
18
+ orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
19
+ className,
20
+ )}
21
+ {...props}
22
+ />
23
+ ));
24
+ Separator.displayName = SeparatorPrimitive.Root.displayName;
27
25
 
28
26
  export {Separator};
@@ -1,133 +1,112 @@
1
1
  "use client";
2
2
 
3
3
  import * as SheetPrimitive from "@radix-ui/react-dialog";
4
- import {XIcon} from "lucide-react";
4
+ import {cva, type VariantProps} from "class-variance-authority";
5
+ import {X} from "lucide-react";
5
6
  import * as React from "react";
6
7
 
7
8
  import {cn} from "@/lib/utilities";
8
9
 
9
- function Sheet({...props}: React.ComponentProps<typeof SheetPrimitive.Root>) {
10
- return (
11
- <SheetPrimitive.Root
12
- data-slot='sheet'
13
- {...props}
14
- />
15
- );
16
- }
10
+ const Sheet = SheetPrimitive.Root;
17
11
 
18
- function SheetTrigger({...props}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {
19
- return (
20
- <SheetPrimitive.Trigger
21
- data-slot='sheet-trigger'
22
- {...props}
23
- />
24
- );
25
- }
12
+ const SheetTrigger = SheetPrimitive.Trigger;
26
13
 
27
- function SheetClose({...props}: React.ComponentProps<typeof SheetPrimitive.Close>) {
28
- return (
29
- <SheetPrimitive.Close
30
- data-slot='sheet-close'
31
- {...props}
32
- />
33
- );
34
- }
14
+ const SheetClose = SheetPrimitive.Close;
35
15
 
36
- function SheetPortal({...props}: React.ComponentProps<typeof SheetPrimitive.Portal>) {
37
- return (
38
- <SheetPrimitive.Portal
39
- data-slot='sheet-portal'
40
- {...props}
41
- />
42
- );
43
- }
16
+ const SheetPortal = SheetPrimitive.Portal;
44
17
 
45
- function SheetOverlay({className, ...props}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {
46
- return (
47
- <SheetPrimitive.Overlay
48
- data-slot='sheet-overlay'
49
- className={cn(
50
- "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
51
- className,
52
- )}
53
- {...props}
54
- />
55
- );
56
- }
18
+ const SheetOverlay = React.forwardRef<
19
+ React.ComponentRef<typeof SheetPrimitive.Overlay>,
20
+ React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>
21
+ >(({className, ...props}, ref) => (
22
+ <SheetPrimitive.Overlay
23
+ className={cn(
24
+ "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80",
25
+ className,
26
+ )}
27
+ {...props}
28
+ ref={ref}
29
+ />
30
+ ));
31
+ SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
57
32
 
58
- function SheetContent({
59
- className,
60
- children,
61
- side = "right",
62
- ...props
63
- }: React.ComponentProps<typeof SheetPrimitive.Content> & {
64
- side?: "top" | "right" | "bottom" | "left";
65
- }) {
66
- return (
33
+ const sheetVariants = cva(
34
+ "fixed z-50 gap-4 bg-white p-6 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 data-[state=open]:animate-in data-[state=closed]:animate-out dark:bg-neutral-950",
35
+ {
36
+ variants: {
37
+ side: {
38
+ top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
39
+ bottom: "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
40
+ left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
41
+ right:
42
+ "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm",
43
+ },
44
+ },
45
+ defaultVariants: {
46
+ side: "right",
47
+ },
48
+ },
49
+ );
50
+
51
+ interface SheetContentProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>, VariantProps<typeof sheetVariants> {}
52
+
53
+ const SheetContent = React.forwardRef<React.ComponentRef<typeof SheetPrimitive.Content>, SheetContentProps>(
54
+ ({side = "right", className, children, ...props}, ref) => (
67
55
  <SheetPortal>
68
56
  <SheetOverlay />
69
57
  <SheetPrimitive.Content
70
- data-slot='sheet-content'
71
- className={cn(
72
- "data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 bg-white shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 dark:bg-neutral-950",
73
- side === "right"
74
- && "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm",
75
- side === "left"
76
- && "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm",
77
- side === "top" && "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b",
78
- side === "bottom"
79
- && "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t",
80
- className,
81
- )}
58
+ ref={ref}
59
+ className={cn(sheetVariants({side}), className)}
82
60
  {...props}>
83
- {children}
84
- <SheetPrimitive.Close className='absolute top-4 right-4 rounded-xs opacity-70 ring-offset-white transition-opacity hover:opacity-100 focus:ring-2 focus:ring-neutral-950 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-neutral-100 dark:ring-offset-neutral-950 dark:focus:ring-neutral-300 dark:data-[state=open]:bg-neutral-800'>
85
- <XIcon className='size-4' />
61
+ <SheetPrimitive.Close className='absolute top-4 right-4 rounded-sm opacity-70 ring-offset-white transition-opacity hover:opacity-100 focus:ring-2 focus:ring-neutral-950 focus:ring-offset-2 focus:outline-none disabled:pointer-events-none data-[state=open]:bg-neutral-100 dark:ring-offset-neutral-950 dark:focus:ring-neutral-300 dark:data-[state=open]:bg-neutral-800'>
62
+ <X className='h-4 w-4' />
86
63
  <span className='sr-only'>Close</span>
87
64
  </SheetPrimitive.Close>
65
+ {children}
88
66
  </SheetPrimitive.Content>
89
67
  </SheetPortal>
90
- );
91
- }
68
+ ),
69
+ );
70
+ SheetContent.displayName = SheetPrimitive.Content.displayName;
92
71
 
93
- function SheetHeader({className, ...props}: React.ComponentProps<"div">) {
94
- return (
95
- <div
96
- data-slot='sheet-header'
97
- className={cn("flex flex-col gap-1.5 p-4", className)}
98
- {...props}
99
- />
100
- );
101
- }
72
+ const SheetHeader = ({className, ...props}: React.HTMLAttributes<HTMLDivElement>) => (
73
+ <div
74
+ className={cn("flex flex-col space-y-2 text-center sm:text-left", className)}
75
+ {...props}
76
+ />
77
+ );
78
+ SheetHeader.displayName = "SheetHeader";
102
79
 
103
- function SheetFooter({className, ...props}: React.ComponentProps<"div">) {
104
- return (
105
- <div
106
- data-slot='sheet-footer'
107
- className={cn("mt-auto flex flex-col gap-2 p-4", className)}
108
- {...props}
109
- />
110
- );
111
- }
80
+ const SheetFooter = ({className, ...props}: React.HTMLAttributes<HTMLDivElement>) => (
81
+ <div
82
+ className={cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className)}
83
+ {...props}
84
+ />
85
+ );
86
+ SheetFooter.displayName = "SheetFooter";
112
87
 
113
- function SheetTitle({className, ...props}: React.ComponentProps<typeof SheetPrimitive.Title>) {
114
- return (
115
- <SheetPrimitive.Title
116
- data-slot='sheet-title'
117
- className={cn("font-semibold text-neutral-950 dark:text-neutral-50", className)}
118
- {...props}
119
- />
120
- );
121
- }
88
+ const SheetTitle = React.forwardRef<
89
+ React.ComponentRef<typeof SheetPrimitive.Title>,
90
+ React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>
91
+ >(({className, ...props}, ref) => (
92
+ <SheetPrimitive.Title
93
+ ref={ref}
94
+ className={cn("text-lg font-semibold text-neutral-950 dark:text-neutral-50", className)}
95
+ {...props}
96
+ />
97
+ ));
98
+ SheetTitle.displayName = SheetPrimitive.Title.displayName;
122
99
 
123
- function SheetDescription({className, ...props}: React.ComponentProps<typeof SheetPrimitive.Description>) {
124
- return (
125
- <SheetPrimitive.Description
126
- data-slot='sheet-description'
127
- className={cn("text-sm text-neutral-500 dark:text-neutral-400", className)}
128
- {...props}
129
- />
130
- );
131
- }
100
+ const SheetDescription = React.forwardRef<
101
+ React.ComponentRef<typeof SheetPrimitive.Description>,
102
+ React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>
103
+ >(({className, ...props}, ref) => (
104
+ <SheetPrimitive.Description
105
+ ref={ref}
106
+ className={cn("text-sm text-neutral-500 dark:text-neutral-400", className)}
107
+ {...props}
108
+ />
109
+ ));
110
+ SheetDescription.displayName = SheetPrimitive.Description.displayName;
132
111
 
133
- export {Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger};
112
+ export {Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger};