import React, { memo, useMemo, type MutableRefObject } from 'react'; import { SandpackPreview, SandpackProvider } from '@codesandbox/sandpack-react/unstyled'; import type { SandpackProviderProps, SandpackPreviewRef, PreviewProps, } from '@codesandbox/sandpack-react/unstyled'; import type { TStartupConfig } from 'librechat-data-provider'; import type { ArtifactFiles } from '~/common'; import { sharedFiles, sharedOptions } from '~/utils/artifacts'; export const ArtifactPreview = memo(function ({ files, fileKey, template, sharedProps, previewRef, currentCode, startupConfig, }: { files: ArtifactFiles; fileKey: string; template: SandpackProviderProps['template']; sharedProps: Partial; previewRef: MutableRefObject; currentCode?: string; startupConfig?: TStartupConfig; }) { const artifactFiles = useMemo(() => { if (Object.keys(files).length === 0) { return files; } const code = currentCode ?? ''; if (!code) { return files; } return { ...files, [fileKey]: { code }, }; }, [currentCode, files, fileKey]); const options: typeof sharedOptions = useMemo(() => { if (!startupConfig) { return sharedOptions; } return { ...sharedOptions, bundlerURL: template === 'static' ? startupConfig.staticBundlerURL : startupConfig.bundlerURL, }; }, [startupConfig, template]); if (Object.keys(artifactFiles).length === 0) { return null; } return ( ); });