"use client"; import { menu, type MenuVariantProps } from "@seed-design/css/recipes/menu"; import { menuItem, type MenuItemVariantProps } from "@seed-design/css/recipes/menu-item"; import { NavigationMenu as NavigationMenuPrimitive, useNavigationMenuItemContext, useNavigationMenuRootContext, } from "@seed-design/react-navigation-menu"; import { Primitive, type PrimitiveProps } from "@seed-design/react-primitive"; import clsx from "clsx"; import * as React from "react"; import { createSlotRecipeContext } from "../../utils/createSlotRecipeContext"; import { createWithStateProps } from "../../utils/createWithStateProps"; const { ClassNamesProvider, withContext, useClassNames } = createSlotRecipeContext(menu); const { PropsProvider: ItemPropsProvider, useProps: useItemProps, withContext: withItemContext, ClassNamesProvider: ItemClassNamesProvider, } = createSlotRecipeContext(menuItem); const withStateProps = createWithStateProps([useNavigationMenuRootContext]); const withItemStateProps = createWithStateProps([useNavigationMenuItemContext]); //////////////////////////////////////////////////////////////////////////////////// export interface NavigationMenuProviderProps extends MenuVariantProps, NavigationMenuPrimitive.ProviderProps {} export const NavigationMenuProvider = (props: NavigationMenuProviderProps) => { const [variantProps, otherProps] = menu.splitVariantProps(props); const classNames = menu(variantProps); return ( ); }; //////////////////////////////////////////////////////////////////////////////////// export interface NavigationMenuRootProps extends NavigationMenuPrimitive.RootProps {} export const NavigationMenuRoot = NavigationMenuPrimitive.Root; //////////////////////////////////////////////////////////////////////////////////// export interface NavigationMenuTriggerProps extends NavigationMenuPrimitive.TriggerProps {} export const NavigationMenuTrigger = NavigationMenuPrimitive.Trigger; //////////////////////////////////////////////////////////////////////////////////// export interface NavigationMenuPositionerProps extends NavigationMenuPrimitive.PositionerProps {} export const NavigationMenuPositioner = React.forwardRef< HTMLDivElement, NavigationMenuPositionerProps >(({ className, ...props }, ref) => { const classNames = useClassNames(); return ( ); }); NavigationMenuPositioner.displayName = "NavigationMenuPositioner"; //////////////////////////////////////////////////////////////////////////////////// export interface NavigationMenuContentProps extends NavigationMenuPrimitive.ContentProps {} export const NavigationMenuContent = withContext( NavigationMenuPrimitive.Content, "content", ); //////////////////////////////////////////////////////////////////////////////////// export interface NavigationMenuScrollAreaProps extends PrimitiveProps, React.HTMLAttributes {} export const NavigationMenuScrollArea = withContext( withStateProps(Primitive.div), "scrollArea", ); //////////////////////////////////////////////////////////////////////////////////// export interface NavigationMenuGroupProps extends NavigationMenuPrimitive.GroupProps {} export const NavigationMenuGroup = withContext( NavigationMenuPrimitive.Group, "group", ); //////////////////////////////////////////////////////////////////////////////////// export interface NavigationMenuGroupLabelProps extends NavigationMenuPrimitive.GroupLabelProps {} export const NavigationMenuGroupLabel = withContext( NavigationMenuPrimitive.GroupLabel, "groupLabel", ); //////////////////////////////////////////////////////////////////////////////////// export interface NavigationMenuItemProps extends MenuItemVariantProps, NavigationMenuPrimitive.ItemProps {} export const NavigationMenuItem = React.forwardRef( ({ className: propClassName, ...props }, ref) => { const [variantProps, otherProps] = menuItem.splitVariantProps(props); const parentProps = useItemProps(); const classNames = menuItem({ ...parentProps, ...variantProps }); return ( ); }, ); NavigationMenuItem.displayName = "NavigationMenuItem"; //////////////////////////////////////////////////////////////////////////////////// export interface NavigationMenuItemBodyProps extends PrimitiveProps, React.HTMLAttributes {} export const NavigationMenuItemBody = withItemContext( withItemStateProps(Primitive.div), "body", ); //////////////////////////////////////////////////////////////////////////////////// export interface NavigationMenuItemLabelProps extends PrimitiveProps, React.HTMLAttributes {} export const NavigationMenuItemLabel = withItemContext< HTMLSpanElement, NavigationMenuItemLabelProps >(withItemStateProps(Primitive.span), "label"); //////////////////////////////////////////////////////////////////////////////////// export interface NavigationMenuItemDescriptionProps extends PrimitiveProps, React.HTMLAttributes {} export const NavigationMenuItemDescription = withItemContext< HTMLSpanElement, NavigationMenuItemDescriptionProps >(withItemStateProps(Primitive.span), "description");