import { useRef, useEffect, memo } from 'react'; import { ResizableHandleAlt, ResizablePanel } from '@librechat/client'; import type { ImperativePanelHandle } from 'react-resizable-panels'; interface ArtifactsPanelProps { artifacts: React.ReactNode | null; currentLayout: number[]; minSizeMain: number; shouldRender: boolean; onRenderChange: (shouldRender: boolean) => void; } /** * ArtifactsPanel component - memoized to prevent unnecessary re-renders * Only re-renders when artifacts visibility or layout changes */ const ArtifactsPanel = memo(function ArtifactsPanel({ artifacts, currentLayout, minSizeMain, shouldRender, onRenderChange, }: ArtifactsPanelProps) { const artifactsPanelRef = useRef(null); useEffect(() => { if (artifacts != null) { onRenderChange(true); requestAnimationFrame(() => { requestAnimationFrame(() => { artifactsPanelRef.current?.expand(); }); }); } else if (shouldRender) { onRenderChange(false); } }, [artifacts, shouldRender, onRenderChange]); if (!shouldRender) { return null; } return ( <> {artifacts != null && ( )}
{artifacts}
); }); ArtifactsPanel.displayName = 'ArtifactsPanel'; export default ArtifactsPanel;