@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
@@ -3,11 +3,10 @@
3
3
  import {cn} from "@/lib/utilities";
4
4
  import * as React from "react";
5
5
 
6
- function Skeleton({className, ...props}: React.ComponentProps<"div">) {
6
+ function Skeleton({className, ...props}: Readonly<React.HTMLAttributes<HTMLDivElement>>) {
7
7
  return (
8
8
  <div
9
- data-slot='skeleton'
10
- className={cn("animate-pulse rounded-md bg-neutral-100 dark:bg-neutral-800", className)}
9
+ className={cn("animate-pulse rounded-md bg-neutral-900/10 dark:bg-neutral-50/10", className)}
11
10
  {...props}
12
11
  />
13
12
  );
@@ -5,45 +5,20 @@ import * as React from "react";
5
5
 
6
6
  import {cn} from "@/lib/utilities";
7
7
 
8
- function Slider({className, defaultValue, value, min = 0, max = 100, ...props}: React.ComponentProps<typeof SliderPrimitive.Root>) {
9
- const _values = React.useMemo(
10
- () => (Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max]),
11
- [value, defaultValue, min, max],
12
- );
13
-
14
- return (
15
- <SliderPrimitive.Root
16
- data-slot='slider'
17
- defaultValue={defaultValue}
18
- value={value}
19
- min={min}
20
- max={max}
21
- className={cn(
22
- "relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col",
23
- className,
24
- )}
25
- {...props}>
26
- <SliderPrimitive.Track
27
- data-slot='slider-track'
28
- className={cn(
29
- "relative grow overflow-hidden rounded-full bg-neutral-100 data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5 dark:bg-neutral-800",
30
- )}>
31
- <SliderPrimitive.Range
32
- data-slot='slider-range'
33
- className={cn(
34
- "absolute bg-neutral-900 data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full dark:bg-neutral-50",
35
- )}
36
- />
37
- </SliderPrimitive.Track>
38
- {Array.from({length: _values.length}, (_, index) => (
39
- <SliderPrimitive.Thumb
40
- data-slot='slider-thumb'
41
- key={index}
42
- className='block size-4 shrink-0 rounded-full border border-neutral-200 border-neutral-900 bg-white shadow-sm ring-neutral-950/50 transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50 dark:border-neutral-50 dark:border-neutral-800 dark:bg-neutral-950 dark:ring-neutral-300/50'
43
- />
44
- ))}
45
- </SliderPrimitive.Root>
46
- );
47
- }
8
+ const Slider = React.forwardRef<
9
+ React.ComponentRef<typeof SliderPrimitive.Root>,
10
+ React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root>
11
+ >(({className, ...props}, ref) => (
12
+ <SliderPrimitive.Root
13
+ ref={ref}
14
+ className={cn("relative flex w-full touch-none items-center select-none", className)}
15
+ {...props}>
16
+ <SliderPrimitive.Track className='relative h-1.5 w-full grow overflow-hidden rounded-full bg-neutral-900/20 dark:bg-neutral-50/20'>
17
+ <SliderPrimitive.Range className='absolute h-full bg-neutral-900 dark:bg-neutral-50' />
18
+ </SliderPrimitive.Track>
19
+ <SliderPrimitive.Thumb className='block h-4 w-4 rounded-full border border-neutral-200 border-neutral-900/50 bg-white shadow transition-colors focus-visible:ring-1 focus-visible:ring-neutral-950 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 dark:border-neutral-50/50 dark:border-neutral-800 dark:bg-neutral-950 dark:focus-visible:ring-neutral-300' />
20
+ </SliderPrimitive.Root>
21
+ ));
22
+ Slider.displayName = SliderPrimitive.Root.displayName;
48
23
 
49
24
  export {Slider};
@@ -2,7 +2,9 @@
2
2
 
3
3
  import {useTheme} from "next-themes";
4
4
  import * as React from "react";
5
- import {Toaster as Sonner, ToasterProps, toast} from "sonner";
5
+ import {Toaster as Sonner, toast} from "sonner";
6
+
7
+ type ToasterProps = React.ComponentProps<typeof Sonner>;
6
8
 
7
9
  const Toaster = ({...props}: ToasterProps) => {
8
10
  const {theme = "system"} = useTheme();
@@ -11,20 +13,24 @@ const Toaster = ({...props}: ToasterProps) => {
11
13
  <Sonner
12
14
  theme={theme as ToasterProps["theme"]}
13
15
  className='toaster group'
14
- style={
15
- {
16
- "--normal-bg": "var(--popover)",
17
- "--normal-text": "var(--popover-foreground)",
18
- "--normal-border": "var(--border)",
19
- } as React.CSSProperties
20
- }
16
+ toastOptions={{
17
+ classNames: {
18
+ toast:
19
+ "group toast group-[.toaster]:bg-white group-[.toaster]:text-neutral-950 group-[.toaster]:border-neutral-200 group-[.toaster]:shadow-lg dark:group-[.toaster]:bg-neutral-950 dark:group-[.toaster]:text-neutral-50 dark:group-[.toaster]:border-neutral-800",
20
+ description: "group-[.toast]:text-neutral-500 dark:group-[.toast]:text-neutral-400",
21
+ actionButton:
22
+ "group-[.toast]:bg-neutral-900 group-[.toast]:text-neutral-50 dark:group-[.toast]:bg-neutral-50 dark:group-[.toast]:text-neutral-900",
23
+ cancelButton:
24
+ "group-[.toast]:bg-neutral-100 group-[.toast]:text-neutral-500 dark:group-[.toast]:bg-neutral-800 dark:group-[.toast]:text-neutral-400",
25
+ },
26
+ }}
21
27
  {...props}
22
28
  />
23
29
  );
24
30
  };
25
31
 
26
32
  export {
27
- Toaster,
28
33
  // eslint-disable-next-line unicorn/prefer-export-from -- same export style.
29
34
  toast,
35
+ Toaster,
30
36
  };
@@ -0,0 +1,18 @@
1
+ "use client";
2
+
3
+ import {cn} from "@/lib/utilities";
4
+ import {Loader2Icon} from "lucide-react";
5
+ import * as React from "react";
6
+
7
+ function Spinner({className, ...props}: React.ComponentProps<"svg">) {
8
+ return (
9
+ <Loader2Icon
10
+ role='status'
11
+ aria-label='Loading'
12
+ className={cn("size-4 animate-spin", className)}
13
+ {...props}
14
+ />
15
+ );
16
+ }
17
+
18
+ export {Spinner};
@@ -1,27 +1,28 @@
1
1
  "use client";
2
2
 
3
- import * as SwitchPrimitive from "@radix-ui/react-switch";
3
+ import * as SwitchPrimitives from "@radix-ui/react-switch";
4
4
  import * as React from "react";
5
5
 
6
6
  import {cn} from "@/lib/utilities";
7
7
 
8
- function Switch({className, ...props}: React.ComponentProps<typeof SwitchPrimitive.Root>) {
9
- return (
10
- <SwitchPrimitive.Root
11
- data-slot='switch'
8
+ const Switch = React.forwardRef<
9
+ React.ComponentRef<typeof SwitchPrimitives.Root>,
10
+ React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>
11
+ >(({className, ...props}, ref) => (
12
+ <SwitchPrimitives.Root
13
+ className={cn(
14
+ "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:ring-2 focus-visible:ring-neutral-950 focus-visible:ring-offset-2 focus-visible:ring-offset-white focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-neutral-900 data-[state=unchecked]:bg-neutral-200 dark:focus-visible:ring-neutral-300 dark:focus-visible:ring-offset-neutral-950 dark:data-[state=checked]:bg-neutral-50 dark:data-[state=unchecked]:bg-neutral-800",
15
+ className,
16
+ )}
17
+ {...props}
18
+ ref={ref}>
19
+ <SwitchPrimitives.Thumb
12
20
  className={cn(
13
- "peer inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-neutral-200 border-transparent shadow-xs transition-all outline-none focus-visible:border-neutral-950 focus-visible:ring-[3px] focus-visible:ring-neutral-950/50 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-neutral-900 data-[state=unchecked]:bg-neutral-200 dark:border-neutral-800 dark:focus-visible:border-neutral-300 dark:focus-visible:ring-neutral-300/50 dark:data-[state=checked]:bg-neutral-50 dark:dark:data-[state=unchecked]:bg-neutral-800/80 dark:data-[state=unchecked]:bg-neutral-200/80 dark:data-[state=unchecked]:bg-neutral-800",
14
- className,
21
+ "pointer-events-none block h-4 w-4 rounded-full bg-white shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0 dark:bg-neutral-950",
15
22
  )}
16
- {...props}>
17
- <SwitchPrimitive.Thumb
18
- data-slot='switch-thumb'
19
- className={cn(
20
- "pointer-events-none block size-4 rounded-full bg-white ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 dark:bg-neutral-950 dark:dark:data-[state=checked]:bg-neutral-900 dark:data-[state=checked]:bg-neutral-50 dark:dark:data-[state=unchecked]:bg-neutral-50 dark:data-[state=unchecked]:bg-neutral-950",
21
- )}
22
- />
23
- </SwitchPrimitive.Root>
24
- );
25
- }
23
+ />
24
+ </SwitchPrimitives.Root>
25
+ ));
26
+ Switch.displayName = SwitchPrimitives.Root.displayName;
26
27
 
27
28
  export {Switch};
@@ -4,95 +4,90 @@ import * as React from "react";
4
4
 
5
5
  import {cn} from "@/lib/utilities";
6
6
 
7
- function Table({className, ...props}: React.ComponentProps<"table">) {
8
- return (
9
- <div
10
- data-slot='table-container'
11
- className='relative w-full overflow-x-auto'>
12
- {/* eslint-disable-next-line sonarjs/table-header */}
13
- <table
14
- data-slot='table'
15
- className={cn("w-full caption-bottom text-sm", className)}
16
- {...props}
17
- />
18
- </div>
19
- );
20
- }
7
+ const Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement>>(({className, ...props}, ref) => (
8
+ <div className='relative w-full overflow-auto'>
9
+ <table
10
+ ref={ref}
11
+ className={cn("w-full caption-bottom text-sm", className)}
12
+ {...props}
13
+ />
14
+ </div>
15
+ ));
16
+ Table.displayName = "Table";
21
17
 
22
- function TableHeader({className, ...props}: React.ComponentProps<"thead">) {
23
- return (
18
+ const TableHeader = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(
19
+ ({className, ...props}, ref) => (
24
20
  <thead
25
- data-slot='table-header'
21
+ ref={ref}
26
22
  className={cn("[&_tr]:border-b", className)}
27
23
  {...props}
28
24
  />
29
- );
30
- }
25
+ ),
26
+ );
27
+ TableHeader.displayName = "TableHeader";
31
28
 
32
- function TableBody({className, ...props}: React.ComponentProps<"tbody">) {
33
- return (
34
- <tbody
35
- data-slot='table-body'
36
- className={cn("[&_tr:last-child]:border-0", className)}
37
- {...props}
38
- />
39
- );
40
- }
29
+ const TableBody = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(({className, ...props}, ref) => (
30
+ <tbody
31
+ ref={ref}
32
+ className={cn("[&_tr:last-child]:border-0", className)}
33
+ {...props}
34
+ />
35
+ ));
36
+ TableBody.displayName = "TableBody";
41
37
 
42
- function TableFooter({className, ...props}: React.ComponentProps<"tfoot">) {
43
- return (
38
+ const TableFooter = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(
39
+ ({className, ...props}, ref) => (
44
40
  <tfoot
45
- data-slot='table-footer'
41
+ ref={ref}
46
42
  className={cn("border-t bg-neutral-100/50 font-medium dark:bg-neutral-800/50 [&>tr]:last:border-b-0", className)}
47
43
  {...props}
48
44
  />
49
- );
50
- }
45
+ ),
46
+ );
47
+ TableFooter.displayName = "TableFooter";
51
48
 
52
- function TableRow({className, ...props}: React.ComponentProps<"tr">) {
53
- return (
54
- <tr
55
- data-slot='table-row'
56
- className={cn(
57
- "border-b transition-colors hover:bg-neutral-100/50 data-[state=selected]:bg-neutral-100 dark:hover:bg-neutral-800/50 dark:data-[state=selected]:bg-neutral-800",
58
- className,
59
- )}
60
- {...props}
61
- />
62
- );
63
- }
49
+ const TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement>>(({className, ...props}, ref) => (
50
+ <tr
51
+ ref={ref}
52
+ className={cn(
53
+ "border-b transition-colors hover:bg-neutral-100/50 data-[state=selected]:bg-neutral-100 dark:hover:bg-neutral-800/50 dark:data-[state=selected]:bg-neutral-800",
54
+ className,
55
+ )}
56
+ {...props}
57
+ />
58
+ ));
59
+ TableRow.displayName = "TableRow";
64
60
 
65
- function TableHead({className, ...props}: React.ComponentProps<"th">) {
66
- return (
67
- <th
68
- data-slot='table-head'
69
- className={cn(
70
- "h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-neutral-950 dark:text-neutral-50 [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
71
- className,
72
- )}
73
- {...props}
74
- />
75
- );
76
- }
61
+ const TableHead = React.forwardRef<HTMLTableCellElement, React.ThHTMLAttributes<HTMLTableCellElement>>(({className, ...props}, ref) => (
62
+ <th
63
+ ref={ref}
64
+ className={cn(
65
+ "h-10 px-2 text-left align-middle font-medium text-neutral-500 dark:text-neutral-400 [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
66
+ className,
67
+ )}
68
+ {...props}
69
+ />
70
+ ));
71
+ TableHead.displayName = "TableHead";
77
72
 
78
- function TableCell({className, ...props}: React.ComponentProps<"td">) {
79
- return (
80
- <td
81
- data-slot='table-cell'
82
- className={cn("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]", className)}
83
- {...props}
84
- />
85
- );
86
- }
73
+ const TableCell = React.forwardRef<HTMLTableCellElement, React.TdHTMLAttributes<HTMLTableCellElement>>(({className, ...props}, ref) => (
74
+ <td
75
+ ref={ref}
76
+ className={cn("p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]", className)}
77
+ {...props}
78
+ />
79
+ ));
80
+ TableCell.displayName = "TableCell";
87
81
 
88
- function TableCaption({className, ...props}: React.ComponentProps<"caption">) {
89
- return (
82
+ const TableCaption = React.forwardRef<HTMLTableCaptionElement, React.HTMLAttributes<HTMLTableCaptionElement>>(
83
+ ({className, ...props}, ref) => (
90
84
  <caption
91
- data-slot='table-caption'
85
+ ref={ref}
92
86
  className={cn("mt-4 text-sm text-neutral-500 dark:text-neutral-400", className)}
93
87
  {...props}
94
88
  />
95
- );
96
- }
89
+ ),
90
+ );
91
+ TableCaption.displayName = "TableCaption";
97
92
 
98
93
  export {Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow};
@@ -5,50 +5,50 @@ import * as React from "react";
5
5
 
6
6
  import {cn} from "@/lib/utilities";
7
7
 
8
- function Tabs({className, ...props}: React.ComponentProps<typeof TabsPrimitive.Root>) {
9
- return (
10
- <TabsPrimitive.Root
11
- data-slot='tabs'
12
- className={cn("flex flex-col gap-2", className)}
13
- {...props}
14
- />
15
- );
16
- }
8
+ const Tabs = TabsPrimitive.Root;
17
9
 
18
- function TabsList({className, ...props}: React.ComponentProps<typeof TabsPrimitive.List>) {
19
- return (
10
+ const TabsList = React.forwardRef<React.ComponentRef<typeof TabsPrimitive.List>, React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>>(
11
+ ({className, ...props}, ref) => (
20
12
  <TabsPrimitive.List
21
- data-slot='tabs-list'
13
+ ref={ref}
22
14
  className={cn(
23
- "inline-flex h-9 w-fit items-center justify-center rounded-lg bg-neutral-100 p-[3px] text-neutral-500 dark:bg-neutral-800 dark:text-neutral-400",
15
+ "inline-flex h-9 items-center justify-center rounded-lg bg-neutral-100 p-1 text-neutral-500 dark:bg-neutral-800 dark:text-neutral-400",
24
16
  className,
25
17
  )}
26
18
  {...props}
27
19
  />
28
- );
29
- }
20
+ ),
21
+ );
22
+ TabsList.displayName = TabsPrimitive.List.displayName;
30
23
 
31
- function TabsTrigger({className, ...props}: React.ComponentProps<typeof TabsPrimitive.Trigger>) {
32
- return (
33
- <TabsPrimitive.Trigger
34
- data-slot='tabs-trigger'
35
- className={cn(
36
- "focus-visible:outline-ring inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-neutral-200 border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap text-neutral-950 transition-[color,box-shadow] focus-visible:border-neutral-950 focus-visible:ring-[3px] focus-visible:ring-neutral-950/50 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-white data-[state=active]:shadow-sm dark:border-neutral-800 dark:dark:text-neutral-400 dark:text-neutral-50 dark:text-neutral-500 dark:focus-visible:border-neutral-300 dark:focus-visible:ring-neutral-300/50 dark:dark:data-[state=active]:border-neutral-800 dark:data-[state=active]:border-neutral-200 dark:dark:data-[state=active]:bg-neutral-800/30 dark:data-[state=active]:bg-neutral-200/30 dark:data-[state=active]:bg-neutral-950 dark:dark:data-[state=active]:text-neutral-50 dark:data-[state=active]:text-neutral-950 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
37
- className,
38
- )}
39
- {...props}
40
- />
41
- );
42
- }
24
+ const TabsTrigger = React.forwardRef<
25
+ React.ComponentRef<typeof TabsPrimitive.Trigger>,
26
+ React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>
27
+ >(({className, ...props}, ref) => (
28
+ <TabsPrimitive.Trigger
29
+ ref={ref}
30
+ className={cn(
31
+ "inline-flex items-center justify-center rounded-md px-3 py-1 text-sm font-medium whitespace-nowrap ring-offset-white transition-all focus-visible:ring-2 focus-visible:ring-neutral-950 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-white data-[state=active]:text-neutral-950 data-[state=active]:shadow dark:ring-offset-neutral-950 dark:focus-visible:ring-neutral-300 dark:data-[state=active]:bg-neutral-950 dark:data-[state=active]:text-neutral-50",
32
+ className,
33
+ )}
34
+ {...props}
35
+ />
36
+ ));
37
+ TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
43
38
 
44
- function TabsContent({className, ...props}: React.ComponentProps<typeof TabsPrimitive.Content>) {
45
- return (
46
- <TabsPrimitive.Content
47
- data-slot='tabs-content'
48
- className={cn("flex-1 outline-none", className)}
49
- {...props}
50
- />
51
- );
52
- }
39
+ const TabsContent = React.forwardRef<
40
+ React.ComponentRef<typeof TabsPrimitive.Content>,
41
+ React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>
42
+ >(({className, ...props}, ref) => (
43
+ <TabsPrimitive.Content
44
+ ref={ref}
45
+ className={cn(
46
+ "mt-2 ring-offset-white focus-visible:ring-2 focus-visible:ring-neutral-950 focus-visible:ring-offset-2 focus-visible:outline-none dark:ring-offset-neutral-950 dark:focus-visible:ring-neutral-300",
47
+ className,
48
+ )}
49
+ {...props}
50
+ />
51
+ ));
52
+ TabsContent.displayName = TabsPrimitive.Content.displayName;
53
53
 
54
54
  export {Tabs, TabsContent, TabsList, TabsTrigger};
@@ -4,17 +4,18 @@ import * as React from "react";
4
4
 
5
5
  import {cn} from "@/lib/utilities";
6
6
 
7
- function Textarea({className, ...props}: Readonly<React.ComponentProps<"textarea">>) {
7
+ const Textarea = React.forwardRef<HTMLTextAreaElement, React.ComponentProps<"textarea">>(({className, ...props}, ref) => {
8
8
  return (
9
9
  <textarea
10
- data-slot='textarea'
11
10
  className={cn(
12
- "flex field-sizing-content min-h-16 w-full rounded-md border border-neutral-200 bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none placeholder:text-neutral-500 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 md:text-sm dark:border-neutral-800 dark:bg-neutral-200/30 dark:dark:bg-neutral-800/30 dark:placeholder:text-neutral-400 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",
11
+ "flex min-h-[60px] w-full rounded-md border border-neutral-200 bg-transparent px-3 py-2 text-base shadow-sm placeholder:text-neutral-500 focus-visible:ring-1 focus-visible:ring-neutral-950 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:border-neutral-800 dark:placeholder:text-neutral-400 dark:focus-visible:ring-neutral-300",
13
12
  className,
14
13
  )}
14
+ ref={ref}
15
15
  {...props}
16
16
  />
17
17
  );
18
- }
18
+ });
19
+ Textarea.displayName = "Textarea";
19
20
 
20
21
  export {Textarea};
@@ -12,55 +12,42 @@ const ToggleGroupContext = React.createContext<VariantProps<typeof toggleVariant
12
12
  variant: "default",
13
13
  });
