"use client" import * as React from "react" import { IconCheck, IconCopy, IconPlus } from "@tabler/icons-react" import { useConfig } from "@/hooks/use-config" import { useIsMobile } from "@/hooks/use-mobile" import { copyToClipboardWithMeta } from "@/components/copy-button" import { Button } from "@/registry/new-york-v4/ui/button" import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/registry/new-york-v4/ui/dialog" import { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger, } from "@/registry/new-york-v4/ui/drawer" import { Tabs, TabsContent, TabsList, TabsTrigger, } from "@/registry/new-york-v4/ui/tabs" import { Tooltip, TooltipContent, TooltipTrigger, } from "@/registry/new-york-v4/ui/tooltip" export function DirectoryAddButton({ registry, }: { registry: { name: string } }) { const [config, setConfig] = useConfig() const [hasCopied, setHasCopied] = React.useState(false) const [open, setOpen] = React.useState(false) const isMobile = useIsMobile() const packageManager = config.packageManager || "pnpm" const commands = React.useMemo(() => { return { pnpm: `pnpm dlx shadcn@latest registry add ${registry.name}`, npm: `npx shadcn@latest registry add ${registry.name}`, yarn: `yarn dlx shadcn@latest registry add ${registry.name}`, bun: `bunx --bun shadcn@latest registry add ${registry.name}`, } }, [registry.name]) const command = commands[packageManager] React.useEffect(() => { if (hasCopied) { const timer = setTimeout(() => setHasCopied(false), 2000) return () => clearTimeout(timer) } }, [hasCopied]) const handleCopy = React.useCallback(() => { copyToClipboardWithMeta(command, { name: "copy_registry_add_command", properties: { command, registry: registry.name, }, }) setHasCopied(true) }, [command, registry.name]) const Trigger = ( Add ) const Content = ( { setConfig({ ...config, packageManager: value as "pnpm" | "npm" | "yarn" | "bun", }) }} className="gap-0 overflow-hidden rounded-lg border" > pnpm npm yarn bun {hasCopied ? ( ) : ( )} Copy command {hasCopied ? "Copied!" : "Copy command"} {Object.entries(commands).map(([key, cmd]) => ( {cmd} ))} ) if (isMobile) { return ( {Trigger} Add Registry Run this command to add {registry.name} to your project. {Content} Done ) } return ( {Trigger} Add Registry Run this command to add {registry.name} to your project. {Content} Done ) }
{cmd}