@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,240 +1,217 @@
1
1
  "use client";
2
2
 
3
3
  import * as MenubarPrimitive from "@radix-ui/react-menubar";
4
- import {CheckIcon, ChevronRightIcon, CircleIcon} from "lucide-react";
4
+ import {Check, ChevronRight, Circle} from "lucide-react";
5
5
  import * as React from "react";
6
6
 
7
7
  import {cn} from "@/lib/utilities";
8
8
 
9
- function Menubar({className, ...props}: React.ComponentProps<typeof MenubarPrimitive.Root>) {
10
- return (
11
- <MenubarPrimitive.Root
12
- data-slot='menubar'
13
- className={cn(
14
- "flex h-9 items-center gap-1 rounded-md border border-neutral-200 bg-white p-1 shadow-xs dark:border-neutral-800 dark:bg-neutral-950",
15
- className,
16
- )}
17
- {...props}
18
- />
19
- );
20
- }
21
-
22
9
  function MenubarMenu({...props}: React.ComponentProps<typeof MenubarPrimitive.Menu>) {
23
- return (
24
- <MenubarPrimitive.Menu
25
- data-slot='menubar-menu'
26
- {...props}
27
- />
28
- );
10
+ return <MenubarPrimitive.Menu {...props} />;
29
11
  }
30
12
 
31
13
  function MenubarGroup({...props}: React.ComponentProps<typeof MenubarPrimitive.Group>) {
32
- return (
33
- <MenubarPrimitive.Group
34
- data-slot='menubar-group'
35
- {...props}
36
- />
37
- );
14
+ return <MenubarPrimitive.Group {...props} />;
38
15
  }
39
16
 
40
17
  function MenubarPortal({...props}: React.ComponentProps<typeof MenubarPrimitive.Portal>) {
41
- return (
42
- <MenubarPrimitive.Portal
43
- data-slot='menubar-portal'
44
- {...props}
45
- />
46
- );
18
+ return <MenubarPrimitive.Portal {...props} />;
47
19
  }
48
20
 
49
21
  function MenubarRadioGroup({...props}: React.ComponentProps<typeof MenubarPrimitive.RadioGroup>) {
50
- return (
51
- <MenubarPrimitive.RadioGroup
52
- data-slot='menubar-radio-group'
53
- {...props}
54
- />
55
- );
56
- }
57
-
58
- function MenubarTrigger({className, ...props}: React.ComponentProps<typeof MenubarPrimitive.Trigger>) {
59
- return (
60
- <MenubarPrimitive.Trigger
61
- data-slot='menubar-trigger'
62
- className={cn(
63
- "flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none focus:bg-neutral-100 focus:text-neutral-900 data-[state=open]:bg-neutral-100 data-[state=open]:text-neutral-900 dark:focus:bg-neutral-800 dark:focus:text-neutral-50 dark:data-[state=open]:bg-neutral-800 dark:data-[state=open]:text-neutral-50",
64
- className,
65
- )}
66
- {...props}
67
- />
68
- );
22
+ return <MenubarPrimitive.RadioGroup {...props} />;
69
23
  }
70
24
 
