import * as React from "react" import { cn } from "@/lib/utils" import { useMediaQuery } from "@/hooks/use-media-query" import { useThemesConfig } from "@/hooks/use-themes-config" import { ChartCopyButton } from "@/components/chart-copy-button" import { Chart } from "@/components/chart-display" import { V0Button } from "@/components/v0-button" import { Button } from "@/registry/new-york/ui/button" import { Drawer, DrawerContent, DrawerTrigger, } from "@/registry/new-york/ui/drawer" import { Sheet, SheetContent, SheetTrigger } from "@/registry/new-york/ui/sheet" import { Tabs, TabsContent, TabsList, TabsTrigger, } from "@/registry/new-york/ui/tabs" export function ChartCodeViewer({ chart, className, children, }: { chart: Chart } & React.ComponentProps<"div">) { const [tab, setTab] = React.useState("code") const { themesConfig } = useThemesConfig() const isDesktop = useMediaQuery("(min-width: 768px)") const themeCode = React.useMemo(() => { return `\ @layer base { :root { ${Object.entries(themesConfig?.activeTheme.cssVars.light || {}) .map(([key, value]) => ` ${key}: ${value};`) .join("\n")} } .dark { ${Object.entries(themesConfig?.activeTheme.cssVars.dark || {}) .map(([key, value]) => ` ${key}: ${value};`) .join("\n")} } } ` }, [themesConfig]) const button = ( ) const content = ( <>
{children}
Code Theme {tab === "code" && (
)} {tab === "theme" && ( )}
              
                {`/* ${themesConfig?.activeTheme.name} */`}
                {themeCode.split("\n").map((line, index) => (
                  
                    {line}
                  
                ))}
              
            
) if (!isDesktop) { return ( {button} div.bg-muted]:shrink-0", className )} >
{content}
) } return ( {button} {content} ) }