| 'use client' | |
| import { useEffect, useState } from 'react' | |
| import Image from 'next/image' | |
| import { toast } from 'react-hot-toast' | |
| import { Button } from '@/components/ui/button' | |
| import pkg from '../../package.json' | |
| import { | |
| DropdownMenu, | |
| DropdownMenuContent, | |
| DropdownMenuItem, | |
| DropdownMenuSeparator, | |
| DropdownMenuTrigger | |
| } from '@/components/ui/dropdown-menu' | |
| import { IconCopy, IconExternalLink, IconGitHub } from '@/components/ui/icons' | |
| import SettingIcon from '@/assets/images/settings.svg' | |
| import { useCopyToClipboard } from '@/lib/hooks/use-copy-to-clipboard' | |
| export function UserMenu() { | |
| const [host, setHost] = useState('') | |
| const { isCopied, copyToClipboard } = useCopyToClipboard({ timeout: 2000 }) | |
| useEffect(() => { | |
| setHost(location.host) | |
| }, []) | |
| useEffect(() => { | |
| if (isCopied) { | |
| toast.success('复制成功') | |
| } | |
| }, [isCopied]) | |
| return ( | |
| <div className="flex items-center justify-between"> | |
| <DropdownMenu> | |
| <DropdownMenuTrigger asChild> | |
| <Button className="pl-0"> | |
| <div className="flex items-center justify-center text-xs font-medium uppercase rounded-full select-none h-7 w-7 shrink-0 bg-muted/50 text-muted-foreground"> | |
| <Image alt="settings" src={SettingIcon} width={20} /> | |
| </div> | |
| <span className="ml-2">设置</span> | |
| </Button> | |
| </DropdownMenuTrigger> | |
| <DropdownMenuContent sideOffset={8} align="start" className="w-[180px] bg-background"> | |
| <DropdownMenuItem | |
| onClick={() => | |
| location.href='#dialog="settings"' | |
| } | |
| className="cursor-pointer" | |
| > | |
| 设置用户 | |
| </DropdownMenuItem> | |
| <DropdownMenuSeparator /> | |
| <DropdownMenuItem | |
| onClick={() => | |
| location.href='#dialog="voice"' | |
| } | |
| className="cursor-pointer" | |
| > | |
| 语音设置 | |
| </DropdownMenuItem> | |
| <DropdownMenuSeparator /> | |
| <DropdownMenuItem asChild> | |
| <a | |
| href="https://github.com/weaigc/bingo/" | |
| target="_blank" | |
| rel="noopener noreferrer" | |
| className="inline-flex items-center justify-between w-full gap-2 cursor-pointer" | |
| > | |
| 开源地址 | |
| <IconGitHub /> | |
| <IconExternalLink className="w-3 h-3 ml-auto" /> | |
| </a> | |
| </DropdownMenuItem> | |
| <DropdownMenuSeparator /> | |
| <DropdownMenuItem asChild> | |
| <a | |
| href="https://huggingface.co/spaces/hf4all/bingo" | |
| target="_blank" | |
| rel="noopener noreferrer" | |
| className="inline-flex items-center justify-between w-full gap-2 cursor-pointer" | |
| > | |
| 托管地址 | |
| 🤗 | |
| <IconExternalLink className="w-3 h-3 ml-auto" /> | |
| </a> | |
| </DropdownMenuItem> | |
| <DropdownMenuSeparator /> | |
| <DropdownMenuItem asChild> | |
| <a | |
| href="https://huggingface.co/login?next=%2Fspaces%2Fhf4all%2Fbingo%3Fduplicate%3Dtrue%26visibility%3Dpublic" | |
| target="_blank" | |
| rel="noopener noreferrer" | |
| className="inline-flex items-center justify-between w-full gap-2 cursor-pointer" | |
| > | |
| 复制站点 | |
| <IconExternalLink className="w-3 h-3 ml-auto" /> | |
| </a> | |
| </DropdownMenuItem> | |
| <DropdownMenuSeparator /> | |
| <DropdownMenuItem className="flex-col items-start"> | |
| <div className="font-medium">版本信息 {pkg.version}</div> | |
| </DropdownMenuItem> | |
| <DropdownMenuSeparator /> | |
| <DropdownMenuItem className="flex-col items-start"> | |
| <div className="font-medium">站点域名</div> | |
| <div onClick={() => copyToClipboard(host)} className="flex gap-1 text-xs text-zinc-500 cursor-pointer"> | |
| {host} <IconCopy /> | |
| </div> | |
| </DropdownMenuItem> | |
| </DropdownMenuContent> | |
| </DropdownMenu> | |
| </div> | |
| ) | |
| } | |