import * as DropdownMenu from '@radix-ui/react-dropdown-menu'; import { DropdownMenuRadioGroup } from '@radix-ui/react-dropdown-menu'; import { motion } from 'framer-motion'; import { CheckIcon, ChevronRightIcon, DotFilledIcon, HamburgerMenuIcon, } from '@radix-ui/react-icons'; import { forwardRef, HTMLAttributes, ReactNode, useState } from 'react'; import { Button } from './Button'; import classnames from 'classnames'; import { HotKey } from './HotKey'; interface DropdownMenuRadioProps { children: ReactNode; onValueChange: (value: string) => void; value: string; items: { label: string; value: string; }[]; } export function DropdownMenuRadio({ children, items, onValueChange, value, }: DropdownMenuRadioProps) { return ( {children} {items.map((item) => ( {item.label} ))} ); } export function Dropdown() { const [bookmarksChecked, setBookmarksChecked] = useState(true); const [urlsChecked, setUrlsChecked] = useState(false); const [person, setPerson] = useState('pedro'); return ( ⌘T}>New Tab ⌘N}>New Window ⇧⌘N}> New Private Window }> More Tools ⌘S}>Save Page As… Create Shortcut… Name Window… Developer Tools setBookmarksChecked(!!v)} rightSlot={⌘B} leftSlot={ } > Show Bookmarks setUrlsChecked(!!v)} leftSlot={ } > Show Full URLs People Pedro Duarte Colm Tuite ); } const dropdownMenuClasses = 'bg-background rounded-md shadow-lg p-1.5 border border-gray-100'; interface DropdownMenuPortalProps { children: ReactNode; } function DropdownMenuPortal({ children }: DropdownMenuPortalProps) { return ( ('#radix-portal')}> {children} ); } const DropdownMenuContent = forwardRef( function DropdownMenuContent( { className, children, ...props }: DropdownMenu.DropdownMenuContentProps, ref, ) { return ( {children} ); }, ); type DropdownMenuItemProps = DropdownMenu.DropdownMenuItemProps & ItemInnerProps; function DropdownMenuItem({ leftSlot, rightSlot, className, children, ...props }: DropdownMenuItemProps) { return ( {children} ); } type DropdownMenuCheckboxItemProps = DropdownMenu.DropdownMenuCheckboxItemProps & ItemInnerProps; function DropdownMenuCheckboxItem({ leftSlot, rightSlot, children, ...props }: DropdownMenuCheckboxItemProps) { return ( {children} ); } type DropdownMenuSubTriggerProps = DropdownMenu.DropdownMenuSubTriggerProps & ItemInnerProps; function DropdownMenuSubTrigger({ leftSlot, rightSlot, children, ...props }: DropdownMenuSubTriggerProps) { return ( {children} ); } type DropdownMenuRadioItemProps = Omit< DropdownMenu.DropdownMenuRadioItemProps & ItemInnerProps, 'leftSlot' >; function DropdownMenuRadioItem({ rightSlot, children, ...props }: DropdownMenuRadioItemProps) { return ( } rightSlot={rightSlot} > {children} ); } const DropdownMenuSubContent = forwardRef( function DropdownMenuSubContent( { className, ...props }: DropdownMenu.DropdownMenuSubContentProps, ref, ) { return ( ); }, ); function DropdownMenuLabel({ className, children, ...props }: DropdownMenu.DropdownMenuLabelProps) { return ( {children} ); } function DropdownMenuSeparator({ className, ...props }: DropdownMenu.DropdownMenuSeparatorProps) { return ( ); } function DropdownMenuTrigger({ className, ...props }: DropdownMenu.DropdownMenuTriggerProps) { return ( ); } interface ItemInnerProps extends HTMLAttributes { leftSlot?: ReactNode; rightSlot?: ReactNode; children: ReactNode; noHover?: boolean; } const ItemInner = forwardRef(function ItemInner( { leftSlot, rightSlot, children, className, noHover, ...props }: ItemInnerProps, ref, ) { return (
{leftSlot}
{children}
{rightSlot &&
{rightSlot}
}
); });