SPB Git

spb/vquant Public MIT

VibeQuant — AI-powered institutional-grade financial intelligence platform.

TypeScript 84.3% Python 11.7% JavaScript 1.6% CSS 1.5% HTML 0.7%
5.6 KB · 145 lines tsx
Raw Blame History
1/*2 * =============================================================================3 *  VibeQuant (vquant) — AI-Powered Financial Intelligence Platform4 * -----------------------------------------------------------------------------5 *  File:      client/src/components/ui/navigation-menu.tsx6 *7 *  Author:    Simon-Pierre Boucher8 *  Contact:   contact@spboucher.ai9 *  Website:   https://www.spboucher.ai10 *  Demo:      https://www.vquant.ai11 *  License:   MIT (see LICENSE)12 *13 *  Copyright © 2026 Simon-Pierre Boucher. All rights reserved.14 * =============================================================================15 */1617import * as React from "react"18import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu"19import { cva } from "class-variance-authority"20import { ChevronDown } from "lucide-react"2122import { cn } from "@/lib/utils"2324const NavigationMenu = React.forwardRef<25  React.ElementRef<typeof NavigationMenuPrimitive.Root>,26  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Root>27>(({ className, children, ...props }, ref) => (28  <NavigationMenuPrimitive.Root29    ref={ref}30    className={cn(31      "relative z-10 flex max-w-max flex-1 items-center justify-center",32      className33    )}34    {...props}35  >36    {children}37    <NavigationMenuViewport />38  </NavigationMenuPrimitive.Root>39))40NavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName4142const NavigationMenuList = React.forwardRef<43  React.ElementRef<typeof NavigationMenuPrimitive.List>,44  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.List>45>(({ className, ...props }, ref) => (46  <NavigationMenuPrimitive.List47    ref={ref}48    className={cn(49      "group flex flex-1 list-none items-center justify-center space-x-1",50      className51    )}52    {...props}53  />54))55NavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName5657const NavigationMenuItem = NavigationMenuPrimitive.Item5859const navigationMenuTriggerStyle = cva(60  "group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=open]:text-accent-foreground data-[state=open]:bg-accent/50 data-[state=open]:hover:bg-accent data-[state=open]:focus:bg-accent"61)6263const NavigationMenuTrigger = React.forwardRef<64  React.ElementRef<typeof NavigationMenuPrimitive.Trigger>,65  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Trigger>66>(({ className, children, ...props }, ref) => (67  <NavigationMenuPrimitive.Trigger68    ref={ref}69    className={cn(navigationMenuTriggerStyle(), "group", className)}70    {...props}71  >72    {children}{" "}73    <ChevronDown74      className="relative top-[1px] ml-1 h-3 w-3 transition duration-200 group-data-[state=open]:rotate-180"75      aria-hidden="true"76    />77  </NavigationMenuPrimitive.Trigger>78))79NavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName8081const NavigationMenuContent = React.forwardRef<82  React.ElementRef<typeof NavigationMenuPrimitive.Content>,83  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Content>84>(({ className, ...props }, ref) => (85  <NavigationMenuPrimitive.Content86    ref={ref}87    className={cn(88      "left-0 top-0 w-full 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 md:absolute md:w-auto ",89      className90    )}91    {...props}92  />93))94NavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName9596const NavigationMenuLink = NavigationMenuPrimitive.Link9798const NavigationMenuViewport = React.forwardRef<99  React.ElementRef<typeof NavigationMenuPrimitive.Viewport>,100  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Viewport>101>(({ className, ...props }, ref) => (102  <div className={cn("absolute left-0 top-full flex justify-center")}>103    <NavigationMenuPrimitive.Viewport104      className={cn(105        "origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]",106        className107      )}108      ref={ref}109      {...props}110    />111  </div>112))113NavigationMenuViewport.displayName =114  NavigationMenuPrimitive.Viewport.displayName115116const NavigationMenuIndicator = React.forwardRef<117  React.ElementRef<typeof NavigationMenuPrimitive.Indicator>,118  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Indicator>119>(({ className, ...props }, ref) => (120  <NavigationMenuPrimitive.Indicator121    ref={ref}122    className={cn(123      "top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in",124      className125    )}126    {...props}127  >128    <div className="relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md" />129  </NavigationMenuPrimitive.Indicator>130))131NavigationMenuIndicator.displayName =132  NavigationMenuPrimitive.Indicator.displayName133134export {135  navigationMenuTriggerStyle,136  NavigationMenu,137  NavigationMenuList,138  NavigationMenuItem,139  NavigationMenuContent,140  NavigationMenuTrigger,141  NavigationMenuLink,142  NavigationMenuIndicator,143  NavigationMenuViewport,144}145