71
- function MenubarContent({
72
- className,
73
- align = "start",
74
- alignOffset = -4,
75
- sideOffset = 8,
76
- ...props
77
- }: React.ComponentProps<typeof MenubarPrimitive.Content>) {
78
- return (
79
- <MenubarPortal>
80
- <MenubarPrimitive.Content
81
- data-slot='menubar-content'
82
- align={align}
83
- alignOffset={alignOffset}
84
- sideOffset={sideOffset}
85
- className={cn(
86
- "data-[state=open]:animate-in 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 z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border border-neutral-200 bg-white p-1 text-neutral-950 shadow-md dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50",
87
- className,
88
- )}
89
- {...props}
90
- />
91
- </MenubarPortal>
92
- );
93
- }
94
-
95
- function MenubarItem({
96
- className,
97
- inset,
98
- variant = "default",
99
- ...props
100
- }: React.ComponentProps<typeof MenubarPrimitive.Item> & {
101
- inset?: boolean;
102
- variant?: "default" | "destructive";
103
- }) {
25
+ function MenubarSub({...props}: React.ComponentProps<typeof MenubarPrimitive.Sub>) {
104
26
  return (
105
- <MenubarPrimitive.Item
106
- data-slot='menubar-item'
107
- data-inset={inset}
108
- data-variant={variant}
109
- className={cn(
110
- "data-[variant=destructive]:*:[svg]:!text-destructive relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-neutral-100 focus:text-neutral-900 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-red-500 data-[variant=destructive]:focus:bg-red-500/10 data-[variant=destructive]:focus:text-red-500 dark:focus:bg-neutral-800 dark:focus:text-neutral-50 dark:data-[variant=destructive]:text-red-900 dark:dark:data-[variant=destructive]:focus:bg-red-900/20 dark:data-[variant=destructive]:focus:bg-red-500/20 dark:data-[variant=destructive]:focus:bg-red-900/10 dark:data-[variant=destructive]:focus:text-red-900 [&_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",
111
- className,
112
- )}
27
+ <MenubarPrimitive.Sub
28
+ data-slot='menubar-sub'
113
29
  {...props}
114
30
  />
115
31
  );
116
32
  }
117
33
 
118
- function MenubarCheckboxItem({className, children, checked, ...props}: React.ComponentProps<typeof MenubarPrimitive.CheckboxItem>) {
119
- return (
120
- <MenubarPrimitive.CheckboxItem
121
- data-slot='menubar-checkbox-item'
122
- className={cn(
123
- "relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 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",
124
- className,
125
- )}
126
- checked={checked}
127
- {...props}>
128
- <span className='pointer-events-none absolute left-2 flex size-3.5 items-center justify-center'>
129
- <MenubarPrimitive.ItemIndicator>
130
- <CheckIcon className='size-4' />
131
- </MenubarPrimitive.ItemIndicator>
132
- </span>
133
- {children}
134
- </MenubarPrimitive.CheckboxItem>
135
- );
136
- }
137
-
138
- function MenubarRadioItem({className, children, ...props}: React.ComponentProps<typeof MenubarPrimitive.RadioItem>) {
139
- return (
140
- <MenubarPrimitive.RadioItem
141
- data-slot='menubar-radio-item'
34
+ const Menubar = React.forwardRef<
35
+ React.ComponentRef<typeof MenubarPrimitive.Root>,
36
+ React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Root>
37
+ >(({className, ...props}, ref) => (
38
+ <MenubarPrimitive.Root
39
+ ref={ref}
40
+ className={cn(
41
+ "flex h-9 items-center space-x-1 rounded-md border border-neutral-200 bg-white p-1 shadow-sm dark:border-neutral-800 dark:bg-neutral-950",
42
+ className,
43
+ )}
44
+ {...props}
45
+ />
46
+ ));
47
+ Menubar.displayName = MenubarPrimitive.Root.displayName;
48
+
49
+ const MenubarTrigger = React.forwardRef<
50
+ React.ComponentRef<typeof MenubarPrimitive.Trigger>,
51
+ React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Trigger>
52
+ >(({className, ...props}, ref) => (
53
+ <MenubarPrimitive.Trigger
54
+ ref={ref}
55
+ className={cn(
56
+ "flex cursor-default items-center rounded-sm px-3 py-1 text-sm font-medium outline-none select-none focus:bg-neutral-100 focus:text-neutral-900 data-[state=open]:bg-neutral-100 data-[state=open]:text-neutral-900 dark:focus:bg-neutral-800 dark:focus:text-neutral-50 dark:data-[state=open]:bg-neutral-800 dark:data-[state=open]:text-neutral-50",
57
+ className,
58
+ )}
59
+ {...props}
60
+ />
61
+ ));
62
+ MenubarTrigger.displayName = MenubarPrimitive.Trigger.displayName;
63
+
64
+ const MenubarSubTrigger = React.forwardRef<
65
+ React.ComponentRef<typeof MenubarPrimitive.SubTrigger>,
66
+ React.ComponentPropsWithoutRef<typeof MenubarPrimitive.SubTrigger> & {
67
+ inset?: boolean;
68
+ }
69
+ >(({className, inset, children, ...props}, ref) => (
70
+ <MenubarPrimitive.SubTrigger
71
+ ref={ref}
72
+ className={cn(
73
+ "flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none focus:bg-neutral-100 focus:text-neutral-900 data-[state=open]:bg-neutral-100 data-[state=open]:text-neutral-900 dark:focus:bg-neutral-800 dark:focus:text-neutral-50 dark:data-[state=open]:bg-neutral-800 dark:data-[state=open]:text-neutral-50",
74
+ inset && "pl-8",
75
+ className,
76
+ )}
77
+ {...props}>
78
+ {children}
79
+ <ChevronRight className='ml-auto h-4 w-4' />
80
+ </MenubarPrimitive.SubTrigger>
81
+ ));
82
+ MenubarSubTrigger.displayName = MenubarPrimitive.SubTrigger.displayName;
83
+
84
+ const MenubarSubContent = React.forwardRef<
85
+ React.ComponentRef<typeof MenubarPrimitive.SubContent>,
86
+ React.ComponentPropsWithoutRef<typeof MenubarPrimitive.SubContent>
87
+ >(({className, ...props}, ref) => (
88
+ <MenubarPrimitive.SubContent
89
+ ref={ref}
90
+ className={cn(
91
+ "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 z-50 min-w-[8rem] origin-[--radix-menubar-content-transform-origin] overflow-hidden rounded-md border border-neutral-200 bg-white p-1 text-neutral-950 shadow-lg dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50",
92
+ className,
93
+ )}
94
+ {...props}
95
+ />
96
+ ));
97
+ MenubarSubContent.displayName = MenubarPrimitive.SubContent.displayName;
98
+
99
+ const MenubarContent = React.forwardRef<
100
+ React.ComponentRef<typeof MenubarPrimitive.Content>,
101
+ React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Content>
102
+ >(({className, align = "start", alignOffset = -4, sideOffset = 8, ...props}, ref) => (
103
+ <MenubarPrimitive.Portal>
104
+ <MenubarPrimitive.Content
105
+ ref={ref}
106
+ align={align}
107
+ alignOffset={alignOffset}
108
+ sideOffset={sideOffset}
142
109
  className={cn(
143
- "relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 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",
110
+ "data-[state=open]:animate-in 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 z-50 min-w-[12rem] origin-[--radix-menubar-content-transform-origin] overflow-hidden rounded-md border border-neutral-200 bg-white p-1 text-neutral-950 shadow-md dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50",
144
111
  className,
145
112
  )}
146
- {...props}>
147
- <span className='pointer-events-none absolute left-2 flex size-3.5 items-center justify-center'>
148
- <MenubarPrimitive.ItemIndicator>
149
- <CircleIcon className='size-2 fill-current' />
150
- </MenubarPrimitive.ItemIndicator>
151
- </span>
152
- {children}
153
- </MenubarPrimitive.RadioItem>
154
- );
155
- }
156
-
157
- function MenubarLabel({
158
- className,
159
- inset,
160
- ...props
161
- }: React.ComponentProps<typeof MenubarPrimitive.Label> & {
162
- inset?: boolean;
163
- }) {
164
- return (
165
- <MenubarPrimitive.Label
166
- data-slot='menubar-label'
167
- data-inset={inset}
168
- className={cn("px-2 py-1.5 text-sm font-medium data-[inset]:pl-8", className)}
169
113
  {...props}
170
114
  />
171
- );
172
- }
173
-
174
- function MenubarSeparator({className, ...props}: React.ComponentProps<typeof MenubarPrimitive.Separator>) {
175
- return (
176
- <MenubarPrimitive.Separator
177
- data-slot='menubar-separator'
178
- className={cn("-mx-1 my-1 h-px bg-neutral-200 dark:bg-neutral-800", className)}
179
- {...props}
180
- />
181
- );
182
- }
183
-
184
- function MenubarShortcut({className, ...props}: React.ComponentProps<"span">) {
115
+ </MenubarPrimitive.Portal>
116
+ ));
117
+ MenubarContent.displayName = MenubarPrimitive.Content.displayName;
118
+
119
+ const MenubarItem = React.forwardRef<
120
+ React.ComponentRef<typeof MenubarPrimitive.Item>,
121
+ React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Item> & {
122
+ inset?: boolean;
123
+ }
124
+ >(({className, inset, ...props}, ref) => (
125
+ <MenubarPrimitive.Item
126
+ ref={ref}
127
+ className={cn(
128
+ "relative flex cursor-default items-center rounded-sm px-2 py-1.5 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",
129
+ inset && "pl-8",
130
+ className,
131
+ )}
132
+ {...props}
133
+ />
134
+ ));
135
+ MenubarItem.displayName = MenubarPrimitive.Item.displayName;
136
+
137
+ const MenubarCheckboxItem = React.forwardRef<
138
+ React.ComponentRef<typeof MenubarPrimitive.CheckboxItem>,
139
+ React.ComponentPropsWithoutRef<typeof MenubarPrimitive.CheckboxItem>
140
+ >(({className, children, checked, ...props}, ref) => (
141
+ <MenubarPrimitive.CheckboxItem
142
+ ref={ref}
143
+ className={cn(
144
+ "relative flex cursor-default items-center rounded-sm py-1.5 pr-2 pl-8 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",
145
+ className,
146
+ )}
147
+ checked={checked}
148
+ {...props}>
149
+ <span className='absolute left-2 flex h-3.5 w-3.5 items-center justify-center'>
150
+ <MenubarPrimitive.ItemIndicator>
151
+ <Check className='h-4 w-4' />
152
+ </MenubarPrimitive.ItemIndicator>
153
+ </span>
154
+ {children}
155
+ </MenubarPrimitive.CheckboxItem>
156
+ ));
157
+ MenubarCheckboxItem.displayName = MenubarPrimitive.CheckboxItem.displayName;
158
+
159
+ const MenubarRadioItem = React.forwardRef<
160
+ React.ComponentRef<typeof MenubarPrimitive.RadioItem>,
161
+ React.ComponentPropsWithoutRef<typeof MenubarPrimitive.RadioItem>
162
+ >(({className, children, ...props}, ref) => (
163
+ <MenubarPrimitive.RadioItem
164
+ ref={ref}
165
+ className={cn(
166
+ "relative flex cursor-default items-center rounded-sm py-1.5 pr-2 pl-8 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",
167
+ className,
168
+ )}
169
+ {...props}>
170
+ <span className='absolute left-2 flex h-3.5 w-3.5 items-center justify-center'>
171
+ <MenubarPrimitive.ItemIndicator>
172
+ <Circle className='h-4 w-4 fill-current' />
173
+ </MenubarPrimitive.ItemIndicator>
174
+ </span>
175
+ {children}
176
+ </MenubarPrimitive.RadioItem>
177
+ ));
178
+ MenubarRadioItem.displayName = MenubarPrimitive.RadioItem.displayName;
179
+
180
+ const MenubarLabel = React.forwardRef<
181
+ React.ComponentRef<typeof MenubarPrimitive.Label>,
182
+ React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Label> & {
183
+ inset?: boolean;
184
+ }
185
+ >(({className, inset, ...props}, ref) => (
186
+ <MenubarPrimitive.Label
187
+ ref={ref}
188
+ className={cn("px-2 py-1.5 text-sm font-semibold", inset && "pl-8", className)}
189
+ {...props}
190
+ />
191
+ ));
192
+ MenubarLabel.displayName = MenubarPrimitive.Label.displayName;
193
+
194
+ const MenubarSeparator = React.forwardRef<
195
+ React.ComponentRef<typeof MenubarPrimitive.Separator>,
196
+ React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Separator>
197
+ >(({className, ...props}, ref) => (
198
+ <MenubarPrimitive.Separator
199
+ ref={ref}
200
+ className={cn("-mx-1 my-1 h-px bg-neutral-100 dark:bg-neutral-800", className)}
201
+ {...props}
202
+ />
203
+ ));
204
+ MenubarSeparator.displayName = MenubarPrimitive.Separator.displayName;
205
+
206
+ const MenubarShortcut = ({className, ...props}: React.HTMLAttributes<HTMLSpanElement>) => {
185
207
  return (
186
208
  <span
187
- data-slot='menubar-shortcut'
188
209
  className={cn("ml-auto text-xs tracking-widest text-neutral-500 dark:text-neutral-400", className)}
189
210
  {...props}
190
211
  />
191
212
  );
192
- }
193
-
194
- function MenubarSub({...props}: React.ComponentProps<typeof MenubarPrimitive.Sub>) {
195
- return (
196
- <MenubarPrimitive.Sub
197
- data-slot='menubar-sub'
198
- {...props}
199
- />
200
- );
201
- }
202
-
203
- function MenubarSubTrigger({
204
- className,
205
- inset,
206
- children,
207
- ...props
208
- }: React.ComponentProps<typeof MenubarPrimitive.SubTrigger> & {
209
- inset?: boolean;
210
- }) {
211
- return (
212
- <MenubarPrimitive.SubTrigger
213
- data-slot='menubar-sub-trigger'
214
- data-inset={inset}
215
- className={cn(
216
- "flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none focus:bg-neutral-100 focus:text-neutral-900 data-[inset]:pl-8 data-[state=open]:bg-neutral-100 data-[state=open]:text-neutral-900 dark:focus:bg-neutral-800 dark:focus:text-neutral-50 dark:data-[state=open]:bg-neutral-800 dark:data-[state=open]:text-neutral-50",
217
- className,
218
- )}
219
- {...props}>
220
- {children}
221
- <ChevronRightIcon className='ml-auto h-4 w-4' />
222
- </MenubarPrimitive.SubTrigger>
223
- );
224
- }
225
-
226
- function MenubarSubContent({className, ...props}: React.ComponentProps<typeof MenubarPrimitive.SubContent>) {
227
- return (
228
- <MenubarPrimitive.SubContent
229
- data-slot='menubar-sub-content'
230
- className={cn(
231
- "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 z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border border-neutral-200 bg-white p-1 text-neutral-950 shadow-lg dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50",
232
- className,
233
- )}
234
- {...props}
235
- />
236
- );
237
- }
213
+ };
214
+ MenubarShortcut.displayname = "MenubarShortcut";
238
215
 
239
216
  export {
240
217
  Menubar,
@@ -2,125 +2,109 @@
2
2
 
3
3
  import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu";
4
4
  import {cva} from "class-variance-authority";
5
- import {ChevronDownIcon} from "lucide-react";
5
+ import {ChevronDown} from "lucide-react";
6
6
  import * as React from "react";
7
7
 
8
8
  import {cn} from "@/lib/utilities";
9
9
 
10
- function NavigationMenu({
11
- className,
12
- children,
13
- viewport = true,
14
- ...props
15
- }: React.ComponentProps<typeof NavigationMenuPrimitive.Root> & {
16
- viewport?: boolean;
17
- }) {
18
- return (
19
- <NavigationMenuPrimitive.Root
20
- data-slot='navigation-menu'
21
- data-viewport={viewport}
22
- className={cn("group/navigation-menu relative flex max-w-max flex-1 items-center justify-center", className)}
23
- {...props}>
24
- {children}
25
- {Boolean(viewport) && <NavigationMenuViewport />}
26
- </NavigationMenuPrimitive.Root>
27
- );
28
- }
10
+ const NavigationMenu = React.forwardRef<
11
+ React.ComponentRef<typeof NavigationMenuPrimitive.Root>,
12
+ React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Root>
13
+ >(({className, children, ...props}, ref) => (
14
+ <NavigationMenuPrimitive.Root
15
+ ref={ref}
16
+ className={cn("relative z-10 flex max-w-max flex-1 items-center justify-center", className)}
17
+ {...props}>
18
+ {children}
19
+ <NavigationMenuViewport />
20
+ </NavigationMenuPrimitive.Root>
21
+ ));
22
+ NavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName;
29
23
 
30
- function NavigationMenuList({className, ...props}: React.ComponentProps<typeof NavigationMenuPrimitive.List>) {
31
- return (
32
- <NavigationMenuPrimitive.List
33
- data-slot='navigation-menu-list'
34
- className={cn("group flex flex-1 list-none items-center justify-center gap-1", className)}
35
- {...props}
36
- />
37
- );
38
- }
24
+ const NavigationMenuList = React.forwardRef<
25
+ React.ComponentRef<typeof NavigationMenuPrimitive.List>,
26
+ React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.List>
27
+ >(({className, ...props}, ref) => (
28
+ <NavigationMenuPrimitive.List
29
+ ref={ref}
30
+ className={cn("group flex flex-1 list-none items-center justify-center space-x-1", className)}
31
+ {...props}
32
+ />
33
+ ));
34
+ NavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName;
39
35
 
40
- function NavigationMenuItem({className, ...props}: React.ComponentProps<typeof NavigationMenuPrimitive.Item>) {
41
- return (
42
- <NavigationMenuPrimitive.Item
43
- data-slot='navigation-menu-item'
44
- className={cn("relative", className)}
45
- {...props}
46
- />
47
- );
48
- }
36
+ const NavigationMenuItem = NavigationMenuPrimitive.Item;
49
37
 
50
38
  const navigationMenuTriggerStyle = cva(
51
- "group inline-flex h-9 w-max items-center justify-center rounded-md bg-white px-4 py-2 text-sm font-medium hover:bg-neutral-100 hover:text-neutral-900 focus:bg-neutral-100 focus:text-neutral-900 disabled:pointer-events-none disabled:opacity-50 data-[state=open]:hover:bg-neutral-100 data-[state=open]:text-neutral-900 data-[state=open]:focus:bg-neutral-100 data-[state=open]:bg-neutral-100/50 focus-visible:ring-neutral-950/50 outline-none transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 dark:bg-neutral-950 dark:hover:bg-neutral-800 dark:hover:text-neutral-50 dark:focus:bg-neutral-800 dark:focus:text-neutral-50 dark:data-[state=open]:hover:bg-neutral-800 dark:data-[state=open]:text-neutral-50 dark:data-[state=open]:focus:bg-neutral-800 dark:data-[state=open]:bg-neutral-800/50 dark:focus-visible:ring-neutral-300/50",
39
+ "group inline-flex h-9 w-max items-center justify-center rounded-md bg-white px-4 py-2 text-sm font-medium transition-colors hover:bg-neutral-100 hover:text-neutral-900 focus:bg-neutral-100 focus:text-neutral-900 focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=open]:text-neutral-900 data-[state=open]:bg-neutral-100/50 data-[state=open]:hover:bg-neutral-100 data-[state=open]:focus:bg-neutral-100 dark:bg-neutral-950 dark:hover:bg-neutral-800 dark:hover:text-neutral-50 dark:focus:bg-neutral-800 dark:focus:text-neutral-50 dark:data-[state=open]:text-neutral-50 dark:data-[state=open]:bg-neutral-800/50 dark:data-[state=open]:hover:bg-neutral-800 dark:data-[state=open]:focus:bg-neutral-800",
52
40
  );
53
41
 
54
- function NavigationMenuTrigger({className, children, ...props}: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {
55
- return (
56
- <NavigationMenuPrimitive.Trigger
57
- data-slot='navigation-menu-trigger'
58
- className={cn(navigationMenuTriggerStyle(), "group", className)}
59
- {...props}>
60
- {children}
61
- <ChevronDownIcon
62
- className='relative top-[1px] ml-1 size-3 transition duration-300 group-data-[state=open]:rotate-180'
63
- aria-hidden='true'
64
- />
65
- </NavigationMenuPrimitive.Trigger>
66
- );
67
- }
68
-
69
- function NavigationMenuContent({className, ...props}: React.ComponentProps<typeof NavigationMenuPrimitive.Content>) {
70
- return (
71
- <NavigationMenuPrimitive.Content
72
- data-slot='navigation-menu-content'
73
- className={cn(
74
- "data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 top-0 left-0 w-full p-2 pr-2.5 md:absolute md:w-auto",
75
- "group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none",
76
- className,
77
- )}
78
- {...props}
42
+ const NavigationMenuTrigger = React.forwardRef<
43
+ React.ComponentRef<typeof NavigationMenuPrimitive.Trigger>,
44
+ React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Trigger>
45
+ >(({className, children, ...props}, ref) => (
46
+ <NavigationMenuPrimitive.Trigger
47
+ ref={ref}
48
+ className={cn(navigationMenuTriggerStyle(), "group", className)}
49
+ {...props}>
50
+ {children}
51
+ <ChevronDown
52
+ className='relative top-[1px] ml-1 h-3 w-3 transition duration-300 group-data-[state=open]:rotate-180'
53
+ aria-hidden='true'
79
54
  />
80
- );
81
- }
55
+ </NavigationMenuPrimitive.Trigger>
56
+ ));
57
+ NavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName;
58
+
59
+ const NavigationMenuContent = React.forwardRef<
60
+ React.ComponentRef<typeof NavigationMenuPrimitive.Content>,
61
+ React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Content>
62
+ >(({className, ...props}, ref) => (
63
+ <NavigationMenuPrimitive.Content
64
+ ref={ref}
65
+ className={cn(
66
+ "data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 top-0 left-0 w-full md:absolute md:w-auto",
67
+ className,
68
+ )}
69
+ {...props}
70
+ />
71
+ ));
72
+ NavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName;
82
73
 
83
- function NavigationMenuViewport({className, ...props}: React.ComponentProps<typeof NavigationMenuPrimitive.Viewport>) {
84
- return (
85
- <div className={cn("absolute top-full left-0 isolate z-50 flex justify-center")}>
86
- <NavigationMenuPrimitive.Viewport
87
- data-slot='navigation-menu-viewport'
88
- className={cn(
89
- "origin-top-center data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border border-neutral-200 bg-white text-neutral-950 shadow md:w-[var(--radix-navigation-menu-viewport-width)] dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50",
90
- className,
91
- )}
92
- {...props}
93
- />
94
- </div>
95
- );
96
- }
74
+ const NavigationMenuLink = NavigationMenuPrimitive.Link;
97
75
 
98
- function NavigationMenuLink({className, ...props}: React.ComponentProps<typeof NavigationMenuPrimitive.Link>) {
99
- return (
100
- <NavigationMenuPrimitive.Link
101
- data-slot='navigation-menu-link'
76
+ const NavigationMenuViewport = React.forwardRef<
77
+ React.ComponentRef<typeof NavigationMenuPrimitive.Viewport>,
78
+ React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Viewport>
79
+ >(({className, ...props}, ref) => (
80
+ <div className={cn("absolute top-full left-0 flex justify-center")}>
81
+ <NavigationMenuPrimitive.Viewport
102
82
  className={cn(
103
- "flex flex-col gap-1 rounded-sm p-2 text-sm transition-all outline-none hover:bg-neutral-100 hover:text-neutral-900 focus:bg-neutral-100 focus:text-neutral-900 focus-visible:ring-[3px] focus-visible:ring-neutral-950/50 focus-visible:outline-1 data-[active=true]:bg-neutral-100/50 data-[active=true]:text-neutral-900 data-[active=true]:hover:bg-neutral-100 data-[active=true]:focus:bg-neutral-100 dark:hover:bg-neutral-800 dark:hover:text-neutral-50 dark:focus:bg-neutral-800 dark:focus:text-neutral-50 dark:focus-visible:ring-neutral-300/50 dark:data-[active=true]:bg-neutral-800/50 dark:data-[active=true]:text-neutral-50 dark:data-[active=true]:hover:bg-neutral-800 dark:data-[active=true]:focus:bg-neutral-800 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-neutral-500 dark:[&_svg:not([class*='text-'])]:text-neutral-400",
83
+ "origin-top-center data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border border-neutral-200 bg-white text-neutral-950 shadow md:w-[var(--radix-navigation-menu-viewport-width)] dark:border-neutral-800 dark:bg-neutral-950 dark:text-neutral-50",
104
84
  className,
105
85
  )}
86
+ ref={ref}
106
87
  {...props}
107
88
  />
108
- );
109
- }
89
+ </div>
90
+ ));
91
+ NavigationMenuViewport.displayName = NavigationMenuPrimitive.Viewport.displayName;
110
92
 
111
- function NavigationMenuIndicator({className, ...props}: React.ComponentProps<typeof NavigationMenuPrimitive.Indicator>) {
112
- return (
113
- <NavigationMenuPrimitive.Indicator
114
- data-slot='navigation-menu-indicator'
115
- className={cn(
116
- "data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden",
117
- className,
118
- )}
119
- {...props}>
120
- <div className='relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-neutral-200 shadow-md dark:bg-neutral-800' />
121
- </NavigationMenuPrimitive.Indicator>
122
- );
123
- }
93
+ const NavigationMenuIndicator = React.forwardRef<
94
+ React.ComponentRef<typeof NavigationMenuPrimitive.Indicator>,
95
+ React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Indicator>
96
+ >(({className, ...props}, ref) => (
97
+ <NavigationMenuPrimitive.Indicator
98
+ ref={ref}
99
+ className={cn(
100
+ "data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden",
101
+ className,
102
+ )}
103
+ {...props}>
104
+ <div className='relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-neutral-200 shadow-md dark:bg-neutral-800' />
105
+ </NavigationMenuPrimitive.Indicator>
106
+ ));
107
+ NavigationMenuIndicator.displayName = NavigationMenuPrimitive.Indicator.displayName;
124
108
 
125
109
  export {
126
110
  NavigationMenu,