diff --git a/package.json b/package.json index 0f43552..a52cd6a 100644 --- a/package.json +++ b/package.json @@ -12,11 +12,6 @@ "dependencies": { "@base-ui/react": "^1.3.0", "@fontsource-variable/raleway": "^5.2.8", - "@radix-ui/react-accordion": "^1.2.12", - "@radix-ui/react-dialog": "^1.1.15", - "@radix-ui/react-dropdown-menu": "^2.1.16", - "@radix-ui/react-navigation-menu": "^1.2.14", - "@radix-ui/react-slot": "^1.2.4", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^0.577.0", diff --git a/src/components/ui/accordion.tsx b/src/components/ui/accordion.tsx index efa6de1..22f220c 100644 --- a/src/components/ui/accordion.tsx +++ b/src/components/ui/accordion.tsx @@ -1,64 +1,72 @@ -import * as AccordionPrimitive from "@radix-ui/react-accordion"; -import { ChevronDownIcon } from "lucide-react"; -import type * as React from "react"; +import { Accordion as AccordionPrimitive } from "@base-ui/react/accordion" -import { cn } from "@/lib/utils"; +import { cn } from "@/lib/utils" +import { ChevronDownIcon, ChevronUpIcon } from "lucide-react" -function Accordion({ - ...props -}: React.ComponentProps) { - return ; +function Accordion({ className, ...props }: AccordionPrimitive.Root.Props) { + return ( + + ) } -function AccordionItem({ - className, - ...props -}: React.ComponentProps) { +function AccordionItem({ className, ...props }: AccordionPrimitive.Item.Props) { return ( - ); + ) } function AccordionTrigger({ className, children, ...props -}: React.ComponentProps) { +}: AccordionPrimitive.Trigger.Props) { return ( svg]:rotate-180", - className, + "group/accordion-trigger relative flex flex-1 items-start justify-between rounded-md border border-transparent py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:after:border-ring aria-disabled:pointer-events-none aria-disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground", + className )} {...props} > {children} - + + - ); + ) } function AccordionContent({ className, children, ...props -}: React.ComponentProps) { +}: AccordionPrimitive.Panel.Props) { return ( - -
{children}
-
- ); +
+ {children} +
+ + ) } -export { Accordion, AccordionItem, AccordionTrigger, AccordionContent }; +export { Accordion, AccordionItem, AccordionTrigger, AccordionContent } diff --git a/src/components/ui/dropdown-menu.tsx b/src/components/ui/dropdown-menu.tsx index 61a59da..d44b903 100644 --- a/src/components/ui/dropdown-menu.tsx +++ b/src/components/ui/dropdown-menu.tsx @@ -1,60 +1,74 @@ -import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"; -import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react"; -import type * as React from "react"; +import * as React from "react" +import { Menu as MenuPrimitive } from "@base-ui/react/menu" -import { cn } from "@/lib/utils"; +import { cn } from "@/lib/utils" +import { ChevronRightIcon, CheckIcon } from "lucide-react" -function DropdownMenu({ - ...props -}: React.ComponentProps) { - return ; +function DropdownMenu({ ...props }: MenuPrimitive.Root.Props) { + return } -function DropdownMenuPortal({ - ...props -}: React.ComponentProps) { - return ( - - ); +function DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) { + return } -function DropdownMenuTrigger({ - ...props -}: React.ComponentProps) { - return ( - - ); +function DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) { + return } function DropdownMenuContent({ - className, + align = "start", + alignOffset = 0, + side = "bottom", sideOffset = 4, + className, ...props -}: React.ComponentProps) { +}: MenuPrimitive.Popup.Props & + Pick< + MenuPrimitive.Positioner.Props, + "align" | "alignOffset" | "side" | "sideOffset" + >) { return ( - - + - - ); + > + + + + ) } -function DropdownMenuGroup({ +function DropdownMenuGroup({ ...props }: MenuPrimitive.Group.Props) { + return +} + +function DropdownMenuLabel({ + className, + inset, ...props -}: React.ComponentProps) { +}: MenuPrimitive.GroupLabel.Props & { + inset?: boolean +}) { return ( - - ); + + ) } function DropdownMenuItem({ @@ -62,116 +76,159 @@ function DropdownMenuItem({ inset, variant = "default", ...props -}: React.ComponentProps & { - inset?: boolean; - variant?: "default" | "destructive"; +}: MenuPrimitive.Item.Props & { + inset?: boolean + variant?: "default" | "destructive" }) { return ( - - ); + ) } -function DropdownMenuCheckboxItem({ +function DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) { + return +} + +function DropdownMenuSubTrigger({ className, + inset, children, - checked, ...props -}: React.ComponentProps) { +}: MenuPrimitive.SubmenuTrigger.Props & { + inset?: boolean +}) { return ( - - - - - - {children} - - ); + + + ) } -function DropdownMenuRadioGroup({ +function DropdownMenuSubContent({ + align = "start", + alignOffset = -3, + side = "right", + sideOffset = 0, + className, ...props -}: React.ComponentProps) { +}: React.ComponentProps) { return ( - - ); + ) } -function DropdownMenuRadioItem({ +function DropdownMenuCheckboxItem({ className, children, + checked, + inset, ...props -}: React.ComponentProps) { +}: MenuPrimitive.CheckboxItem.Props & { + inset?: boolean +}) { return ( - - - - - + + + + {children} - - ); + + ) } -function DropdownMenuLabel({ +function DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) { + return ( + + ) +} + +function DropdownMenuRadioItem({ className, + children, inset, ...props -}: React.ComponentProps & { - inset?: boolean; +}: MenuPrimitive.RadioItem.Props & { + inset?: boolean }) { return ( - - ); + > + + + + + + {children} + + ) } function DropdownMenuSeparator({ className, ...props -}: React.ComponentProps) { +}: MenuPrimitive.Separator.Props) { return ( - - ); + ) } function DropdownMenuShortcut({ @@ -182,58 +239,12 @@ function DropdownMenuShortcut({ - ); -} - -function DropdownMenuSub({ - ...props -}: React.ComponentProps) { - return ; -} - -function DropdownMenuSubTrigger({ - className, - inset, - children, - ...props -}: React.ComponentProps & { - inset?: boolean; -}) { - return ( - - {children} - - - ); -} - -function DropdownMenuSubContent({ - className, - ...props -}: React.ComponentProps) { - return ( - - ); + ) } export { @@ -252,4 +263,4 @@ export { DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, -}; +} diff --git a/src/components/ui/navigation-menu.tsx b/src/components/ui/navigation-menu.tsx index cca570e..517b29a 100644 --- a/src/components/ui/navigation-menu.tsx +++ b/src/components/ui/navigation-menu.tsx @@ -1,72 +1,69 @@ -import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu"; -import { cva } from "class-variance-authority"; -import { ChevronDownIcon } from "lucide-react"; -import type * as React from "react"; +import { NavigationMenu as NavigationMenuPrimitive } from "@base-ui/react/navigation-menu" +import { cva } from "class-variance-authority" -import { cn } from "@/lib/utils"; +import { cn } from "@/lib/utils" +import { ChevronDownIcon } from "lucide-react" function NavigationMenu({ + align = "start", className, children, - viewport = true, ...props -}: React.ComponentProps & { - viewport?: boolean; -}) { +}: NavigationMenuPrimitive.Root.Props & + Pick) { return ( {children} - {viewport && } + - ); + ) } function NavigationMenuList({ className, ...props -}: React.ComponentProps) { +}: React.ComponentPropsWithRef) { return ( - ); + ) } function NavigationMenuItem({ className, ...props -}: React.ComponentProps) { +}: React.ComponentPropsWithRef) { return ( - ); + ) } const navigationMenuTriggerStyle = cva( - "group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=open]:hover:bg-accent data-[state=open]:text-accent-foreground data-[state=open]:focus:bg-accent data-[state=open]:bg-accent/50 ring-ring/10 dark:ring-ring/20 dark:outline-ring/40 outline-ring/50 transition-[color,box-shadow] focus-visible:ring-4 focus-visible:outline-1", -); + "group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center rounded-md px-4 py-2 text-sm font-medium transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted data-open:bg-muted/50 data-open:hover:bg-muted data-open:focus:bg-muted" +) function NavigationMenuTrigger({ className, children, ...props -}: React.ComponentProps) { +}: NavigationMenuPrimitive.Trigger.Props) { return ( {children}{" "} - - ); + ) } function NavigationMenuContent({ className, ...props -}: React.ComponentProps) { +}: NavigationMenuPrimitive.Content.Props) { return ( - ); + ) } -function NavigationMenuViewport({ +function NavigationMenuPositioner({ className, + side = "bottom", + sideOffset = 8, + align = "start", + alignOffset = 0, ...props -}: React.ComponentProps) { +}: NavigationMenuPrimitive.Positioner.Props) { return ( -
- + -
- ); + > + + + + + + ) } function NavigationMenuLink({ className, ...props -}: React.ComponentProps) { +}: NavigationMenuPrimitive.Link.Props) { return ( - ); + ) } function NavigationMenuIndicator({ className, ...props -}: React.ComponentProps) { +}: React.ComponentPropsWithRef) { return ( - -
- - ); +
+ + ) } export { NavigationMenu, - NavigationMenuList, - NavigationMenuItem, NavigationMenuContent, - NavigationMenuTrigger, - NavigationMenuLink, NavigationMenuIndicator, - NavigationMenuViewport, + NavigationMenuItem, + NavigationMenuLink, + NavigationMenuList, + NavigationMenuTrigger, navigationMenuTriggerStyle, -}; + NavigationMenuPositioner, +} diff --git a/src/components/ui/sheet.tsx b/src/components/ui/sheet.tsx index 62683a9..917d337 100644 --- a/src/components/ui/sheet.tsx +++ b/src/components/ui/sheet.tsx @@ -1,82 +1,83 @@ -import * as SheetPrimitive from "@radix-ui/react-dialog"; -import { XIcon } from "lucide-react"; -import type * as React from "react"; +"use client" -import { cn } from "@/lib/utils"; +import * as React from "react" +import { Dialog as SheetPrimitive } from "@base-ui/react/dialog" -function Sheet({ ...props }: React.ComponentProps) { - return ; +import { cn } from "@/lib/utils" +import { Button } from "@/components/ui/button" +import { XIcon } from "lucide-react" + +function Sheet({ ...props }: SheetPrimitive.Root.Props) { + return } -function SheetTrigger({ - ...props -}: React.ComponentProps) { - return ; +function SheetTrigger({ ...props }: SheetPrimitive.Trigger.Props) { + return } -function SheetClose({ - ...props -}: React.ComponentProps) { - return ; +function SheetClose({ ...props }: SheetPrimitive.Close.Props) { + return } -function SheetPortal({ - ...props -}: React.ComponentProps) { - return ; +function SheetPortal({ ...props }: SheetPrimitive.Portal.Props) { + return } -function SheetOverlay({ - className, - ...props -}: React.ComponentProps) { +function SheetOverlay({ className, ...props }: SheetPrimitive.Backdrop.Props) { return ( - - ); + ) } function SheetContent({ className, children, side = "right", + showCloseButton = true, ...props -}: React.ComponentProps & { - side?: "top" | "right" | "bottom" | "left"; +}: SheetPrimitive.Popup.Props & { + side?: "top" | "right" | "bottom" | "left" + showCloseButton?: boolean }) { return ( - {children} - - - Close - - + {showCloseButton && ( + + } + > + + Close + + )} + - ); + ) } function SheetHeader({ className, ...props }: React.ComponentProps<"div">) { @@ -86,7 +87,7 @@ function SheetHeader({ className, ...props }: React.ComponentProps<"div">) { className={cn("flex flex-col gap-1.5 p-4", className)} {...props} /> - ); + ) } function SheetFooter({ className, ...props }: React.ComponentProps<"div">) { @@ -96,33 +97,30 @@ function SheetFooter({ className, ...props }: React.ComponentProps<"div">) { className={cn("mt-auto flex flex-col gap-2 p-4", className)} {...props} /> - ); + ) } -function SheetTitle({ - className, - ...props -}: React.ComponentProps) { +function SheetTitle({ className, ...props }: SheetPrimitive.Title.Props) { return ( - ); + ) } function SheetDescription({ className, ...props -}: React.ComponentProps) { +}: SheetPrimitive.Description.Props) { return ( - ); + ) } export { @@ -134,4 +132,4 @@ export { SheetFooter, SheetTitle, SheetDescription, -}; +}