14
14
 
15
- function ToggleGroup({
16
- className,
17
- variant,
18
- size,
19
- children,
20
- ...props
21
- }: Readonly<React.ComponentProps<typeof ToggleGroupPrimitive.Root> & VariantProps<typeof toggleVariants>>) {
22
- return (
23
- <ToggleGroupPrimitive.Root
24
- data-slot='toggle-group'
25
- data-variant={variant}
26
- data-size={size}
27
- className={cn("group/toggle-group flex w-fit items-center rounded-md data-[variant=outline]:shadow-xs", className)}
28
- {...props}>
29
- <ToggleGroupContext.Provider
30
- // eslint-disable-next-line react/jsx-no-constructed-context-values -- not applicable.
31
- value={{variant, size}}>
32
- {children}
33
- </ToggleGroupContext.Provider>
34
- </ToggleGroupPrimitive.Root>
35
- );
36
- }
15
+ const ToggleGroup = React.forwardRef<
16
+ React.ComponentRef<typeof ToggleGroupPrimitive.Root>,
17
+ React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Root> & VariantProps<typeof toggleVariants>
18
+ >(({className, variant, size, children, ...props}, ref) => (
19
+ <ToggleGroupPrimitive.Root
20
+ ref={ref}
21
+ className={cn("flex items-center justify-center gap-1", className)}
22
+ {...props}>
23
+ <ToggleGroupContext.Provider value={{variant, size}}>{children}</ToggleGroupContext.Provider>
24
+ </ToggleGroupPrimitive.Root>
25
+ ));
37
26
 
