mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-22 03:10:15 +01:00
🎹 fix: Autocompletion Chrome Bug on Action API Key Input
chore: remove `useOriginNavigate`
chore: set correct OpenAI Storage Source
fix: azure file deletions, instantiate clients by source for deletion
update code interpret files info
feat: deleteResourceFileId
chore: increase poll interval as azure easily rate limits
fix: openai file deletions, TODO: evaluate rejected deletion settled promises to determine which to delete from db records
file source icons
update table file filters
chore: file search info and versioning
fix: retrieval update with necessary tool_resources if specified
fix(useMentions): add optional chaining in case listMap value is undefined
fix: force assistant avatar roundedness
fix: azure assistants, check correct flag
chore: bump data-provider
77 lines
1.7 KiB
TypeScript
77 lines
1.7 KiB
TypeScript
import { FileSources } from 'librechat-data-provider';
|
|
import ProgressCircle from './ProgressCircle';
|
|
import SourceIcon from './SourceIcon';
|
|
import { cn } from '~/utils';
|
|
|
|
type styleProps = {
|
|
backgroundImage?: string;
|
|
backgroundSize?: string;
|
|
backgroundPosition?: string;
|
|
backgroundRepeat?: string;
|
|
};
|
|
|
|
const ImagePreview = ({
|
|
imageBase64,
|
|
url,
|
|
progress = 1,
|
|
className = '',
|
|
source,
|
|
}: {
|
|
imageBase64?: string;
|
|
url?: string;
|
|
progress?: number; // between 0 and 1
|
|
className?: string;
|
|
source?: FileSources;
|
|
}) => {
|
|
let style: styleProps = {
|
|
backgroundSize: 'cover',
|
|
backgroundPosition: 'center',
|
|
backgroundRepeat: 'no-repeat',
|
|
};
|
|
if (imageBase64) {
|
|
style = {
|
|
...style,
|
|
backgroundImage: `url(${imageBase64})`,
|
|
};
|
|
} else if (url) {
|
|
style = {
|
|
...style,
|
|
backgroundImage: `url(${url})`,
|
|
};
|
|
}
|
|
|
|
if (!style.backgroundImage) {
|
|
return null;
|
|
}
|
|
|
|
const radius = 55; // Radius of the SVG circle
|
|
const circumference = 2 * Math.PI * radius;
|
|
|
|
// Calculate the offset based on the loading progress
|
|
const offset = circumference - progress * circumference;
|
|
const circleCSSProperties = {
|
|
transition: 'stroke-dashoffset 0.3s linear',
|
|
};
|
|
|
|
return (
|
|
<div className={cn('h-14 w-14', className)}>
|
|
<button
|
|
type="button"
|
|
aria-haspopup="dialog"
|
|
aria-expanded="false"
|
|
className="h-full w-full"
|
|
style={style}
|
|
/>
|
|
{progress < 1 && (
|
|
<ProgressCircle
|
|
circumference={circumference}
|
|
offset={offset}
|
|
circleCSSProperties={circleCSSProperties}
|
|
/>
|
|
)}
|
|
<SourceIcon source={source} />
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default ImagePreview;
|