"use client" import React, { useState } from "react" import { Highlight, PrismTheme } from "prism-react-renderer" import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs" import theme from "@/styles/prism-theme.json" import { CopyButton } from "./copy-button" interface InstallTabsProps { command: string npx?: boolean } type PackageManager = "pnpm" | "npm" | "yarn" | "bun" const packageManagers: Array<{ id: PackageManager; label: string }> = [ { id: "pnpm", label: "pnpm" }, { id: "npm", label: "npm" }, { id: "yarn", label: "yarn" }, { id: "bun", label: "bun" }, ] export const InstallTabs: React.FC = ({ command, npx = false, }) => { const [activeTab, setActiveTab] = useState("pnpm") const getCommandPrefix = (pm: PackageManager): string => { if (npx) { switch (pm) { case "pnpm": return "pnpm dlx" case "npm": return "npx" case "yarn": return "npx" case "bun": return "bunx --bun" default: return "npx" } } else { switch (pm) { case "pnpm": return "pnpm add" case "npm": return "npm install" case "yarn": return "yarn add" case "bun": return "bun add" default: return "npm install" } } } const getFullCommand = (pm: PackageManager): string => { const prefix = getCommandPrefix(pm) return `${prefix} ${command}` } const handleCopy = async () => { const fullCommand = getFullCommand(activeTab) try { await navigator.clipboard.writeText(fullCommand) } catch (err) { console.warn("Copy failed:", err) } } return (
setActiveTab(value as PackageManager)} className="flex-1" > {packageManagers.map((pm) => ( {pm.label} ))}
{({ className, style, tokens, getLineProps, getTokenProps }) => (
              {tokens.map((line, i) => (
                
1 {line.map((token, key) => ( ))}
))}
)}
) }