38
- function ToggleGroupItem({
39
- className,
40
- children,
41
- variant,
42
- size,
43
- ...props
44
- }: Readonly<React.ComponentProps<typeof ToggleGroupPrimitive.Item> & VariantProps<typeof toggleVariants>>) {
27
+ ToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName;
28
+
29
+ const ToggleGroupItem = React.forwardRef<
30
+ React.ComponentRef<typeof ToggleGroupPrimitive.Item>,
31
+ React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Item> & VariantProps<typeof toggleVariants>
32
+ >(({className, children, variant, size, ...props}, ref) => {
45
33
  const context = React.useContext(ToggleGroupContext);
46
34
 
47
35
  return (
48
36
  <ToggleGroupPrimitive.Item
49
- data-slot='toggle-group-item'
50
- data-variant={context.variant || variant}
51
- data-size={context.size || size}
37
+ ref={ref}
52
38
  className={cn(
53
39
  toggleVariants({
54
40
  variant: context.variant || variant,
55
41
  size: context.size || size,
56
42
  }),
57
- "min-w-0 flex-1 shrink-0 rounded-none shadow-none first:rounded-l-md last:rounded-r-md focus:z-10 focus-visible:z-10 data-[variant=outline]:border-l-0 data-[variant=outline]:first:border-l",
58
43
  className,
59
44
  )}
60
45
  {...props}>
61
46
  {children}
62
47
  </ToggleGroupPrimitive.Item>
63
48
  );
64
- }
49
+ });
50
+
51
+ ToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName;
65
52
 
