'use client' import { useState } from 'react' import { cn } from '../../../lib/utils' import { Button } from '../../../ui/button' import { Tabs, TabsContent, TabsList, TabsTrigger } from '../../../ui/tabs' import { CodeEditor, fileExtensionToEditorLang } from '../../../widgets' import { CodeArtifact } from '../artifacts' import { ChatCanvasActions } from '../actions' import { useChatCanvas } from '../context' interface CodeArtifactViewerProps { className?: string tabListClassName?: string defaultTab?: string tabs?: Record } export function CodeArtifactViewer({ className, tabs, defaultTab = 'code', }: CodeArtifactViewerProps) { const { displayedArtifact, updateArtifact } = useChatCanvas() const [updatedCode, setUpdatedCode] = useState() if (displayedArtifact?.type !== 'code') return null const codeArtifact = displayedArtifact as CodeArtifact const handleCodeChange = (newValue: string) => { setUpdatedCode(newValue) } const handleSaveChanges = () => { if (!updatedCode) return setUpdatedCode(undefined) updateArtifact(codeArtifact, updatedCode) } const codeEditorLanguage = fileExtensionToEditorLang( codeArtifact.data.file_name.split('.').pop() ?? '' ) return (
{defaultTab === 'code' && ( // Show code tab at the start if defaultTab is code Code )} {tabs && Object.entries(tabs).map(([key]) => ( {key} ))} {defaultTab !== 'code' && ( // Show code tab at the end if defaultTab is not code Code )}
{updatedCode && (
)}
{tabs && Object.entries(tabs).map(([key, value]) => ( {value} ))}
) }