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%
1/*2 * =============================================================================3 * VibeQuant (vquant) — AI-Powered Financial Intelligence Platform4 * -----------------------------------------------------------------------------5 * File: client/src/components/ui/dropdown-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 DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"19import { Check, ChevronRight, Circle } from "lucide-react"2021import { cn } from "@/lib/utils"2223const DropdownMenu = DropdownMenuPrimitive.Root2425const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger2627const DropdownMenuGroup = DropdownMenuPrimitive.Group2829const DropdownMenuPortal = DropdownMenuPrimitive.Portal3031const DropdownMenuSub = DropdownMenuPrimitive.Sub3233const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup3435const DropdownMenuSubTrigger = React.forwardRef<36 React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,37 React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {38 inset?: boolean39 }40>(({ className, inset, children, ...props }, ref) => (41 <DropdownMenuPrimitive.SubTrigger42 ref={ref}43 className={cn(44 "flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",45 inset && "pl-8",46 className47 )}48 {...props}49 >50 {children}51 <ChevronRight className="ml-auto" />52 </DropdownMenuPrimitive.SubTrigger>53))54DropdownMenuSubTrigger.displayName =55 DropdownMenuPrimitive.SubTrigger.displayName5657const DropdownMenuSubContent = React.forwardRef<58 React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,59 React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>60>(({ className, ...props }, ref) => (61 <DropdownMenuPrimitive.SubContent62 ref={ref}63 className={cn(64 "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg 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",65 className66 )}67 {...props}68 />69))70DropdownMenuSubContent.displayName =71 DropdownMenuPrimitive.SubContent.displayName7273const DropdownMenuContent = React.forwardRef<74 React.ElementRef<typeof DropdownMenuPrimitive.Content>,75 React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>76>(({ className, sideOffset = 4, ...props }, ref) => (77 <DropdownMenuPrimitive.Portal>78 <DropdownMenuPrimitive.Content79 ref={ref}80 sideOffset={sideOffset}81 className={cn(82 "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md 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",83 className84 )}85 {...props}86 />87 </DropdownMenuPrimitive.Portal>88))89DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName9091const DropdownMenuItem = React.forwardRef<92 React.ElementRef<typeof DropdownMenuPrimitive.Item>,93 React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {94 inset?: boolean95 }96>(({ className, inset, ...props }, ref) => (97 <DropdownMenuPrimitive.Item98 ref={ref}99 className={cn(100 "relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",101 inset && "pl-8",102 className103 )}104 {...props}105 />106))107DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName108109const DropdownMenuCheckboxItem = React.forwardRef<110 React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,111 React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>112>(({ className, children, checked, ...props }, ref) => (113 <DropdownMenuPrimitive.CheckboxItem114 ref={ref}115 className={cn(116 "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",117 className118 )}119 checked={checked}120 {...props}121 >122 <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">123 <DropdownMenuPrimitive.ItemIndicator>124 <Check className="h-4 w-4" />125 </DropdownMenuPrimitive.ItemIndicator>126 </span>127 {children}128 </DropdownMenuPrimitive.CheckboxItem>129))130DropdownMenuCheckboxItem.displayName =131 DropdownMenuPrimitive.CheckboxItem.displayName132133const DropdownMenuRadioItem = React.forwardRef<134 React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,135 React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>136>(({ className, children, ...props }, ref) => (137 <DropdownMenuPrimitive.RadioItem138 ref={ref}139 className={cn(140 "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",141 className142 )}143 {...props}144 >145 <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">146 <DropdownMenuPrimitive.ItemIndicator>147 <Circle className="h-2 w-2 fill-current" />148 </DropdownMenuPrimitive.ItemIndicator>149 </span>150 {children}151 </DropdownMenuPrimitive.RadioItem>152))153DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName154155const DropdownMenuLabel = React.forwardRef<156 React.ElementRef<typeof DropdownMenuPrimitive.Label>,157 React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {158 inset?: boolean159 }160>(({ className, inset, ...props }, ref) => (161 <DropdownMenuPrimitive.Label162 ref={ref}163 className={cn(164 "px-2 py-1.5 text-sm font-semibold",165 inset && "pl-8",166 className167 )}168 {...props}169 />170))171DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName172173const DropdownMenuSeparator = React.forwardRef<174 React.ElementRef<typeof DropdownMenuPrimitive.Separator>,175 React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>176>(({ className, ...props }, ref) => (177 <DropdownMenuPrimitive.Separator178 ref={ref}179 className={cn("-mx-1 my-1 h-px bg-muted", className)}180 {...props}181 />182))183DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName184185const DropdownMenuShortcut = ({186 className,187 ...props188}: React.HTMLAttributes<HTMLSpanElement>) => {189 return (190 <span191 className={cn("ml-auto text-xs tracking-widest opacity-60", className)}192 {...props}193 />194 )195}196DropdownMenuShortcut.displayName = "DropdownMenuShortcut"197198export {199 DropdownMenu,200 DropdownMenuTrigger,201 DropdownMenuContent,202 DropdownMenuItem,203 DropdownMenuCheckboxItem,204 DropdownMenuRadioItem,205 DropdownMenuLabel,206 DropdownMenuSeparator,207 DropdownMenuShortcut,208 DropdownMenuGroup,209 DropdownMenuPortal,210 DropdownMenuSub,211 DropdownMenuSubContent,212 DropdownMenuSubTrigger,213 DropdownMenuRadioGroup,214}215