66
53
  export {ToggleGroup, ToggleGroupItem};
@@ -7,13 +7,13 @@ import * as React from "react";
7
7
  import {cn} from "@/lib/utilities";
8
8
 
9
9
  const toggleVariants = cva(
10
- "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-neutral-100 hover:text-neutral-500 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-neutral-100 data-[state=on]:text-neutral-900 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-neutral-950 focus-visible:ring-neutral-950/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-red-500/20 dark:aria-invalid:ring-red-500/40 aria-invalid:border-red-500 whitespace-nowrap dark:hover:bg-neutral-800 dark:hover:text-neutral-400 dark:data-[state=on]:bg-neutral-800 dark:data-[state=on]:text-neutral-50 dark:focus-visible:border-neutral-300 dark:focus-visible:ring-neutral-300/50 dark:aria-invalid:ring-red-900/20 dark:dark:aria-invalid:ring-red-900/40 dark:aria-invalid:border-red-900",
10
+ "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-neutral-100 hover:text-neutral-500 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-neutral-950 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-neutral-100 data-[state=on]:text-neutral-900 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 dark:hover:bg-neutral-800 dark:hover:text-neutral-400 dark:focus-visible:ring-neutral-300 dark:data-[state=on]:bg-neutral-800 dark:data-[state=on]:text-neutral-50",
11
11
  {
12
12
  variants: {
13
13
  variant: {
14
14
  default: "bg-transparent",
15
15
  outline:
16
- "border border-neutral-200 bg-transparent shadow-xs hover:bg-neutral-100 hover:text-neutral-900 dark:border-neutral-800 dark:hover:bg-neutral-800 dark:hover:text-neutral-50",
16
+ "border border-neutral-200 bg-transparent shadow-sm hover:bg-neutral-100 hover:text-neutral-900 dark:border-neutral-800 dark:hover:bg-neutral-800 dark:hover:text-neutral-50",
17
17
  },
18
18
  size: {
19
19
  default: "h-9 px-2 min-w-9",
@@ -28,19 +28,17 @@ const toggleVariants = cva(
28
28
  },
29
29
  );
30
30
 
31
- function Toggle({
32
- className,
33
- variant,
34
- size,
35
- ...props
36
- }: Readonly<React.ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>>) {
37
- return (
38
- <TogglePrimitive.Root
39
- data-slot='toggle'
40
- className={cn(toggleVariants({variant, size, className}))}
41
- {...props}
42
- />
43
- );
44
- }
31
+ const Toggle = React.forwardRef<
32
+ React.ComponentRef<typeof TogglePrimitive.Root>,
33
+ React.ComponentPropsWithoutRef<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>
34
+ >(({className, variant, size, ...props}, ref) => (
35
+ <TogglePrimitive.Root
36
+ ref={ref}
37
+ className={cn(toggleVariants({variant, size, className}))}
38
+ {...props}
39
+ />
40
+ ));
41
+
42
+ Toggle.displayName = TogglePrimitive.Root.displayName;
45
43
 
46
44
  export {Toggle, toggleVariants};