'use client' import * as React from 'react' import type { DevModeCodeLanguage, DevModeSnippetCodeTab } from './dev-mode-types' import { Button } from '@admin/components/ui/button' import { Card, CardContent, CardHeader } from '@admin/components/ui/card' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@admin/components/ui/tabs' import { useCopyToClipboard } from '@admin/hooks/use-copy-to-clipboard' import { Check, Copy } from 'lucide-react' import { PlainCodeFallback } from './plain-code-fallback' const LazyCodeMirror = React.lazy(() => import('./dev-mode-code-mirror')) interface CopyableCodeBlockProps { label: string code: string language: DevModeCodeLanguage tabs?: DevModeSnippetCodeTab[] } export function CopyableCodeBlock({ label, code, language, tabs }: CopyableCodeBlockProps) { const [copy, isCopied] = useCopyToClipboard() const fallbackTab: DevModeSnippetCodeTab = { id: 'code', label, language, code } const codeTabs = tabs && tabs.length > 0 ? tabs : [fallbackTab] const [activeTabId, setActiveTabId] = React.useState(codeTabs[0]?.id ?? fallbackTab.id) const activeTab = codeTabs.find((tab) => tab.id === activeTabId) ?? codeTabs[0] ?? fallbackTab const hasTabs = codeTabs.length > 1 return ( {hasTabs ? (
{label} {codeTabs.map((tab) => ( {tab.label} ))}
{codeTabs.map((tab) => ( }> ))}
) : ( <> {label} }> )}
) }